def test_launch_config_has_unprompted_vars(survey_spec_factory): jt = JobTemplate(survey_enabled=True, survey_spec=survey_spec_factory( ['question1', 'question2'])) unprompted_config = JobLaunchConfig(extra_data={ 'question1': 'foobar', 'question4': 'foobar' }) assert unprompted_config.has_unprompted(jt) allowed_config = JobLaunchConfig(extra_data={ 'question1': 'foobar', 'question2': 'foobar' }) assert not allowed_config.has_unprompted(jt)
def test_project_update_metavars(self): data = Job( name='fake-job', pk=40, id=40, launch_type='manual', project=Project(name='jobs-sync', scm_revision='12345444'), job_template=JobTemplate(name='jobs-jt', id=92, pk=92), ).awx_meta_vars() for name in JOB_VARIABLE_PREFIXES: assert data['{}_project_revision'.format(name)] == '12345444' assert '{}_job_template_id'.format(name) in data assert data['{}_job_template_id'.format(name)] == 92 assert data['{}_job_template_name'.format(name)] == 'jobs-jt'
def mk_job_template( name, job_type='run', organization=None, inventory=None, credential=None, network_credential=None, cloud_credential=None, persisted=True, extra_vars='', project=None, spec=None, webhook_service='', ): if extra_vars: extra_vars = json.dumps(extra_vars) jt = JobTemplate(name=name, job_type=job_type, extra_vars=extra_vars, webhook_service=webhook_service, playbook='helloworld.yml') jt.inventory = inventory if jt.inventory is None: jt.ask_inventory_on_launch = True if persisted and credential: jt.save() jt.credentials.add(credential) if jt.machine_credential is None: jt.ask_credential_on_launch = True jt.project = project if spec is not None: jt.survey_spec = spec jt.survey_enabled = True if persisted: jt.save() if cloud_credential: cloud_credential.save() jt.credentials.add(cloud_credential) if network_credential: network_credential.save() jt.credentials.add(network_credential) jt.save() return jt
def test_cloud_credential_type_mutability(patch, organization, admin, credentialtype_ssh, credentialtype_aws): cred = Credential( credential_type=credentialtype_aws, name='Best credential ever', organization=organization, inputs={ 'username': u'jim', 'password': u'pass' } ) cred.save() jt = JobTemplate() jt.save() jt.credentials.add(cred) def _change_credential_type(): return patch( reverse('api:credential_detail', kwargs={'pk': cred.pk}), { 'credential_type': credentialtype_ssh.pk, 'inputs': { 'username': u'jim', 'password': u'pass' } }, admin ) response = _change_credential_type() assert response.status_code == 400 expected = ['You cannot change the credential type of the credential, ' 'as it may break the functionality of the resources using it.'] assert response.data['credential_type'] == expected response = patch( reverse('api:credential_detail', kwargs={'pk': cred.pk}), {'name': 'Worst credential ever'}, admin ) assert response.status_code == 200 assert Credential.objects.get(pk=cred.pk).name == 'Worst credential ever' jt.delete() response = _change_credential_type() assert response.status_code == 200
def test_survey_encryption_defaults(survey_spec_factory, question_type, default, maxlen, kwargs, expected): spec = survey_spec_factory([ { "required": True, "variable": "x", "min": 0, "max": maxlen, "type": question_type }, ]) if default is not None: spec['spec'][0]['default'] = default else: spec['spec'][0].pop('default', None) jt = JobTemplate(name="test-jt", survey_spec=spec, survey_enabled=True) extra_vars = json.loads(jt._update_unified_job_kwargs({}, kwargs).get('extra_vars')) assert extra_vars == expected
def test_project_update_metavars(self): data = Job( name='fake-job', pk=40, id=40, launch_type='manual', project=Project( name='jobs-sync', scm_revision='12345444' ), job_template=JobTemplate( name='jobs-jt', id=92, pk=92 ) ).awx_meta_vars() assert data['awx_project_revision'] == '12345444' assert 'tower_job_template_id' in data assert data['tower_job_template_id'] == 92 assert data['tower_job_template_name'] == 'jobs-jt'
def test_optional_survey_question_defaults( survey_spec_factory, question_type, default, min, max, expect_use, expect_value): spec = survey_spec_factory([ { "required": False, "default": default, "choices": "orange\nmilk\nchocolate\ncoffee", "variable": "c", "min": min, "max": max, "type": question_type }, ]) jt = JobTemplate(name="test-jt", survey_spec=spec, survey_enabled=True) defaulted_extra_vars = jt._update_unified_job_kwargs({}, {}) element = spec['spec'][0] if expect_use: assert jt._survey_element_validation(element, {element['variable']: element['default']}) == [] else: assert jt._survey_element_validation(element, {element['variable']: element['default']}) if expect_use: assert json.loads(defaulted_extra_vars['extra_vars'])['c'] == expect_value else: assert 'c' not in defaulted_extra_vars['extra_vars']
def test_display_survey_spec_encrypts_default(survey_spec_factory): spec = survey_spec_factory('var2') spec['spec'][0]['type'] = 'password' spec['spec'][0]['default'] = 'some-default' jt = JobTemplate(name="test-jt", survey_spec=spec, survey_enabled=True) assert jt.display_survey_spec()['spec'][0]['default'] == '$encrypted$'
response = put(reverse('api:credential_detail', kwargs={'pk': cred.pk}), params, admin) assert response.status_code == 200 cred = Credential.objects.all()[:1].get() assert cred.inputs['username'] == 'joe' assert 'password' not in cred.inputs @pytest.mark.django_db @pytest.mark.parametrize( 'relation, related_obj', [ ['ad_hoc_commands', AdHocCommand()], ['unifiedjobs', Job()], ['unifiedjobtemplates', JobTemplate()], ['unifiedjobtemplates', InventorySource(source='ec2')], ['projects', Project()], ['workflowjobnodes', WorkflowJobNode()], ], ) def test_credential_type_mutability(patch, organization, admin, credentialtype_ssh, credentialtype_aws, relation, related_obj): cred = Credential(credential_type=credentialtype_ssh, name='Best credential ever', organization=organization, inputs={ 'username': u'jim', 'password': u'pass'
def job(container_group): return Job(pk=1, id=1, project=Project(), instance_group=container_group, inventory=Inventory(), job_template=JobTemplate(id=1, name='foo'))
def job_template(project): jt = JobTemplate(name='unit-test-jt', project=project) apply_fake_roles(jt) return jt