Beispiel #1
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()
Beispiel #2
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))
Beispiel #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--'))
Beispiel #4
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---'))
Beispiel #5
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))
Beispiel #6
0
def test_plugin_matrix_runs_with_two_matrices_and_contains_tags(caplog):
    stream = StringIO('''
    - name: test1
      matrix:
        tags:
          - m1
          - m2
        tasks:
          - name: test2
            matrix:
              tags:
                - m3
              tasks:
                - name: Testing task
                  echo: "Hello world. {{ matrix_tag }}"
    ''')
    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('entry: m3'))
    assert_that(caplog.text, contains_string('Hello world. m3'))

    assert_that(context.variables.last(), not has_entry('matrix_tag', 'm2'))
    assert_that(context.variables.last(), not has_entry('matrix_list', ['m2']))
Beispiel #7
0
def test_plugin_shell_invalid():
    assert_that(Shell.valid({}), equal_to(False))
    assert_that(Shell.valid(None), equal_to(False))
    assert_that(Shell.valid(OrderedDict({'a': 'abc'})), equal_to(False))

    initialize()

    stream = StringIO('''
    - name: test1
      shell: False
    ''')
    document = loader.ordered_load(stream)
    assert_that(TopLevel.valid(document), equal_to(False))
Beispiel #8
0
def test_plugin_matrix_runs_with_two_elements(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)

    for node in nodes:
        node.execute(None)

    assert_that(caplog.text, contains_string('entry: m1'))
    assert_that(caplog.text, contains_string('entry: m2'))
    assert_that(caplog.text, contains_string('Hello world.'))
Beispiel #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))
Beispiel #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'))
Beispiel #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'))
Beispiel #12
0
def test_plugin_continue_invalid():
    assert_that(Continue.valid({}), equal_to(False))
    assert_that(Continue.valid(None), equal_to(False))
    assert_that(Continue.valid(OrderedDict({'a': 'abc'})), equal_to(False))

    initialize()

    stream = StringIO('''
    - name: test1
      continue:
        - i1
        - i2
    ''')
    document = loader.ordered_load(stream)
    assert_that(TopLevel.valid(document), equal_to(False))
Beispiel #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'"))
Beispiel #14
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'))
Beispiel #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'"))
Beispiel #16
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'"))
Beispiel #17
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()))
Beispiel #18
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))
Beispiel #19
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))
Beispiel #20
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))
Beispiel #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'))
Beispiel #22
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))
Beispiel #23
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()))
Beispiel #24
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 }}"))
Beispiel #25
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"))
Beispiel #26
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'))
Beispiel #27
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'"))
Beispiel #28
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'))
Beispiel #29
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))
Beispiel #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'))