Пример #1
0
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']))
Пример #2
0
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')))
Пример #3
0
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--'))
Пример #4
0
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))
Пример #5
0
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()
Пример #6
0
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---'))
Пример #7
0
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))
Пример #8
0
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---'))
Пример #9
0
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))
Пример #10
0
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'))
Пример #11
0
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'))
Пример #12
0
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'))
Пример #13
0
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'"))
Пример #14
0
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))
Пример #15
0
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'"))
Пример #16
0
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()))
Пример #17
0
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'"))
Пример #18
0
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))
Пример #19
0
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))
Пример #20
0
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))
Пример #21
0
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'))
Пример #22
0
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'))
Пример #23
0
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 }}"))
Пример #24
0
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()))
Пример #25
0
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'"))
Пример #26
0
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"))
Пример #27
0
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'))
Пример #28
0
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))
Пример #29
0
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--'))
Пример #30
0
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'))