Пример #1
0
def test_create_existing_tag(expected_commits):
    # Creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *first*, so that the function will
    # return before touching edx/configuration.
    ordered_commits = OrderedDict([
        find_repo_item(expected_commits, 'edx/edx-platform'),
        find_repo_item(expected_commits, 'edx/configuration'),
    ])

    find_repo(ordered_commits,
              'edx/edx-platform').create_ref.side_effect = ALREADY_EXISTS

    # Creating a tag that does not already exist anywhere.
    result = create_ref_for_repos(
        ordered_commits,
        "tag-exists-some-repos",
        dry=False,
    )

    assert result is False
    find_repo(ordered_commits,
              'edx/edx-platform').create_ref.assert_called_once_with(
                  sha="deadbeef12345",
                  ref="refs/tags/tag-exists-some-repos",
              )

    assert not find_repo(ordered_commits,
                         'edx/configuration').create_ref.called
Пример #2
0
def test_create_existing_tag_at_end(expected_commits):
    # Creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last* so that other repos will have
    # been touched first.
    ordered_commits = OrderedDict([
        find_repo_item(expected_commits, 'edx/configuration'),
        find_repo_item(expected_commits, 'edx/edx-platform'),
    ])

    find_repo(ordered_commits,
              'edx/edx-platform').create_ref.side_effect = ALREADY_EXISTS

    result = create_ref_for_repos(
        ordered_commits,
        "tag-exists-some-repos",
        dry=False,
    )
    assert result is False

    find_repo(ordered_commits,
              'edx/edx-platform').create_ref.assert_called_once_with(
                  sha="deadbeef12345",
                  ref="refs/tags/tag-exists-some-repos",
              )

    find_repo(ordered_commits,
              'edx/configuration').create_ref.assert_called_once_with(
                  sha="12345deadbeef",
                  ref="refs/tags/tag-exists-some-repos",
              )

    # Second request failed, so rollback the first.
    find_repo(ordered_commits, 'edx/configuration'
              ).create_ref.return_value.delete.assert_called_once_with()
Пример #3
0
def test_create_happy_path():
    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    # creating a tag that does not already exist anywhere
    result = create_ref_for_repos(
        {
            repo_objs[repo_name]: ref_info
            for repo_name, ref_info
            in expected_commits.items()
        },
        "tag-exists-no-repos",
        dry=False,
    )
    assert result is True

    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-no-repos",
    )

    repo_objs['edx/configuration'].create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-no-repos",
    )

    repo_objs['edx/XBlock'].create_ref.assert_called_once_with(
        sha="1a2b3c4d5e6f",
        ref="refs/tags/tag-exists-no-repos",
    )
Пример #4
0
def test_create_existing_tag():

    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS

    # creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *first*
    ordered_commits = OrderedDict(
        (repo_objs[repo_name], expected_commits[repo_name])
        for repo_name
        in ('edx/edx-platform', 'edx/configuration')
    )

    # creating a tag that does not already exist anywhere
    result = create_ref_for_repos(
        ordered_commits,
        "tag-exists-some-repos",
        dry=False,
    )

    assert result is False
    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    assert not repo_objs['edx/configuration'].create_ref.called
Пример #5
0
def test_create_existing_tag():

    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS

    # creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *first*
    ordered_commits = OrderedDict(
        (repo_objs[repo_name], expected_commits[repo_name])
        for repo_name in ('edx/edx-platform', 'edx/configuration'))

    # creating a tag that does not already exist anywhere
    result = create_ref_for_repos(
        ordered_commits,
        "tag-exists-some-repos",
        dry=False,
    )

    assert result is False
    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    assert not repo_objs['edx/configuration'].create_ref.called
Пример #6
0
def test_create_happy_path():
    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    # creating a tag that does not already exist anywhere
    result = create_ref_for_repos(
        {
            repo_objs[repo_name]: ref_info
            for repo_name, ref_info in expected_commits.items()
        },
        "tag-exists-no-repos",
        dry=False,
    )
    assert result is True

    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-no-repos",
    )

    repo_objs['edx/configuration'].create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-no-repos",
    )

    repo_objs['edx/XBlock'].create_ref.assert_called_once_with(
        sha="1a2b3c4d5e6f",
        ref="refs/tags/tag-exists-no-repos",
    )
