def test_record_with_exporter(self):
        exporter = mock.Mock()
        measure_name = "test_measure"
        measure_description = "test_description"
        measure = BaseMeasure(name=measure_name,
                              description=measure_description)

        view_name = "test_view"
        view_description = "test_description"
        view_columns = ["testTag1", "testColumn2"]
        view_measure = measure
        view_aggregation = mock.Mock()
        View(name=view_name,
             description=view_description,
             columns=view_columns,
             measure=view_measure,
             aggregation=view_aggregation)

        measure_value = 5
        tags = {"testTag1": "testTag1Value"}
        measurement_map = {measure: measure_value}
        timestamp = mock.Mock()

        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        measure_to_view_map.exporters.append(exporter)
        measure_to_view_map._registered_measures = {}
        record = measure_to_view_map.record(tags=tags,
                                            measurement_map=measurement_map,
                                            timestamp=timestamp)
        self.assertNotEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNone(record)
    def test_filter_exported_views(self):
        test_view_1_name = "testView1"
        description = "testDescription"
        columns = mock.Mock()
        measure = mock.Mock()
        aggregation = mock.Mock()
        test_view_1 = View(name=test_view_1_name,
                           description=description,
                           columns=columns,
                           measure=measure,
                           aggregation=aggregation)
        print("test view 1", test_view_1)

        test_view_2_name = "testView2"
        test_view_2 = View(name=test_view_2_name,
                           description=description,
                           columns=columns,
                           measure=measure,
                           aggregation=aggregation)
        print("test view 2", test_view_2)
        all_the_views = {test_view_1, test_view_2}
        print("all the views", all_the_views)
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        views = measure_to_view_map.filter_exported_views(
            all_views=all_the_views)
        print("filtered views", views)
        self.assertEqual(views, all_the_views)
    def test_constructor(self):
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()

        self.assertEqual({}, measure_to_view_map._map)
        self.assertEqual({}, measure_to_view_map._registered_views)
        self.assertEqual({}, measure_to_view_map._registered_measures)
        self.assertEqual(set(), measure_to_view_map.exported_views)
 def test_register_view_with_exporter(self):
     exporter = mock.Mock()
     name = "testView"
     description = "testDescription"
     columns = mock.Mock()
     measure = MeasureInt("measure", "description", "1")
     aggregation = mock.Mock()
     view = View(name=name,
                 description=description,
                 columns=columns,
                 measure=measure,
                 aggregation=aggregation)
     timestamp = mock.Mock()
     measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
     measure_to_view_map.exporters.append(exporter)
     measure_to_view_map._registered_views = {}
     measure_to_view_map._registered_measures = {}
     measure_to_view_map.register_view(view=view, timestamp=timestamp)
     self.assertIsNone(measure_to_view_map.exported_views)
     self.assertEqual(measure_to_view_map._registered_views[view.name],
                      view)
     self.assertEqual(
         measure_to_view_map._registered_measures[measure.name], measure)
     self.assertIsNotNone(
         measure_to_view_map._measure_to_view_data_list_map[
             view.measure.name])
    def test_export(self):
        exporter = mock.Mock()
        view_data = []
        measure_name = "test_measure"
        measure_description = "test_description"
        measure = BaseMeasure(
            name=measure_name, description=measure_description)

        view_name = "test_view"
        view_description = "test_description"
        view_columns = ["testTag1", "testColumn2"]
        view_measure = measure
        view_aggregation = mock.Mock()
        view = View(
            name=view_name,
            description=view_description,
            columns=view_columns,
            measure=view_measure,
            aggregation=view_aggregation)

        measure_value = 5
        tags = {"testTag1": "testTag1Value"}
        measurement_map = {measure: measure_value}
        timestamp = mock.Mock()

        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        measure_to_view_map.exporters.append(exporter)
        measure_to_view_map._registered_measures = {}
        measure_to_view_map.export(view_data)
        self.assertTrue(True)
 def test_record_negative_value(self):
     """Check that we warn and drop negative measures at record time."""
     measure = mock.Mock()
     view_data = mock.Mock()
     measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
     measure_to_view_map._registered_measures = {measure.name: measure}
     measure_to_view_map._measure_to_view_data_list_map = {
         measure.name: [view_data]
     }
     with self.assertRaises(AssertionError):
         measure_to_view_map.record(tags=mock.Mock(),
                                    measurement_map={measure: -1},
                                    timestamp=mock.Mock())
     view_data.record.assert_not_called()
    def test_get_view(self):
        name = "testView"
        description = "testDescription"
        columns = mock.Mock()
        measure = mock.Mock()
        aggregation = mock.Mock()
        view = View(name=name,
                    description=description,
                    columns=columns,
                    measure=measure,
                    aggregation=aggregation)
        timestamp = mock.Mock()
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()

        measure_to_view_map._registered_views = {}
        no_registered_views = measure_to_view_map.get_view(view_name=name,
                                                           timestamp=timestamp)
        self.assertEqual(None, no_registered_views)

        measure_to_view_map._registered_views = {name: view}
        measure_to_view_map._map = {
            view.measure.name:
            [ViewData(view=view, start_time=timestamp, end_time=timestamp)]
        }
        print(measure_to_view_map._map)
        view_data = measure_to_view_map.get_view(view_name=name,
                                                 timestamp=timestamp)
        self.assertIsNotNone(view_data)

        measure_to_view_map._map = {}
        view_data = measure_to_view_map.get_view(view_name=name,
                                                 timestamp=timestamp)
        self.assertIsNone(view_data)

        measure_to_view_map._map = {
            view.measure.name: [
                ViewData(view=mock.Mock(),
                         start_time=timestamp,
                         end_time=timestamp)
            ]
        }
        view_data = measure_to_view_map.get_view(view_name=name,
                                                 timestamp=timestamp)
        self.assertIsNone(view_data)
    def test_register_view(self):
        name = "testView"
        description = "testDescription"
        columns = mock.Mock()
        measure = mock.Mock()
        aggregation = mock.Mock()
        view = View(name=name,
                    description=description,
                    columns=columns,
                    measure=measure,
                    aggregation=aggregation)
        timestamp = mock.Mock()
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()

        measure_to_view_map._registered_views = {}
        measure_to_view_map._registered_measures = {}
        measure_to_view_map.register_view(view=view, timestamp=timestamp)
        self.assertIsNone(measure_to_view_map.exported_views)
        self.assertEqual(measure_to_view_map._registered_views[measure.name],
                         view)
        self.assertEqual(
            measure_to_view_map._registered_measures[measure.name], measure)
        self.assertIsNotNone(measure_to_view_map._map[view.measure.name])

        test_measure = mock.Mock()
        measure_to_view_map._registered_measures = {measure.name: test_measure}
        test_with_registered_measures = measure_to_view_map.register_view(
            view=view, timestamp=timestamp)
        self.assertIsNone(test_with_registered_measures)
        self.assertIsNotNone(measure_to_view_map._map[view.measure.name])

        measure_to_view_map._registered_measures = {measure.name: None}
        self.assertIsNone(
            measure_to_view_map._registered_measures.get(measure.name))
        measure_to_view_map.register_view(view=view, timestamp=timestamp)
        self.assertEqual(
            measure, measure_to_view_map._registered_measures[measure.name])
        self.assertIsNotNone(measure_to_view_map._map[view.measure.name])

        measure_to_view_map._registered_views = {name: view}
        test_result_1 = measure_to_view_map.register_view(view=view,
                                                          timestamp=timestamp)
        self.assertIsNone(test_result_1)
        self.assertIsNotNone(measure_to_view_map._map[view.measure.name])
    def test_export_duplicates_viewdata(self):
        """Check that we copy view data on export."""
        mtvm = measure_to_view_map_module.MeasureToViewMap()

        exporter = mock.Mock()
        mtvm.exporters.append(exporter)

        timestamp1 = mock.Mock()
        timestamp2 = mock.Mock()
        view_data = ViewData(REQUEST_COUNT_VIEW, timestamp1, timestamp2)
        mtvm.export([view_data])
        mtvm.export([view_data])
        self.assertEqual(exporter.export.call_count, 2)

        exported_call1, exported_call2 = exporter.export.call_args_list
        exported_vd1 = exported_call1[0][0][0]
        exported_vd2 = exported_call2[0][0][0]
        self.assertIsNot(exported_vd1, exported_vd2)
        self.assertIsNot(exported_vd1.end_time, view_data.end_time)
        self.assertIsNot(exported_vd2.end_time, view_data.end_time)
    def test_record(self):
        measure_name = "test_measure"
        measure_description = "test_description"
        measure = BaseMeasure(name=measure_name,
                              description=measure_description)

        view_name = "test_view"
        view_description = "test_description"
        view_columns = ["testTag1", "testColumn2"]
        view_measure = measure
        view_aggregation = mock.Mock()
        view = View(name=view_name,
                    description=view_description,
                    columns=view_columns,
                    measure=view_measure,
                    aggregation=view_aggregation)

        measure_value = 5
        value = "testValue"
        tags = {"testTag1": "testTag1Value"}
        stats = {Measurement(measure=measure, value=measure_value): value}
        timestamp = mock.Mock()

        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        measure_to_view_map._registered_measures = {}
        record = measure_to_view_map.record(tags=tags,
                                            stats=stats,
                                            timestamp=timestamp)
        self.assertNotEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNone(record)

        measure_to_view_map._registered_measures = {measure.name: measure}
        measure_to_view_map._map = {}
        record = measure_to_view_map.record(tags=tags,
                                            stats=stats,
                                            timestamp=timestamp)
        self.assertEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNone(record)

        measure_to_view_map._map = {measure.name: mock.Mock()}
        measure_to_view_map.record(tags=tags, stats=stats, timestamp=timestamp)
        self.assertEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertTrue(measure.name in measure_to_view_map._map)

        measure_to_view_map._map = {"testing": mock.Mock()}
        measure_to_view_map.record(tags=tags, stats=stats, timestamp=timestamp)
        self.assertTrue(measure.name not in measure_to_view_map._map)

        measure_to_view_map_mock = mock.Mock()
        measure_to_view_map = measure_to_view_map_mock
        measure_to_view_map._registered_measures = {measure.name: measure}
        measure_to_view_map._map = mock.Mock()
        measure_to_view_map.record(tags=mock.Mock(),
                                   stats=mock.Mock(),
                                   timestamp=mock.Mock())
        self.assertEqual(
            measure,
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNotNone(measure_to_view_map.view_datas)
        self.assertTrue(measure_to_view_map_mock.record.called)

        tags = {"testTag1": "testTag1Value"}
        stats = {}
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()
        record = measure_to_view_map.record(tags=tags,
                                            stats=stats,
                                            timestamp=timestamp)
        self.assertIsNone(record)
    def test_register_view(self):
        name = "testView"
        description = "testDescription"
        columns = mock.Mock()
        measure = MeasureInt("measure", "description", "1")
        aggregation = mock.Mock()
        view = View(name=name,
                    description=description,
                    columns=columns,
                    measure=measure,
                    aggregation=aggregation)
        timestamp = mock.Mock()
        measure_to_view_map = measure_to_view_map_module.MeasureToViewMap()

        measure_to_view_map._registered_views = {}
        measure_to_view_map._registered_measures = {}
        measure_to_view_map.register_view(view=view, timestamp=timestamp)
        self.assertIsNone(measure_to_view_map.exported_views)
        self.assertEqual(measure_to_view_map._registered_views[view.name],
                         view)
        self.assertEqual(
            measure_to_view_map._registered_measures[measure.name], measure)
        self.assertIsNotNone(
            measure_to_view_map._measure_to_view_data_list_map[
                view.measure.name])

        # Registers a view with an existing measure.
        view2 = View(name="testView2",
                     description=description,
                     columns=columns,
                     measure=measure,
                     aggregation=aggregation)
        test_with_registered_measures = measure_to_view_map.register_view(
            view=view2, timestamp=timestamp)
        self.assertIsNone(test_with_registered_measures)
        self.assertEqual(
            measure_to_view_map._registered_measures[measure.name], measure)

        # Registers a view with a measure that has the same name as an existing
        # measure, but with different schema. measure2 and view3 should be
        # ignored.
        measure2 = MeasureInt("measure", "another measure", "ms")
        view3 = View(name="testView3",
                     description=description,
                     columns=columns,
                     measure=measure2,
                     aggregation=aggregation)
        test_with_registered_measures = measure_to_view_map.register_view(
            view=view3, timestamp=timestamp)
        self.assertIsNone(test_with_registered_measures)
        self.assertEqual(
            measure_to_view_map._registered_measures[measure2.name], measure)

        measure_to_view_map._registered_measures = {measure.name: None}
        self.assertIsNone(
            measure_to_view_map._registered_measures.get(measure.name))
        measure_to_view_map.register_view(view=view, timestamp=timestamp)
        # view is already registered, measure will not be registered again.
        self.assertIsNone(
            measure_to_view_map._registered_measures.get(measure.name))
        self.assertIsNotNone(
            measure_to_view_map._measure_to_view_data_list_map[
                view.measure.name])

        measure_to_view_map._registered_views = {name: view}
        test_result_1 = measure_to_view_map.register_view(view=view,
                                                          timestamp=timestamp)
        self.assertIsNone(test_result_1)
        self.assertIsNotNone(
            measure_to_view_map._measure_to_view_data_list_map[
                view.measure.name])