Ejemplo n.º 1
0
 def test_deleted_metric(self, request):
     """Post an measurement for a deleted metric."""
     self.database.measurements.find_one.return_value = dict(_id="id", sources=[])
     self.report["subjects"][SUBJECT_ID]["metrics"] = {}
     request.json = dict(metric_uuid=METRIC_ID, sources=[])
     self.assertEqual(dict(ok=False), post_measurement(self.database))
     self.database.measurements.update_one.assert_not_called()
Ejemplo n.º 2
0
 def test_ignored_measurement_entities_and_failed_measurement(
         self, request):
     """Post a measurement where the last successful one has ignored entities."""
     self.database.measurements.find_one.side_effect = [
         dict(
             _id="id1",
             count=dict(status=None, status_start="2018-12-01"),
             sources=[self.source()],
         ),
         dict(
             _id="id2",
             status="target_met",
             sources=[
                 self.source(
                     entities=[dict(key="entity1")],
                     entity_user_data=dict(entity1=dict(
                         status="false_positive", rationale="Rationale")),
                 )
             ],
         ),
     ]
     self.posted_measurement["sources"].append(
         self.source(entities=[dict(key="entity1")]))
     request.json = self.posted_measurement
     self.new_measurement["count"].update(
         dict(status="target_met", value="0"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 3
0
 def test_changed_measurement_entity_key(self, request):
     """Post a measurement whose value and entities are the same, except for a changed entity key."""
     self.old_measurement["sources"] = [
         self.source(entities=[dict(key="a")],
                     entity_user_data=dict(a=dict(status="confirmed")))
     ]
     self.posted_measurement["sources"].append(
         self.source(entities=[dict(old_key="a", key="b")]))
     request.json = self.posted_measurement
     self.new_measurement["count"].update(
         dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once_with(
         dict(
             metric_uuid=METRIC_ID,
             sources=[
                 self.source(
                     entities=[dict(key="b", old_key="a")],
                     entity_user_data=dict(b=dict(status="confirmed")))
             ],
             count=dict(
                 value="1",
                 status="near_target_met",
                 status_start="2019-01-01",
                 direction="<",
                 target="0",
                 near_target="10",
                 debt_target=None,
             ),
             start="2019-01-01",
             end="2019-01-01",
         ))
Ejemplo n.º 4
0
 def test_first_measurement(self, request):
     """Post the first measurement for a metric."""
     self.database.measurements.find_one.return_value = None
     self.database.measurements.find.return_value = []
     request.json = dict(metric_uuid=METRIC_ID, sources=[])
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 5
0
 def test_changed_measurement_value(self, request):
     """Post a changed measurement for a metric."""
     self.posted_measurement["sources"].append(self.source())
     request.json = self.posted_measurement
     self.new_measurement["count"].update(
         dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 6
0
 def test_new_source(self, request):
     """Post a measurement for a new source."""
     del self.old_measurement["sources"][0]
     self.posted_measurement["sources"].append(
         self.source(entities=[dict(key="entity1")]))
     request.json = self.posted_measurement
     self.new_measurement["count"].update(
         dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 7
0
 def test_changed_measurement_value(self, request):
     """Post a changed measurement for a metric."""
     measurement = self.database.measurements.find_one.return_value = dict(
         _id="id", metric_uuid=METRIC_ID, status="target_met",
         sources=[dict(source_uuid=SOURCE_ID, value="0", entities=[])])
     self.database.measurements.find.return_value = [measurement]
     self.sources.append(
         dict(source_uuid=SOURCE_ID, value="1", total=None, parse_error=None, connection_error=None, entities=[]))
     request.json = dict(metric_uuid=METRIC_ID, sources=self.sources)
     self.new_measurement["count"].update(dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 8
0
 def test_technical_debt_off(self, request):
     """Test that a new measurement is added when technical debt has been turned off."""
     self.report["subjects"][SUBJECT_ID]["metrics"][METRIC_ID]["debt_target"] = "100"
     self.report["subjects"][SUBJECT_ID]["metrics"][METRIC_ID]["accept_debt"] = False
     self.sources.append(
         dict(source_uuid=SOURCE_ID, value="1", parse_error=None, connection_error=None, entities=[]))
     self.database.measurements.find_one.return_value = dict(
         _id="id", metric_uuid=METRIC_ID, sources=self.sources,
         count=dict(value="1", status="debt_target_met", target="0", near_target="10", debt_target="100"))
     request.json = dict(metric_uuid=METRIC_ID, sources=self.sources)
     self.new_measurement["count"].update(dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 9
0
 def test_ignored_measurement_entities(self, request):
     """Post a measurement where the old one has ignored entities."""
     self.database.measurements.find_one.return_value = dict(
         _id="id", status="target_met",
         sources=[
             dict(value="1", parse_error=None, connection_error=None,
                  entity_user_data=dict(entity1=dict(status="false_positive", rationale="Rationale")),
                  entities=[dict(key="entity1")])])
     self.sources.append(dict(value="1", parse_error=None, connection_error=None, entities=[dict(key="entity1")]))
     request.json = dict(metric_uuid=METRIC_ID, sources=self.sources)
     self.assertEqual(dict(ok=True), post_measurement(self.database))
     self.database.measurements.update_one.assert_called_once_with(
         filter={'_id': 'id'}, update={'$set': {'end': '2019-01-01'}})
Ejemplo n.º 10
0
 def test_all_previous_measurements_were_failed_measurements(self, request):
     """Post a measurement without a last successful one."""
     self.database.measurements.find_one.side_effect = [
         dict(_id="id1",
              count=dict(status=None),
              sources=[self.source(connection_error="Error")]),
         None,
     ]
     self.posted_measurement["sources"].append(
         self.source(entities=[dict(key="entity1")]))
     request.json = self.posted_measurement
     self.new_measurement["count"].update(
         dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 11
0
 def test_changed_measurement_entities(self, request):
     """Post a measurement whose value is the same, but with different entities."""
     measurement = self.database.measurements.find_one.return_value = dict(
         _id="id", metric_uuid=METRIC_ID, status="target_met",
         sources=[
             dict(source_uuid=SOURCE_ID, value="1", entities=[dict(key="a")],
                  entity_user_data=dict(a="attributes"))])
     self.database.measurements.find.return_value = [measurement]
     self.sources.append(
         dict(source_uuid=SOURCE_ID, value="1", total=None, parse_error=None, connection_error=None,
              entities=[dict(key="b")]))
     request.json = dict(metric_uuid=METRIC_ID, sources=self.sources)
     self.new_measurement["count"].update(dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 12
0
 def test_all_previous_measurements_were_failed_measurements(self, request):
     """Post a measurement without a last successful one."""
     self.database.measurements.find_one.side_effect = [
         dict(
             _id="id1",
             status=None,
             sources=[
                 dict(source_uuid=SOURCE_ID, value=None, parse_error=None, connection_error="Error", entities=[])]),
         None]
     self.sources.append(
         dict(source_uuid=SOURCE_ID, value="1", parse_error=None, connection_error=None,
              entities=[dict(key="entity1")]))
     request.json = dict(metric_uuid=METRIC_ID, sources=self.sources)
     self.new_measurement["count"].update(dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 13
0
 def test_technical_debt_off(self, request):
     """Test that a new measurement is added when technical debt has been turned off."""
     self.report["subjects"][SUBJECT_ID]["metrics"][METRIC_ID][
         "debt_target"] = "100"
     self.report["subjects"][SUBJECT_ID]["metrics"][METRIC_ID][
         "accept_debt"] = False
     self.posted_measurement["sources"].append(self.source())
     self.old_measurement["count"] = dict(value="1",
                                          status="debt_target_met",
                                          target="0",
                                          near_target="10",
                                          debt_target="100")
     request.json = self.posted_measurement
     self.new_measurement["count"].update(
         dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 14
0
 def test_ignored_measurement_entities(self, request):
     """Post a measurement where the old one has ignored entities."""
     self.old_measurement["sources"] = [
         self.source(
             entities=[dict(key="entity1")],
             entity_user_data=dict(entity1=dict(status="false_positive",
                                                rationale="Rationale")),
         )
     ]
     self.posted_measurement["sources"].append(
         self.source(entities=[dict(key="entity1")]))
     request.json = self.posted_measurement
     self.assertEqual(dict(ok=True), post_measurement(self.database))
     self.database.measurements.update_one.assert_called_once_with(
         filter={"_id": "id"}, update={"$set": {
             "end": "2019-01-01"
         }})
Ejemplo n.º 15
0
 def test_expired_technical_debt(self, request):
     """Test that a new measurement is added when technical debt expires."""
     debt_end_date = date.today() - timedelta(days=1)
     self.report["subjects"][SUBJECT_ID]["metrics"][METRIC_ID][
         "debt_end_date"] = debt_end_date.isoformat()
     self.report["subjects"][SUBJECT_ID]["metrics"][METRIC_ID][
         "debt_target"] = "100"
     self.posted_measurement["sources"].append(self.source())
     self.old_measurement["count"] = dict(value="1",
                                          status="debt_target_met",
                                          target="0",
                                          near_target="10",
                                          debt_target="100")
     request.json = self.posted_measurement
     self.new_measurement["count"].update(
         dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 16
0
 def test_changed_measurement_entities(self, request):
     """Post a measurement whose value is the same, but with different entities."""
     self.old_measurement["count"] = dict(status="near_target_met",
                                          status_start="2018-01-01",
                                          value="1")
     self.old_measurement["sources"] = [
         self.source(entities=[dict(key="a")],
                     entity_user_data=dict(a="attributes"))
     ]
     self.posted_measurement["sources"].append(
         self.source(entities=[dict(key="b")]))
     request.json = self.posted_measurement
     self.new_measurement["count"].update(
         dict(status="near_target_met",
              status_start="2018-01-01",
              value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 17
0
 def test_ignored_measurement_entities_and_failed_measurement(self, request):
     """Post a measurement where the last successful one has ignored entities."""
     self.database.measurements.find_one.side_effect = [
         dict(
             _id="id1", status=None,
             sources=[
                 dict(source_uuid=SOURCE_ID, value=None, parse_error=None, connection_error="Error", entities=[])]),
         dict(
             _id="id2", status="target_met",
             sources=[
                 dict(source_uuid=SOURCE_ID, value="1", parse_error=None, connection_error=None,
                      entity_user_data=dict(entity1=dict(status="false_positive", rationale="Rationale")),
                      entities=[dict(key="entity1")])])]
     self.sources.append(
         dict(source_uuid=SOURCE_ID, value="1", parse_error=None, connection_error=None,
              entities=[dict(key="entity1")]))
     request.json = dict(metric_uuid=METRIC_ID, sources=self.sources)
     self.new_measurement["count"].update(dict(status="target_met", value="0"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()
Ejemplo n.º 18
0
 def test_changed_measurement_entity_key(self, request):
     """Post a measurement whose value and entities are the same, except for a changed entity key."""
     measurement = self.database.measurements.find_one.return_value = dict(
         _id="id", metric_uuid=METRIC_ID, status="target_met",
         sources=[
             dict(source_uuid=SOURCE_ID, value="1", entities=[dict(key="a")],
                  entity_user_data=dict(a=dict(status="confirmed")))])
     self.database.measurements.find.return_value = [measurement]
     self.sources.append(
         dict(source_uuid=SOURCE_ID, value="1", total=None, parse_error=None, connection_error=None,
              entities=[dict(old_key="a", key="b")]))
     request.json = dict(metric_uuid=METRIC_ID, sources=self.sources)
     self.new_measurement["count"].update(dict(status="near_target_met", value="1"))
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once_with(
         dict(
             metric_uuid=METRIC_ID,
             sources=[
                 dict(source_uuid=SOURCE_ID, value="1", total=None, parse_error=None, connection_error=None,
                      entities=[dict(key="b", old_key="a")], entity_user_data=dict(b=dict(status="confirmed")))],
             count=dict(
                 value="1", status="near_target_met", direction="<", target="0", near_target="10", debt_target=None),
             start="2019-01-01", end="2019-01-01"))
Ejemplo n.º 19
0
 def test_unchanged_measurement(self, request):
     """Post an unchanged measurement for a metric."""
     self.posted_measurement["sources"] = self.old_measurement["sources"]
     request.json = self.posted_measurement
     self.assertEqual(dict(ok=True), post_measurement(self.database))
     self.database.measurements.update_one.assert_called_once()
Ejemplo n.º 20
0
 def test_unchanged_measurement(self, request):
     """Post an unchanged measurement for a metric."""
     self.database.measurements.find_one.return_value = dict(_id="id", sources=[])
     request.json = dict(metric_uuid=METRIC_ID, sources=[])
     self.assertEqual(dict(ok=True), post_measurement(self.database))
     self.database.measurements.update_one.assert_called_once()
Ejemplo n.º 21
0
    def test_changed_measurement_entities(self, request):
        """Post a measurement whose value is the same, but with different entities.

        Entity user data will be changed as follows:
        - Entity data belonging to entities still present is simply copied.
        - Entity data no longer belonging to an entity because the entity disappeared will be marked as orphaned.
        - Entity data that was orphaned recently will still be orphaned.
        - Entity data that was orphaned long ago will be deleted.
        - Entity data that was orphaned, but whose entity reappears, will no longer be orphaned.
        """
        self.old_measurement["count"] = dict(status="near_target_met",
                                             status_start="2018-01-01",
                                             value="1")
        self.old_measurement["sources"] = [
            self.source(
                entities=[dict(key="a")],
                entity_user_data=dict(
                    a=dict(status="confirmed"),  # Will be newly orphaned
                    b=dict(status="confirmed", orphaned_since="2021-01-01"
                           ),  # Will be reunited with its entity
                    c=dict(
                        status="confirmed",
                        orphaned_since="2021-01-01"),  # Will still be orphaned
                    d=dict(status="confirmed", orphaned_since="2020-01-01"
                           ),  # Orphaned too long, will be deleted
                ),
            )
        ]
        self.posted_measurement["sources"].append(
            self.source(entities=[dict(key="b")]))
        request.json = self.posted_measurement
        self.new_measurement["count"].update(
            dict(status="near_target_met",
                 status_start="2018-01-01",
                 value="1"))
        self.assertEqual(self.new_measurement, post_measurement(self.database))
        self.database.measurements.insert_one.assert_called_once_with(
            dict(
                metric_uuid=METRIC_ID,
                sources=[
                    self.source(
                        entities=[dict(key="b")],
                        entity_user_data=dict(
                            a=dict(
                                status="confirmed",
                                orphaned_since="2020-01-01"),  # Newly orphaned
                            b=dict(status="confirmed"),  # No longer orphaned
                            c=dict(
                                status="confirmed",
                                orphaned_since="2021-01-01"),  # Still orphaned
                        ),
                    )
                ],
                count=dict(
                    value="1",
                    status="near_target_met",
                    status_start="2018-01-01",
                    direction="<",
                    target="0",
                    near_target="10",
                    debt_target=None,
                ),
                start="2019-01-01",
                end="2019-01-01",
            ))
Ejemplo n.º 22
0
 def test_deleted_metric(self, request):
     """Post a measurement for a deleted metric."""
     self.report["subjects"][SUBJECT_ID]["metrics"] = {}
     request.json = self.posted_measurement
     self.assertEqual(dict(ok=False), post_measurement(self.database))
     self.database.measurements.update_one.assert_not_called()
Ejemplo n.º 23
0
 def test_first_measurement(self, request):
     """Post the first measurement for a metric."""
     self.database.measurements.find_one.return_value = None
     request.json = self.posted_measurement
     self.assertEqual(self.new_measurement, post_measurement(self.database))
     self.database.measurements.insert_one.assert_called_once()