def test_plugin_matrix_runs_with_two_elements_and_contains_tags(caplog): stream = StringIO(''' - name: test1 matrix: tags: - m1 - m2 tasks: - name: Testing task echo: Hello world. ''') document = loader.ordered_load(stream) assert_that(TopLevel.valid(document), equal_to(True)) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(context.variables.last(), not has_entry('matrix_tag', 'm2')) assert_that(context.variables.last(), not has_entry('matrix_list', ['m2'])) assert_that(caplog.text, contains_string('entry: m1')) assert_that(caplog.text, contains_string('entry: m2')) assert_that(caplog.text, contains_string('Hello world.')) assert_that(context.variables.last(), not has_entry('matrix_tag', 'm2')) assert_that(context.variables.last(), not has_entry('matrix_list', ['m2']))
def test_plugin_matrix_runs_with_two_matrices_with_multiple_attempts(caplog): stream = StringIO(''' - name: test1 matrix: tags: - m1 - m2 tasks: - name: test2 matrix: tags: - m3 tasks: - name: Testing task echo: Hello world. attempts: 3 ''') document = loader.ordered_load(stream) assert_that(TopLevel.valid(document), equal_to(True)) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('Hello world.')) assert_that(caplog.text, is_not(contains_string('failure')))
def test_plugin_set_list_with_items(caplog): stream = StringIO(''' - name: test1 set: bits: - 1 - 2 - 3 - name: test2 echo: '--{{ item }}--' with_items: "{{ bits }}" ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('| --1--')) assert_that(caplog.text, contains_string('| --2--')) assert_that(caplog.text, contains_string('| --3--'))
def test_plugin_top_level_build_ordereddict_list_broken(): subject = TopLevel.build([OrderedDict({'name': 'Testing'})]) from deployer.plugins.plugin import InvalidNode for node in subject: assert_that(calling(node.execute).with_args(None), raises(InvalidNode))
def test_plugin_echo_renders_node(caplog): stream = StringIO(''' - name: test0 echo: "{{ node }}" - name: test1 echo: "{{ node }}" - name: test2 echo: "{{ node }}" ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for index, node in enumerate(nodes): node.execute(context) assert_that(len(caplog.records), equal_to(11)) assert_that(caplog.records[1].message, starts_with("test%d is starting" % index)) assert_that(caplog.records[2].message, starts_with("| %s" % platform.node())) assert_that(caplog.records[3].message, starts_with("test%d has finished" % index)) caplog.clear()
def test_plugin_continue_with_stage_works(caplog): stream = StringIO(''' - name: test1 stage: tasks: - name: test1 continue: when: - '1 == 1' - echo: "---FAILED---" - echo: '---WORKS---' ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, not contains_string('---FAILED---')) assert_that(caplog.text, contains_string('---WORKS---'))
def test_plugin_top_level_build_list_broken(): subject = TopLevel.build([{}]) from deployer.plugins.plugin import InvalidNode for node in subject: assert_that(calling(node.execute).with_args(None), raises(InvalidNode))
def test_plugin_continue_will_continue(caplog): stream = StringIO(''' - name: test1 matrix: tags: - m1 - m2 - m3 tasks: - name: test1 continue: when: - 'False' - echo: "---{{ matrix_tag }}---" - echo: '---WORKS---' ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('---m1---')) assert_that(caplog.text, contains_string('---m2---')) assert_that(caplog.text, contains_string('---m3---')) assert_that(caplog.text, contains_string('---WORKS---'))
def test_plugin_top_level_build_errored_plugin(): subject = TopLevel.build( [OrderedDict({ 'name': 'Testing', 'env': { 'a': 123 } })]) from deployer.plugins.plugin import FailedValidation for node in subject: assert_that( calling(node.execute).with_args(None), raises(FailedValidation))
def test_plugin_stage_fails_inner_task(caplog): stream = StringIO(''' - name: test1 stage: tasks: - fail: Exiting with style ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) for node in nodes: node.execute(None) assert_that(caplog.text, contains_string('Exiting with style'))
def test_plugin_command_on_unix(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 command: echo Hello ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('| Hello'))
def test_plugin_command_on_win(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 command: \'\Windows\System32\cmd.exe /c echo Hello world\' ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('| Hello world'))
def test_plugin_command_on_win_bad(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 command: sdfsdfdsf329909092 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string("'failure'"))
def test_plugin_echo_with_simple_when(caplog): stream = StringIO(''' - name: test0 echo: "{{ node }}" when: nbcpus == 0 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for index, node in enumerate(nodes): node.execute(context) assert_that(len(caplog.records), equal_to(2))
def test_plugin_shell_on_unix_bad(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 shell: script: /nonexistent ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string("'failure'"))
def test_plugin_echo_renders_node(capenv): stream = StringIO(''' - name: test0 env: set: "Joe": "{{ node }}" ''') document = loader.ordered_load(stream) node = next(TopLevel.build(document)) context = Context() node.execute(context) assert_that(os.getenv('Joe', None), equal_to(platform.node()))
def test_plugin_command_on_unix_nonzero_return(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 command: "false" ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string("'failure'"))
def test_top_level_is_created(): initialize() stream = StringIO(''' - name: test1 echo: hi1 - name: test2 echo: hi2 - name: test3 echo: hi3 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) for node in nodes: assert_that(node, instance_of(TopLevel))
def test_plugin_env_unset_all_and_adds_one_via_str(capenv): stream = StringIO(''' - name: test1 env: set: "Joe": "Benden" unset: '*' ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) for node in nodes: node.execute(None) assert_that('Joe' in os.environ, equal_to(True)) assert_that(len(os.environ), equal_to(1))
def test_plugin_env_unset_filter(capenv): stream = StringIO(''' - name: test1 env: unset: 'J*' ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) os.environ['Joe'] = '123' os.putenv('Joe', '123') for node in nodes: node.execute(None) assert_that(os.getenv('Joe', None), equal_to(None))
def test_plugin_shell_on_win(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 shell: script: \'echo Hello world\' executable: cmd ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('| Hello world'))
def test_plugin_shell_timeout_on_unix(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 shell: script: "sleep 5 && echo Hello" executable: bash timeout: 0.1 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, not contains_string('| Hello'))
def test_plugin_fail_fails_rendering_multiple_items_without_a_context(caplog): stream = StringIO(''' - name: test0 fail: "{{ item }}" with_items: - a-0 - b-0 - c-0 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) for index, node in enumerate(nodes): node.execute(None) assert_that(len(caplog.records), equal_to(5)) assert_that(caplog.text, contains_string("{{ item }}"))
def test_plugin_env_will_render_node(capenv, caplog): stream = StringIO(''' - name: test0 env: set: "Joe": "{{ node }}" - name: test case echo: "{{ env.Joe }}" ''') document = loader.ordered_load(stream) context = Context() for node in TopLevel.build(document): node.execute(context) assert_that(os.getenv('Joe', None), equal_to(platform.node())) assert_that(caplog.text, contains_string("| %s" % platform.node()))
def test_plugin_shell_on_win_bad_with_retry(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 shell: script: sdfsdfdsf329909092 executable: cmd attempts: 2 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string("'failure'"))
def test_plugin_shell_on_unix_nonzero_return_with_retries(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 shell: script: "false" attempts: 2 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string("'failure'")) assert_that(caplog.text, contains_string("Task failed all retry attempts"))
def test_plugin_set_works(caplog): stream = StringIO(''' - name: test1 set: joe: benden - name: test2 echo: '{{ joe }}' ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('| benden'))
def test_plugin_env_set_one(capenv): stream = StringIO(''' - name: test1 env: set: "Joe": "Blarg" - name: test2 echo: hi2 - name: test3 echo: hi3 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) for node in nodes: node.execute(None) assert_that('Joe' in os.environ, equal_to(True))
def test_plugin_command_with_register_result_method_on_win( caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 command: \'\Windows\System32\cmd.exe /c echo Hello world\' register: test1 - name: result1 echo: "--{{ test1.succeeded() }}--" ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('--True--'))
def test_plugin_shell_silent_failure_on_unix(caplog, reactor): # noqa: no-cover stream = StringIO(''' - name: test1 shell: script: 'echo Hello >&2 && false' executable: bash silent: true timeout: 5.0 ''') document = loader.ordered_load(stream) nodes = TopLevel.build(document) context = Context() for node in nodes: node.execute(context) assert_that(caplog.text, contains_string('failure')) assert_that(caplog.text, contains_string('| Hello'))