Exemple #1
0
    def test_identifier_conflict(self):
        create_method = BaseManager.create
        call_count = [0]
        alert_rule = self.create_alert_rule()

        def mock_base_create(*args, **kwargs):
            if not call_count[0]:
                call_count[0] += 1
                # This incident will take the identifier we already fetched and
                # use it, which will cause the database to throw an integrity
                # error.
                with transaction.atomic():
                    incident = Incident.objects.create(
                        self.organization,
                        status=IncidentStatus.OPEN.value,
                        title="Conflicting Incident",
                        type=IncidentType.ALERT_TRIGGERED.value,
                        alert_rule=alert_rule,
                    )
                assert incident.identifier == kwargs["identifier"]
                try:
                    create_method(*args, **kwargs)
                except IntegrityError:
                    raise
                else:
                    self.fail("Expected an integrity error")
            else:
                call_count[0] += 1

            return create_method(*args, **kwargs)

        self.organization
        with patch.object(BaseManager, "create", new=mock_base_create):
            incident = Incident.objects.create(
                self.organization,
                alert_rule=alert_rule,
                status=IncidentStatus.OPEN.value,
                title="hi",
                type=IncidentType.ALERT_TRIGGERED.value,
            )
            # We should have 3 calls - one for initial create, one for conflict,
            # then the final one for the retry we get due to the conflict
            assert call_count[0] == 3
            # Ideally this would be 2, but because we create the conflicting
            # row inside of a transaction it ends up rolled back. We just want
            # to verify that it was created successfully.
            assert incident.identifier == 1
Exemple #2
0
    def test_simple(self):
        org = self.create_organization(
            name="test", status=OrganizationStatus.PENDING_DELETION)
        user = self.create_user()
        self.create_team(organization=org, name="test1")
        self.create_team(organization=org, name="test2")
        release = Release.objects.create(version="a" * 32,
                                         organization_id=org.id)
        repo = Repository.objects.create(organization_id=org.id,
                                         name=org.name,
                                         provider="dummy")
        commit_author = CommitAuthor.objects.create(organization_id=org.id,
                                                    name="foo",
                                                    email="*****@*****.**")
        commit = Commit.objects.create(repository_id=repo.id,
                                       organization_id=org.id,
                                       author=commit_author,
                                       key="a" * 40)
        ReleaseCommit.objects.create(organization_id=org.id,
                                     release=release,
                                     commit=commit,
                                     order=0)

        env = Environment.objects.create(organization_id=org.id,
                                         project_id=4,
                                         name="foo")
        release_env = ReleaseEnvironment.objects.create(organization_id=org.id,
                                                        project_id=4,
                                                        release_id=release.id,
                                                        environment_id=env.id)

        with self.tasks():
            with patch.object(DummyRepositoryProvider,
                              "delete_repository") as mock_delete_repo:
                delete_organization(object_id=org.id, actor_id=user.id)
                assert mock_delete_repo.call_count == 1

        assert not Organization.objects.filter(id=org.id).exists()
        assert not Environment.objects.filter(id=env.id).exists()
        assert not ReleaseEnvironment.objects.filter(
            id=release_env.id).exists()
        assert not Repository.objects.filter(id=repo.id).exists()
        assert not ReleaseCommit.objects.filter(
            organization_id=org.id).exists()
        assert not Release.objects.filter(organization_id=org.id).exists()
        assert not CommitAuthor.objects.filter(id=commit_author.id).exists()
        assert not Commit.objects.filter(id=commit.id).exists()
Exemple #3
0
 def test(self):
     with patch.object(AlertRuleTriggerAction,
                       "_type_registrations",
                       new={}):
         mock_handler = Mock()
         AlertRuleTriggerAction.register_type(
             "email", AlertRuleTriggerAction.Type.EMAIL, [])(mock_handler)
         incident = self.create_incident()
         metric_value = 1234
         with self.tasks():
             handle_trigger_action.delay(self.action.id,
                                         incident.id,
                                         self.project.id,
                                         "fire",
                                         metric_value=metric_value)
         mock_handler.assert_called_once_with(self.action, incident,
                                              self.project)
         mock_handler.return_value.fire.assert_called_once_with(
             metric_value)
    def test_simple(self, mock_build_repository_config):

        with patch.object(
            ExampleRepositoryProvider, "build_repository_config", return_value=self.repo_config_data
        ) as mock_get_repository_data:
            response = self.client.post(
                self.url, data={"provider": "integrations:example", "name": "getsentry/sentry"}
            )
            mock_get_repository_data.assert_called_once_with(
                organization=self.org, data={"my_config_key": "some_var"}
            )

        assert response.status_code == 201, (response.status_code, response.content)
        assert response.data["id"]

        repo = Repository.objects.get(id=response.data["id"])
        assert repo.provider == "integrations:example"
        assert repo.name == "getsentry/sentry"
        assert repo.url == "https://github.com/getsentry/sentry"
        assert repo.config == {"name": "getsentry/sentry"}
