update tests to conform to new credential behavior and launch response

This commit is contained in:
AlanCoding
2016-04-08 16:15:30 -04:00
parent 86aa0136a2
commit 52d8993aa8
3 changed files with 29 additions and 27 deletions

View File

@@ -49,7 +49,7 @@ def test_job_ignore_unprompted_vars(runtime_data, job_template_prompts, post, us
response = post(reverse('api:job_template_launch', args=[job_template.pk]), response = post(reverse('api:job_template_launch', args=[job_template.pk]),
runtime_data, user('admin', True)) runtime_data, user('admin', True))
assert response.status_code == 202 assert response.status_code == 201
job_id = response.data['job'] job_id = response.data['job']
job_obj = Job.objects.get(pk=job_id) job_obj = Job.objects.get(pk=job_id)
@@ -80,7 +80,7 @@ def test_job_accept_prompted_vars(runtime_data, job_template_prompts, post, user
response = post(reverse('api:job_template_launch', args=[job_template.pk]), response = post(reverse('api:job_template_launch', args=[job_template.pk]),
runtime_data, user('admin', True)) runtime_data, user('admin', True))
assert response.status_code == 202 assert response.status_code == 201
job_id = response.data['job'] job_id = response.data['job']
job_obj = Job.objects.get(pk=job_id) job_obj = Job.objects.get(pk=job_id)
@@ -150,7 +150,7 @@ def test_job_launch_fails_without_inventory_access(deploy_jobtemplate, machine_c
response = post(reverse('api:job_template_launch', response = post(reverse('api:job_template_launch',
args=[deploy_jobtemplate.pk]), {}, common_user) args=[deploy_jobtemplate.pk]), {}, common_user)
assert response.status_code == 202 assert response.status_code == 201
# Assure that giving an inventory without access to the inventory blocks the launch # Assure that giving an inventory without access to the inventory blocks the launch
new_inv = deploy_jobtemplate.project.organization.inventories.create(name="user-can-not-use") new_inv = deploy_jobtemplate.project.organization.inventories.create(name="user-can-not-use")
@@ -170,7 +170,7 @@ def test_job_relaunch_prompted_vars(runtime_data, job_template_prompts, post, us
first_response = post(reverse('api:job_template_launch', args=[job_template.pk]), first_response = post(reverse('api:job_template_launch', args=[job_template.pk]),
runtime_data, admin_user) runtime_data, admin_user)
assert first_response.status_code == 202 assert first_response.status_code == 201
original_job = Job.objects.get(pk=first_response.data['job']) original_job = Job.objects.get(pk=first_response.data['job'])
# Launch a second job as a relaunch of the first # Launch a second job as a relaunch of the first
@@ -179,7 +179,7 @@ def test_job_relaunch_prompted_vars(runtime_data, job_template_prompts, post, us
relaunched_job = Job.objects.get(pk=second_response.data['job']) relaunched_job = Job.objects.get(pk=second_response.data['job'])
# Check that job data matches the original runtime variables # Check that job data matches the original runtime variables
assert first_response.status_code == 202 assert first_response.status_code == 201
assert 'job_launch_var' in yaml.load(relaunched_job.extra_vars) assert 'job_launch_var' in yaml.load(relaunched_job.extra_vars)
assert relaunched_job.limit == runtime_data['limit'] assert relaunched_job.limit == runtime_data['limit']
assert relaunched_job.job_type == runtime_data['job_type'] assert relaunched_job.job_type == runtime_data['job_type']
@@ -189,6 +189,7 @@ def test_job_relaunch_prompted_vars(runtime_data, job_template_prompts, post, us
@pytest.mark.django_db @pytest.mark.django_db
def test_job_launch_JT_with_validation(machine_credential, deploy_jobtemplate): def test_job_launch_JT_with_validation(machine_credential, deploy_jobtemplate):
deploy_jobtemplate.extra_vars = '{"job_template_var": 3}' deploy_jobtemplate.extra_vars = '{"job_template_var": 3}'
deploy_jobtemplate.credential = None
deploy_jobtemplate.save() deploy_jobtemplate.save()
kv = dict(extra_vars={"job_launch_var": 4}, credential=machine_credential.id) kv = dict(extra_vars={"job_launch_var": 4}, credential=machine_credential.id)
@@ -205,6 +206,7 @@ def test_job_launch_JT_with_validation(machine_credential, deploy_jobtemplate):
assert result assert result
assert 'job_template_var' in final_job_extra_vars assert 'job_template_var' in final_job_extra_vars
assert 'job_launch_var' in final_job_extra_vars assert 'job_launch_var' in final_job_extra_vars
assert job_obj.credential.id == machine_credential.id
@pytest.mark.django_db @pytest.mark.django_db
@pytest.mark.job_runtime_vars @pytest.mark.job_runtime_vars

View File

@@ -68,7 +68,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
def test_credential_implicit(self): def test_credential_implicit(self):
# Implicit, attached credentials # Implicit, attached credentials
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
response = self.post(self.launch_url, {}, expect=202) response = self.post(self.launch_url, {}, expect=201)
j = Job.objects.get(pk=response['job']) j = Job.objects.get(pk=response['job'])
self.assertTrue(j.status == 'new') self.assertTrue(j.status == 'new')
@@ -76,7 +76,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
# Sending extra_vars as a JSON string, implicit credentials # Sending extra_vars as a JSON string, implicit credentials
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
data = dict(extra_vars = '{\"a\":3}') data = dict(extra_vars = '{\"a\":3}')
response = self.post(self.launch_url, data, expect=202) response = self.post(self.launch_url, data, expect=201)
j = Job.objects.get(pk=response['job']) j = Job.objects.get(pk=response['job'])
ev_dict = yaml.load(j.extra_vars) ev_dict = yaml.load(j.extra_vars)
self.assertIn('a', ev_dict) self.assertIn('a', ev_dict)
@@ -87,7 +87,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
# Sending extra_vars as a JSON string, implicit credentials # Sending extra_vars as a JSON string, implicit credentials
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
data = dict(extra_vars = 'a: 3') data = dict(extra_vars = 'a: 3')
response = self.post(self.launch_url, data, expect=202) response = self.post(self.launch_url, data, expect=201)
j = Job.objects.get(pk=response['job']) j = Job.objects.get(pk=response['job'])
ev_dict = yaml.load(j.extra_vars) ev_dict = yaml.load(j.extra_vars)
self.assertIn('a', ev_dict) self.assertIn('a', ev_dict)
@@ -98,7 +98,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
# Explicit, credential # Explicit, credential
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
self.cred_sue.delete() self.cred_sue.delete()
response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=202) response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=201)
j = Job.objects.get(pk=response['job']) j = Job.objects.get(pk=response['job'])
self.assertEqual(j.status, 'new') self.assertEqual(j.status, 'new')
self.assertEqual(j.credential.pk, self.cred_doug.pk) self.assertEqual(j.credential.pk, self.cred_doug.pk)
@@ -107,26 +107,26 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
# Explicit, credential # Explicit, credential
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
self.cred_sue.delete() self.cred_sue.delete()
response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=202) response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=201)
j = Job.objects.get(pk=response['job']) j = Job.objects.get(pk=response['job'])
self.assertEqual(j.status, 'new') self.assertEqual(j.status, 'new')
self.assertEqual(j.credential.pk, self.cred_doug.pk) self.assertEqual(j.credential.pk, self.cred_doug.pk)
def test_credential_override(self): def test_credential_override_reject(self):
# Explicit, credential # Explicit, credential
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=202) response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=201)
j = Job.objects.get(pk=response['job']) j = Job.objects.get(pk=response['job'])
self.assertEqual(j.status, 'new') self.assertEqual(j.status, 'new')
self.assertEqual(j.credential.pk, self.cred_doug.pk) self.assertEqual(j.credential.pk, self.cred_sue.pk)
def test_credential_override_via_credential_id(self): def test_credential_override_via_credential_id_reject(self):
# Explicit, credential # Explicit, credential
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=202) response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=201)
j = Job.objects.get(pk=response['job']) j = Job.objects.get(pk=response['job'])
self.assertEqual(j.status, 'new') self.assertEqual(j.status, 'new')
self.assertEqual(j.credential.pk, self.cred_doug.pk) self.assertEqual(j.credential.pk, self.cred_sue.pk)
def test_bad_credential_launch_fail(self): def test_bad_credential_launch_fail(self):
# Can't launch a job template without a credential defined (or if we # Can't launch a job template without a credential defined (or if we
@@ -212,7 +212,7 @@ class JobTemplateLaunchPasswordsTest(BaseJobTestMixin, django.test.TransactionTe
def test_explicit_cred_with_ask_password(self): def test_explicit_cred_with_ask_password(self):
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
response = self.post(self.launch_url, {'ssh_password': 'whatever'}, expect=202) response = self.post(self.launch_url, {'ssh_password': 'whatever'}, expect=201)
j = Job.objects.get(pk=response['job']) j = Job.objects.get(pk=response['job'])
self.assertEqual(j.status, 'new') self.assertEqual(j.status, 'new')

View File

@@ -1087,7 +1087,7 @@ class JobTransactionTest(BaseJobTestMixin, django.test.LiveServerTestCase):
response = self.get(url) response = self.get(url)
self.assertTrue(response['can_start']) self.assertTrue(response['can_start'])
self.assertFalse(response['passwords_needed_to_start']) self.assertFalse(response['passwords_needed_to_start'])
response = self.post(url, {}, expect=202) response = self.post(url, {}, expect=201)
job = Job.objects.get(pk=job.pk) job = Job.objects.get(pk=job.pk)
self.assertEqual(job.status, 'successful', job.result_stdout) self.assertEqual(job.status, 'successful', job.result_stdout)
self.assertFalse(errors) self.assertFalse(errors)
@@ -1146,14 +1146,14 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
# should return, and should be able to launch template without error. # should return, and should be able to launch template without error.
response = self.get(launch_url) response = self.get(launch_url)
self.assertFalse(response['survey_enabled']) self.assertFalse(response['survey_enabled'])
self.post(launch_url, {}, expect=202) self.post(launch_url, {}, expect=201)
# Now post a survey spec and check that the answer is set in the # Now post a survey spec and check that the answer is set in the
# job's extra vars. # job's extra vars.
self.post(url, json.loads(TEST_SIMPLE_REQUIRED_SURVEY), expect=200) self.post(url, json.loads(TEST_SIMPLE_REQUIRED_SURVEY), expect=200)
response = self.get(launch_url) response = self.get(launch_url)
self.assertTrue(response['survey_enabled']) self.assertTrue(response['survey_enabled'])
self.assertTrue('favorite_color' in response['variables_needed_to_start']) self.assertTrue('favorite_color' in response['variables_needed_to_start'])
response = self.post(launch_url, dict(extra_vars=dict(favorite_color="green")), expect=202) response = self.post(launch_url, dict(extra_vars=dict(favorite_color="green")), expect=201)
job = Job.objects.get(pk=response["job"]) job = Job.objects.get(pk=response["job"])
job_extra = json.loads(job.extra_vars) job_extra = json.loads(job.extra_vars)
self.assertTrue("favorite_color" in job_extra) self.assertTrue("favorite_color" in job_extra)
@@ -1187,7 +1187,7 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
with self.current_user(self.user_sue): with self.current_user(self.user_sue):
response = self.post(url, json.loads(TEST_SURVEY_REQUIREMENTS), expect=200) response = self.post(url, json.loads(TEST_SURVEY_REQUIREMENTS), expect=200)
# Just the required answer should work # Just the required answer should work
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo")), expect=202) self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo")), expect=201)
# Short answer but requires a long answer # Short answer but requires a long answer
self.post(launch_url, dict(extra_vars=dict(long_answer='a', reqd_answer="foo")), expect=400) self.post(launch_url, dict(extra_vars=dict(long_answer='a', reqd_answer="foo")), expect=400)
# Long answer but requires a short answer # Long answer but requires a short answer
@@ -1199,9 +1199,9 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
# Integer that's too big # Integer that's too big
self.post(launch_url, dict(extra_vars=dict(int_answer=10, reqd_answer="foo")), expect=400) self.post(launch_url, dict(extra_vars=dict(int_answer=10, reqd_answer="foo")), expect=400)
# Integer that's just riiiiight # Integer that's just riiiiight
self.post(launch_url, dict(extra_vars=dict(int_answer=3, reqd_answer="foo")), expect=202) self.post(launch_url, dict(extra_vars=dict(int_answer=3, reqd_answer="foo")), expect=201)
# Integer bigger than min with no max defined # Integer bigger than min with no max defined
self.post(launch_url, dict(extra_vars=dict(int_answer_no_max=3, reqd_answer="foo")), expect=202) self.post(launch_url, dict(extra_vars=dict(int_answer_no_max=3, reqd_answer="foo")), expect=201)
# Integer answer that's the wrong type # Integer answer that's the wrong type
self.post(launch_url, dict(extra_vars=dict(int_answer="test", reqd_answer="foo")), expect=400) self.post(launch_url, dict(extra_vars=dict(int_answer="test", reqd_answer="foo")), expect=400)
# Float that's too big # Float that's too big
@@ -1209,7 +1209,7 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
# Float that's too small # Float that's too small
self.post(launch_url, dict(extra_vars=dict(float_answer=1.995, reqd_answer="foo")), expect=400) self.post(launch_url, dict(extra_vars=dict(float_answer=1.995, reqd_answer="foo")), expect=400)
# float that's just riiiiight # float that's just riiiiight
self.post(launch_url, dict(extra_vars=dict(float_answer=2.01, reqd_answer="foo")), expect=202) self.post(launch_url, dict(extra_vars=dict(float_answer=2.01, reqd_answer="foo")), expect=201)
# float answer that's the wrong type # float answer that's the wrong type
self.post(launch_url, dict(extra_vars=dict(float_answer="test", reqd_answer="foo")), expect=400) self.post(launch_url, dict(extra_vars=dict(float_answer="test", reqd_answer="foo")), expect=400)
# Wrong choice in single choice # Wrong choice in single choice
@@ -1219,11 +1219,11 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
# Wrong type for multi choicen # Wrong type for multi choicen
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice="two")), expect=400) self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice="two")), expect=400)
# Right choice in single choice # Right choice in single choice
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", single_choice="two")), expect=202) self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", single_choice="two")), expect=201)
# Right choices in multi choice # Right choices in multi choice
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice=["one", "two"])), expect=202) self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice=["one", "two"])), expect=201)
# Nested json # Nested json
self.post(launch_url, dict(extra_vars=dict(json_answer=dict(test="val", num=1), reqd_answer="foo")), expect=202) self.post(launch_url, dict(extra_vars=dict(json_answer=dict(test="val", num=1), reqd_answer="foo")), expect=201)
# Bob can access and update the survey because he's an org-admin # Bob can access and update the survey because he's an org-admin
with self.current_user(self.user_bob): with self.current_user(self.user_bob):