Пример #7
0
def test_create_existing_tag_at_end_no_rollback(expected_commits):
    # Creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last* so that other repos will have
    # been touched first.
    ordered_commits = OrderedDict([
        find_repo_item(expected_commits, 'edx/configuration'),
        find_repo_item(expected_commits, 'edx/edx-platform'),
    ])

    find_repo(ordered_commits,
              'edx/edx-platform').create_ref.side_effect = ALREADY_EXISTS

    with pytest.raises(TagReleaseError) as excinfo:
        create_ref_for_repos(
            ordered_commits,
            "tag-exists-some-repos",
            rollback_on_fail=False,
            dry=False,
        )

    find_repo(ordered_commits,
              'edx/edx-platform').create_ref.assert_called_once_with(
                  sha="deadbeef12345",
                  ref="refs/tags/tag-exists-some-repos",
              )

    find_repo(ordered_commits,
              'edx/configuration').create_ref.assert_called_once_with(
                  sha="12345deadbeef",
                  ref="refs/tags/tag-exists-some-repos",
              )

    # Second request failed, no rollback of the first.
    assert not find_repo(
        ordered_commits,
        'edx/configuration').create_ref.return_value.delete.called

    assert "No rollback attempted" in str(excinfo.value)
    assert "Reference already exists" in str(excinfo.value)
    assert "Refs exist on the following repos: " in str(excinfo.value)
    assert "edx/configuration" in str(excinfo.value)
Пример #8
0
def test_create_existing_tag_at_end_rollback_failure(expected_commits):
    # Creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last* so that other repos will have
    # been touched first.
    ordered_commits = OrderedDict([
        find_repo_item(expected_commits, 'edx/configuration'),
        find_repo_item(expected_commits, 'edx/edx-platform'),
    ])

    edx_edx_platform = find_repo(ordered_commits, 'edx/edx-platform')
    edx_edx_platform.create_ref.side_effect = ALREADY_EXISTS
    # When we try to delete the configuration tag, it will fail with a 500 error
    edx_configuration = find_repo(ordered_commits, 'edx/configuration')
    edx_configuration.create_ref.return_value.delete.side_effect = GitHubError(
        Mock(status_code=500))

    with pytest.raises(TagReleaseError) as excinfo:
        create_ref_for_repos(
            ordered_commits,
            "tag-exists-some-repos",
            dry=False,
        )

    edx_edx_platform.create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    edx_configuration.create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-some-repos",
    )

    # Second response failed, so try to rollback.
    # ... but configuration fails, so we get an exception
    edx_configuration.create_ref.return_value.delete.assert_called_once_with()
    assert "failed to delete ref on the following repos: edx/configuration" in str(
        excinfo)
Пример #9
0
def test_create_existing_tag_at_end_rollback_failure():

    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS
    # when we try to delete the configuration tag, it will fail with a 500 error
    repo_objs[
        'edx/configuration'].create_ref.return_value.delete.side_effect = GitHubError(
            Mock(status_code=500))

    # creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last*
    ordered_commits = OrderedDict(
        (repo_objs[repo_name], expected_commits[repo_name])
        for repo_name in ('edx/configuration', 'edx/edx-platform'))

    with pytest.raises(RuntimeError) as excinfo:
        result = create_ref_for_repos(
            ordered_commits,
            "tag-exists-some-repos",
            dry=False,
        )

    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    repo_objs['edx/configuration'].create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-some-repos",
    )

    # second response failed, so try to rollback.
    # ... but configuration fails, so we get an exception
    repo_objs[
        'edx/configuration'].create_ref.return_value.delete.assert_called_once_with(
        )
    assert "failed to delete ref on the following repos: edx/configuration" in str(
        excinfo)
Пример #10
0
def test_create_existing_tag_at_end_no_rollback():

    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS

    # creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last*
    ordered_commits = OrderedDict(
        (repo_objs[repo_name], expected_commits[repo_name])
        for repo_name
        in ('edx/configuration', 'edx/edx-platform')
    )

    with pytest.raises(RuntimeError) as excinfo:
        result = create_ref_for_repos(
            ordered_commits,
            "tag-exists-some-repos",
            rollback_on_fail=False,
            dry=False,
        )

    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    repo_objs['edx/configuration'].create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-some-repos",
    )

    # second request failed, no rollback of the first.
    assert not repo_objs['edx/configuration'].create_ref.return_value.delete.called

    assert "No rollback attempted" in str(excinfo.value)
    assert "Reference already exists" in str(excinfo.value)
    assert "Refs exist on the following repos: " in str(excinfo.value)
    assert "edx/configuration" in str(excinfo.value)