Exemple #5
0
def override_options(options):
    """
    A context manager for overriding specific configuration
    Options.
    """
    from django.conf import settings
    from sentry.options import default_manager

    wrapped = default_manager.store.get

    def new_get(key, **kwargs):
        try:
            return options[key.name]
        except KeyError:
            return wrapped(key, **kwargs)

    # Patch options into SENTRY_OPTIONS as well
    new_options = settings.SENTRY_OPTIONS.copy()
    new_options.update(options)
    with override_settings(SENTRY_OPTIONS=new_options):
        with patch.object(default_manager.store, "get", side_effect=new_get):
            yield
    def test_simple(self):
        self.login_as(user=self.user)

        org = self.create_organization(owner=self.user, name="baz")

        with patch.object(DummyRepositoryProvider,
                          "needs_auth",
                          return_value=False):
            url = reverse("sentry-api-0-organization-repositories",
                          args=[org.slug])
            response = self.client.post(url,
                                        data={
                                            "provider": "dummy",
                                            "name": "getsentry/sentry"
                                        })

        assert response.status_code == 201, (response.status_code,
                                             response.content)
        assert response.data["id"]

        repo = Repository.objects.get(id=response.data["id"])
        assert repo.provider == "dummy"
        assert repo.name == "getsentry/sentry"
Exemple #7
0
    def test_simple(self):
        self.login_as(user=self.user)
        org = self.create_organization(owner=self.user, name="baz")

        repo = Repository.objects.create(name="example",
                                         provider="dummy",
                                         organization_id=org.id)
        release = Release.objects.create(organization_id=org.id,
                                         version="abcabcabc")

        commit = Commit.objects.create(organization_id=org.id,
                                       repository_id=repo.id,
                                       key="a" * 40)

        ReleaseHeadCommit.objects.create(organization_id=org.id,
                                         repository_id=repo.id,
                                         release=release,
                                         commit=commit)

        refs = [{"repository": repo.name, "commit": "b" * 40}]

        release2 = Release.objects.create(organization_id=org.id,
                                          version="12345678")

        deploy = Deploy.objects.create(organization_id=org.id,
                                       release=release2,
                                       environment_id=5)

        with self.tasks():
            with patch.object(Deploy,
                              "notify_if_ready") as mock_notify_if_ready:
                fetch_commits(
                    release_id=release2.id,
                    user_id=self.user.id,
                    refs=refs,
                    previous_release_id=release.id,
                )

        commit_list = list(
            Commit.objects.filter(releasecommit__release=release2).order_by(
                "releasecommit__order"))

        # see DummyRepositoryProvider.compare_commits
        assert len(commit_list) == 3
        assert commit_list[0].repository_id == repo.id
        assert commit_list[0].organization_id == org.id
        assert commit_list[0].key == "62de626b7c7cfb8e77efb4273b1a3df4123e6216"
        assert commit_list[1].repository_id == repo.id
        assert commit_list[1].organization_id == org.id
        assert commit_list[1].key == "58de626b7c7cfb8e77efb4273b1a3df4123e6345"
        assert commit_list[2].repository_id == repo.id
        assert commit_list[2].organization_id == org.id
        assert commit_list[2].key == "b" * 40

        mock_notify_if_ready.assert_called_with(deploy.id, fetch_complete=True)

        latest_repo_release_environment = LatestRepoReleaseEnvironment.objects.get(
            repository_id=repo.id, environment_id=5)
        assert latest_repo_release_environment.deploy_id == deploy.id
        assert latest_repo_release_environment.release_id == release2.id
        assert latest_repo_release_environment.commit_id == commit_list[0].id
Exemple #8
0
    def test_log_finish(self):
        with patch.object(self.logger, "info") as mock:
            self.mediator.call()

        assert faux(mock).kwarg_equals("extra.at", "finish")
Exemple #9
0
    def test_log_start(self):
        with patch.object(self.logger, "info") as mock:
            self.mediator.call()

        assert faux(mock, 0).args_equals(None)
        assert faux(mock, 0).kwarg_equals("extra.at", "start")
Exemple #10
0
 def test_log_with_request_project(self, _):
     with patch.object(self.logger, "info") as log:
         self.mediator.log(at="test")
         assert faux(log).kwarg_equals("extra.project", "bar")
Exemple #11
0
    def test_log(self):
        with patch.object(self.logger, "info") as mock:
            self.mediator.log(at="test")

        mock.assert_called_with(None, extra={"at": "test"})