def test_random_choice(self): self.populate_file('main.yaml', '''--- variables: my_list: ['one', 'two', 'three'] steps: - echo: {from: '{{ random_choice(my_list) }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) random.seed(123) self.assertTrue(runner.run_tests()) self.assertTrue(check_file(join(self.test_dir, 'one.output'), 'three'))
def test_computed_available_other_step(self): self.populate_file( 'main.yaml', '''--- steps: - echo: {from: 'hello', register: {foo: 'bar'}} - echo: {from: '{{ foo }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'one.output'), 'bar'))
def test_cmd_variable_override_inventory(self): self.populate_file('inventory.yml', '''--- one: bar ''') self.populate_file( 'main.yaml', '''--- steps: - echo: {from: '{{ one }}', to: 1.output} - echo: {from: '{{ two }}', to: 2.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), join(self.test_dir, 'inventory.yml'), environment={ 'one': 'baz', 'two': 'bax' }) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, '1.output'), 'baz')) self.assertTrue(check_file(join(self.test_dir, '2.output'), 'bax'))
def test_write_file(self): self.populate_file( 'main.yaml', '''--- variables: user_email: 123 steps: - echo: {from: '{{ user_email }}', to: 'debug.output'} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) self.assertTrue(runner.run_tests()) self.assertTrue(check_file(join(self.test_dir, 'debug.output'), '123'))
def test_random_functions(self): Faker.seed(4321) self.populate_file( 'main.yaml', '''--- steps: - echo: {from: '{{ random("ipv4_private") }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) self.assertTrue(runner.run_tests()) self.assertTrue( check_file(join(self.test_dir, 'one.output'), '10.32.135.245'))
def test_vars_available_got(self): self.populate_file('main.yaml', '''--- include: - one.yaml - two.yaml ''') self.populate_file('one.yaml', '''--- variables: foo: bar steps: - echo: {from: '{{ foo }}', to: one.output} ''') self.populate_file('two.yaml', '''--- steps: - echo: {from: '{{ foo }}', to: two.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'one.output'), 'bar')) self.assertTrue(check_file(join(self.test_dir, 'two.output'), 'bar'))
def test_run_ignore_errors(self, m): m.get('http://test.com', status_code=500) self.populate_file( 'main.yaml', '''--- steps: - http: {get: {url: 'http://test.com', response_code: 200}, ignore_errors: true} - echo: {from: 'test2', to: main2.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue( check_file(join(self.test_dir, 'main2.output'), 'test2'))
def test_cmd_override_all(self): self.populate_file('inventory.yml', '''--- foo2: baz ''') self.populate_file('main.yaml', '''--- variables: foo: baz steps: - echo: actions: - {from: '{{ foo }}', to: one.output} - {from: '{{ foo2 }}', to: two.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), join(self.test_dir, 'inventory.yml'), cmd_env={'foo': 'bad', 'foo2': 'bad'}) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'one.output'), 'bad')) self.assertTrue(check_file(join(self.test_dir, 'two.output'), 'bad'))
def test_custom_functions_available(self): self.populate_file('custom_filter.py', '''def function_my_custom(): return {'key': 'value'} def function_my_other(input): return _not_a_fun(input) def _not_a_fun(arg): return 'to_str=' + str(arg) ''') self.populate_file('main.yaml', '''--- steps: - echo: {from: '{{ my_custom() }}', to: one.output} - echo: {from: '{{ my_other("test") }}', to: two.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None, filter_list=[join(self.test_dir, 'custom_filter.py')]) self.assertTrue(runner.run_tests()) self.assertTrue(check_file(join(self.test_dir, 'one.output'), "{'key': 'value'}")) self.assertTrue(check_file(join(self.test_dir, 'two.output'), 'to_str=test'))
def test_simple_include(self): self.populate_file('main.yaml', '''--- include: simple_file.yaml ''') self.populate_file('simple_file.yaml', '''--- variables: foo: bar steps: - echo: {from: '{{ foo }}', to: foo.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'foo.output'), 'bar'))
def test_computed_with_template(self): self.populate_file('main.yaml', '''--- variables: path: /home/user test: main.yml steps: - echo: {from: 'hello', register: {foo: '{{ path }}/{{ test }}'}} - echo: {from: '{{ foo }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'one.output'), '/home/user/main.yml'))
def test_override_inventory(self): self.populate_file('inventory.yml', '''--- foo: bar ''') self.populate_file('main.yaml', '''--- variables: foo: baz steps: - echo: {from: '{{ foo }}', to: main.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), join(self.test_dir, 'inventory.yml')) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'main.output'), 'baz'))
def test_run_on_include_and_later(self): self.populate_file('main.yaml', '''--- include: file: simple_file.yaml variables: file: include as: test run_on_include: true steps: - run: include: test variables: file: other ''') self.populate_file('simple_file.yaml', '''--- steps: - echo: {from: 'hello', to: '{{ file }}.output'} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'include.output'), 'hello')) self.assertTrue(check_file(join(self.test_dir, 'other.output'), 'hello'))
def test_read_write_to_file_template(self): self.populate_resource('foo/baz/bar.json', '123') self.populate_file( 'main.yaml', '''--- variables: filename: foo/baz/bar.json steps: - echo: {from_file: '{{ filename }}', to: 'resources/{{ filename.replace("/baz/", "/bar/")}}'} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) self.assertTrue(runner.run_tests()) self.assertTrue( check_file(join(self.test_dir, 'resources/foo/bar/bar.json'), '123'))
def test_register_override_cmd(self): self.populate_file('main.yaml', '''--- variables: foo: baz steps: - echo: actions: - {from: 'bar', register: {foo: '{{ OUTPUT }}'}} - {from: '{{ foo }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None, cmd_env={'foo': 'bad'}) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'one.output'), 'bar'))
def test_custom_both_available(self): self.populate_file('custom_filter.py', '''def filter_increment(input): if isinstance(input, int): return input + 1 return 'not an int' def function_my_other(input): return _not_a_fun(input) def _not_a_fun(arg): return 'to_str=' + str(arg) ''') self.populate_file('main.yaml', '''--- steps: - echo: {from: '{{ 221 | increment }}', to: one.output} - echo: {from: '{{ my_other("test") }}', to: two.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None, filter_list=[join(self.test_dir, 'custom_filter.py')]) self.assertTrue(runner.run_tests()) self.assertTrue(check_file(join(self.test_dir, 'one.output'), '222')) self.assertTrue(check_file(join(self.test_dir, 'two.output'), 'to_str=test'))
def test_run_system_variables(self): os.environ["SECRET_PASSWORD"] = "******" self.populate_file( 'main.yaml', '''--- steps: - echo: {from: '{{ SECRET_PASSWORD }}', to: sys_env.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None, system_environment=dict(os.environ)) runner.run_tests() self.assertTrue( check_file(join(self.test_dir, 'sys_env.output'), '123'))
def test_random_int(self): self.populate_file( 'main.yaml', '''--- steps: - echo: {from: '{{ random_int(1, 10) }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) random.seed(123) self.assertTrue(runner.run_tests()) self.assertTrue(check_file(join(self.test_dir, 'one.output'), '9')) # no upper limit self.populate_file( 'main.yaml', '''--- steps: - echo: {from: '{{ random_int(1) }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) random.seed(123) self.assertTrue(runner.run_tests()) self.assertTrue( check_file(join(self.test_dir, 'one.output'), '5186474716495645053')) # no lower limit self.populate_file( 'main.yaml', '''--- steps: - echo: {from: '{{ random_int(range_to=1) }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) random.seed(123) self.assertTrue(runner.run_tests()) self.assertTrue( check_file(join(self.test_dir, 'one.output'), '-2936754363331581815'))
def test_for(self): self.populate_file('main.yaml', '''--- variables: list: [1, 2, 3, 4, 5, 6] steps: - loop: foreach: in: '{{ list }}' do: echo: {from: '{{ ITEM }}', to: '{{ ITEM }}.output'} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) self.assertTrue(runner.run_tests()) for i in range(1, 6): self.assertTrue(check_file(join(self.test_dir, str(i) + '.output'), str(i)))
def test_inventory_vars_available_in_include(self): self.populate_file('inventory.yml', '''--- foo: bar ''') self.populate_file('main.yaml', '''--- include: one.yaml steps: - echo: {from: '{{ foo }}', to: main.output} ''') self.populate_file('one.yaml', '''--- steps: - echo: {from: '{{ foo }}', to: include.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), join(self.test_dir, 'inventory.yml')) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'include.output'), 'bar'))
def test_run_finally(self): self.populate_file( 'main.yaml', '''--- steps: - echo: {from: '123', to: sys_env.output} finally: - sh: command: 'rm sys_env.output' path: '{{ CURRENT_DIR }}' ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None, system_environment=dict(os.environ)) runner.run_tests() self.assertFalse( check_file(join(self.test_dir, 'sys_env.output'), '123'))
def test_run_in_docker(self): self.populate_file( 'main.yaml', '''--- variables: docker: true steps: - sh: command: "grep 'docker|lxc' /proc/1/cgroup" return_code: 1 ignore_errors: true register: {docker: false} - echo: {from: '{{ docker }}', to: 'debug.output'} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) self.assertTrue(runner.run_tests()) self.assertTrue( check_file(join(self.test_dir, 'debug.output'), 'False'))
def test_include_skipped_test(self): self.populate_file('main.yaml', '''--- include: simple_file.yaml steps: - echo: {from: '12', to: bar.output} ''') self.populate_file('simple_file.yaml', '''--- ignore: true variables: foo: bar steps: - echo: {from: '{{ foo }}', to: foo.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertFalse(os.path.exists(join(self.test_dir, 'foo.output'))) self.assertTrue(check_file(join(self.test_dir, 'bar.output'), '12'))
def test_run_skip_if_short(self): self.populate_file( 'main.yaml', '''--- variables: no_output: true steps: - echo: from: 'hello world' to: main1.output skip_if: '{{ no_output }}' - echo: {from: 'test2', to: main2.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue( not os.path.exists(join(self.test_dir, 'main1.output'))) self.assertTrue( check_file(join(self.test_dir, 'main2.output'), 'test2'))
def test_access_variables(self): self._add_output('resources/test.py', "print('{\"variable\":\"value\"}')") self.populate_file( 'main.yaml', '''--- variables: site_url: 'http://www.python.org' steps: - selenium: test: driver: '/usr/lib/geckodriver' file: test/tmp/selenium/resources/test.py register: {variable: '{{ OUTPUT.variable }}'} - echo: {from: '{{ variable }}', to: variable.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) self.assertTrue(runner.run_tests()) self.assertTrue( check_file(join(self.test_dir, 'variable.output'), 'value'))
def test_vars_override_computed(self): self.populate_file('main.yaml', '''--- include: - one.yaml - file: two.yaml variables: foo: baz ''') self.populate_file('one.yaml', '''--- steps: - echo: {from: 'hello', register: {foo: 'bar'}} ''') self.populate_file('two.yaml', '''--- steps: - echo: {from: '{{ foo }}', to: one.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue(check_file(join(self.test_dir, 'one.output'), 'baz'))
def test_multiple_includes(self): self.populate_file('main.yaml', '''--- include: - file: simple_file.yaml run_on_include: false - other_simple_file.yaml ''') self.populate_file('simple_file.yaml', '''--- variables: foo: bar steps: - echo: {from: '{{ foo }}', to: foo.output} ''') self.populate_file('other_simple_file.yaml', '''--- variables: foo: baz steps: - echo: {from: '{{ foo }}', to: other.output} ''') runner = Runner(self.test_dir, join(self.test_dir, 'main.yaml'), None) runner.run_tests() self.assertTrue(not os.path.exists(join(self.test_dir, 'foo.output'))) self.assertTrue(check_file(join(self.test_dir, 'other.output'), 'baz'))