Пример #11
0
def test_create_existing_tag_at_end_no_rollback():

    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS

    # creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last*
    ordered_commits = OrderedDict(
        (repo_objs[repo_name], expected_commits[repo_name])
        for repo_name in ('edx/configuration', 'edx/edx-platform'))

    with pytest.raises(RuntimeError) as excinfo:
        result = create_ref_for_repos(
            ordered_commits,
            "tag-exists-some-repos",
            rollback_on_fail=False,
            dry=False,
        )

    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    repo_objs['edx/configuration'].create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-some-repos",
    )

    # second request failed, no rollback of the first.
    assert not repo_objs[
        'edx/configuration'].create_ref.return_value.delete.called

    assert "No rollback attempted" in str(excinfo.value)
    assert "Reference already exists" in str(excinfo.value)
    assert "Refs exist on the following repos: " in str(excinfo.value)
    assert "edx/configuration" in str(excinfo.value)
Пример #12
0
def test_create_existing_tag_at_end_rollback_failure():

    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS
    # when we try to delete the configuration tag, it will fail with a 500 error
    repo_objs['edx/configuration'].create_ref.return_value.delete.side_effect = GitHubError(Mock(status_code=500))

    # creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last*
    ordered_commits = OrderedDict(
        (repo_objs[repo_name], expected_commits[repo_name])
        for repo_name
        in ('edx/configuration', 'edx/edx-platform')
    )

    with pytest.raises(RuntimeError) as excinfo:
        result = create_ref_for_repos(
            ordered_commits,
            "tag-exists-some-repos",
            dry=False,
        )

    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    repo_objs['edx/configuration'].create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-some-repos",
    )

    # second response failed, so try to rollback.
    # ... but configuration fails, so we get an exception
    repo_objs['edx/configuration'].create_ref.return_value.delete.assert_called_once_with()
    assert "failed to delete ref on the following repos: edx/configuration" in str(excinfo)
Пример #13
0
def test_create_happy_path(expected_commits):
    # Creating a tag that does not already exist anywhere.
    result = create_ref_for_repos(expected_commits,
                                  "tag-exists-no-repos",
                                  dry=False)
    assert result is True

    find_repo(expected_commits,
              'edx/edx-platform').create_ref.assert_called_once_with(
                  sha="deadbeef12345",
                  ref="refs/tags/tag-exists-no-repos",
              )

    find_repo(expected_commits,
              'edx/configuration').create_ref.assert_called_once_with(
                  sha="12345deadbeef",
                  ref="refs/tags/tag-exists-no-repos",
              )

    find_repo(expected_commits,
              'edx/XBlock').create_ref.assert_called_once_with(
                  sha="1a2b3c4d5e6f",
                  ref="refs/tags/tag-exists-no-repos",
              )
Пример #14
0
def test_create_existing_tag_at_end():

    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS

    # creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last*
    ordered_commits = OrderedDict(
        (repo_objs[repo_name], expected_commits[repo_name])
        for repo_name
        in ('edx/configuration', 'edx/edx-platform')
    )

    result = create_ref_for_repos(
        ordered_commits,
        "tag-exists-some-repos",
        dry=False,
    )
    assert result is False

    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    repo_objs['edx/configuration'].create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-some-repos",
    )

    # second request failed, so rollback the first.
    repo_objs['edx/configuration'].create_ref.return_value.delete.assert_called_once_with()
Пример #15
0
def test_create_existing_tag_at_end():

    repo_objs = {
        repo_name: mock_repository(repo_name)
        for repo_name in expected_commits
    }

    repo_objs['edx/edx-platform'].create_ref.side_effect = ALREADY_EXISTS

    # creating a tag that already exists in edx-platform: we'll make sure
    # that edx-platform is attempted *last*
    ordered_commits = OrderedDict(
        (repo_objs[repo_name], expected_commits[repo_name])
        for repo_name in ('edx/configuration', 'edx/edx-platform'))

    result = create_ref_for_repos(
        ordered_commits,
        "tag-exists-some-repos",
        dry=False,
    )
    assert result is False

    repo_objs['edx/edx-platform'].create_ref.assert_called_once_with(
        sha="deadbeef12345",
        ref="refs/tags/tag-exists-some-repos",
    )

    repo_objs['edx/configuration'].create_ref.assert_called_once_with(
        sha="12345deadbeef",
        ref="refs/tags/tag-exists-some-repos",
    )

    # second request failed, so rollback the first.
    repo_objs[
        'edx/configuration'].create_ref.return_value.delete.assert_called_once_with(
        )