Example #1
0
 def test_bootstrap_sets_time(self):
     before_now = datetime.utcnow() - timedelta(microseconds=1)
     table_manager = ConfigurableReportTableManagerMixin([MockDataSourceProvider()])
     table_manager.bootstrap([])
     after_now = datetime.utcnow() + timedelta(microseconds=1)
     self.assertTrue(table_manager.bootstrapped)
     self.assertTrue(before_now < table_manager.last_bootstrapped)
     self.assertTrue(after_now > table_manager.last_bootstrapped)
     self.assertFalse(table_manager.needs_bootstrap())
Example #2
0
 def test_bootstrap_sets_time(self):
     before_now = datetime.utcnow() - timedelta(microseconds=1)
     table_manager = ConfigurableReportTableManagerMixin(MockDataSourceProvider())
     table_manager.bootstrap([])
     after_now = datetime.utcnow() + timedelta(microseconds=1)
     self.assertTrue(table_manager.bootstrapped)
     self.assertTrue(before_now < table_manager.last_bootstrapped)
     self.assertTrue(after_now > table_manager.last_bootstrapped)
     self.assertFalse(table_manager.needs_bootstrap())
Example #3
0
 def test_table_adapters(self):
     data_source_1 = get_sample_data_source()
     ds_1_domain = data_source_1.domain
     table_manager = ConfigurableReportTableManagerMixin([MockDataSourceProvider({
         ds_1_domain: [data_source_1]
     })])
     table_manager.bootstrap()
     self.assertEqual(1, len(table_manager.table_adapters_by_domain))
     self.assertEqual(1, len(table_manager.table_adapters_by_domain[ds_1_domain]))
     self.assertEqual(data_source_1, table_manager.table_adapters_by_domain[ds_1_domain][0].config)
Example #4
0
    def test_merge_table_adapters(self):
        data_source_1 = get_sample_data_source()
        data_source_1.save()
        ds_1_domain = data_source_1.domain
        table_manager = ConfigurableReportTableManagerMixin(
            [MockDataSourceProvider({ds_1_domain: [data_source_1]})])
        table_manager.bootstrap()
        # test in same domain
        data_source_2 = self._copy_data_source(data_source_1)
        data_source_2.save()
        table_manager._add_data_sources_to_table_adapters([data_source_2])
        self.assertEqual(1, len(table_manager.table_adapters_by_domain))
        self.assertEqual(
            2, len(table_manager.table_adapters_by_domain[ds_1_domain]))
        self.assertEqual(
            {data_source_1, data_source_2},
            set([
                table_adapter.config for table_adapter in
                table_manager.table_adapters_by_domain[ds_1_domain]
            ]))
        # test in a new domain
        data_source_3 = self._copy_data_source(data_source_1)
        ds3_domain = 'new_domain'
        data_source_3.domain = ds3_domain
        data_source_3.save()
        table_manager._add_data_sources_to_table_adapters([data_source_3])
        # should now be 2 domains in the map
        self.assertEqual(2, len(table_manager.table_adapters_by_domain))
        # ensure domain 1 unchanged
        self.assertEqual(
            {data_source_1, data_source_2},
            set([
                table_adapter.config for table_adapter in
                table_manager.table_adapters_by_domain[ds_1_domain]
            ]))
        self.assertEqual(
            1, len(table_manager.table_adapters_by_domain[ds3_domain]))
        self.assertEqual(
            data_source_3,
            table_manager.table_adapters_by_domain[ds3_domain][0].config)

        # finally pass in existing data sources and ensure they modify in place
        table_manager._add_data_sources_to_table_adapters(
            [data_source_1, data_source_3])
        self.assertEqual(2, len(table_manager.table_adapters_by_domain))
        self.assertEqual(
            {data_source_1, data_source_2},
            set([
                table_adapter.config for table_adapter in
                table_manager.table_adapters_by_domain[ds_1_domain]
            ]))
        self.assertEqual(
            data_source_3,
            table_manager.table_adapters_by_domain[ds3_domain][0].config)
Example #5
0
    def test_get_filtered_configs_es_error(self):
        table_manager = ConfigurableReportTableManagerMixin(
            MockDataSourceProvider(), filter_missing_domains=True)
        ds1 = get_sample_data_source()
        ds1.domain = 'domain1'
        ds2 = DataSourceConfiguration.wrap(ds1.to_json())
        ds2.domain = 'domain2'

        with patch('corehq.apps.es.es_query.run_query') as run_query:
            run_query.side_effect = ESError
            filtered_configs = table_manager.get_filtered_configs([ds1, ds2])

        self.assertEqual(filtered_configs, [ds1, ds2])
Example #6
0
 def test_needs_bootstrap_window(self):
     before_now = datetime.utcnow() - timedelta(microseconds=1)
     table_manager = ConfigurableReportTableManagerMixin(MockDataSourceProvider())
     table_manager.bootstrap([])
     table_manager.last_bootstrapped = before_now - timedelta(seconds=REBUILD_CHECK_INTERVAL - 5)
     self.assertFalse(table_manager.needs_bootstrap())
     table_manager.last_bootstrapped = before_now - timedelta(seconds=REBUILD_CHECK_INTERVAL)
     self.assertTrue(table_manager.needs_bootstrap())
Example #7
0
    def test_complete_integration(self):
        # initialize pillow with one data source
        data_source_1 = get_sample_data_source()
        data_source_1.save()
        ds_1_domain = data_source_1.domain
        table_manager = ConfigurableReportTableManagerMixin(
            [DynamicDataSourceProvider()])
        table_manager.bootstrap()
        self.assertEqual(1, len(table_manager.table_adapters_by_domain))
        self.assertEqual(
            1, len(table_manager.table_adapters_by_domain[ds_1_domain]))
        self.assertEqual(
            data_source_1._id,
            table_manager.table_adapters_by_domain[ds_1_domain][0].config._id)

        data_source_2 = self._copy_data_source(data_source_1)
        data_source_2.save()
        self.assertFalse(table_manager.needs_bootstrap())
        # should call _pull_in_new_and_modified_data_sources
        table_manager.bootstrap_if_needed()
        self.assertEqual(1, len(table_manager.table_adapters_by_domain))
        self.assertEqual(
            2, len(table_manager.table_adapters_by_domain[ds_1_domain]))
        self.assertEqual(
            {data_source_1._id, data_source_2._id},
            set([
                table_adapter.config._id for table_adapter in
                table_manager.table_adapters_by_domain[ds_1_domain]
            ]))
Example #8
0
 def test_needs_bootstrap_window(self):
     before_now = datetime.utcnow() - timedelta(microseconds=1)
     table_manager = ConfigurableReportTableManagerMixin([MockDataSourceProvider()])
     table_manager.bootstrap([])
     table_manager.last_bootstrapped = before_now - timedelta(seconds=REBUILD_CHECK_INTERVAL - 5)
     self.assertFalse(table_manager.needs_bootstrap())
     table_manager.last_bootstrapped = before_now - timedelta(seconds=REBUILD_CHECK_INTERVAL)
     self.assertTrue(table_manager.needs_bootstrap())
Example #9
0
 def test_bad_spec_error(self, _):
     ExpressionFactory.register("missing_expression", lambda x, y: x)
     data_source_1 = get_sample_data_source()
     data_source_1.configured_indicators[0] = {
         "column_id": "date",
         "type": "expression",
         "expression": {
             "type": "missing_expression",
         },
         "datatype": "datetime"
     }
     data_source_1.save()
     del ExpressionFactory.spec_map["missing_expression"]
     ds_1_domain = data_source_1.domain
     table_manager = ConfigurableReportTableManagerMixin(
         [DynamicDataSourceProvider()])
     table_manager.bootstrap()
     self.assertEqual(0, len(table_manager.table_adapters_by_domain))
     self.assertEqual(
         0, len(table_manager.table_adapters_by_domain[ds_1_domain]))
Example #10
0
    def test_get_filtered_configs(self):
        table_manager = ConfigurableReportTableManagerMixin(
            MockDataSourceProvider(), filter_missing_domains=True)
        ds1 = get_sample_data_source()
        ds1.domain = 'domain1'
        ds2 = DataSourceConfiguration.wrap(ds1.to_json())
        ds2.domain = 'domain2'

        with patch('corehq.apps.es.es_query.run_query') as run_query:
            run_query.return_value = {
                'hits': {
                    'hits': [{
                        '_id': 'd1',
                        '_source': {
                            'name': 'domain1'
                        }
                    }]
                }
            }
            filtered_configs = table_manager.get_filtered_configs([ds1, ds2])

        self.assertEqual(filtered_configs, [ds1])
Example #11
0
 def test_needs_bootstrap_on_initialization(self):
     table_manager = ConfigurableReportTableManagerMixin(MockDataSourceProvider())
     self.assertTrue(table_manager.needs_bootstrap())
Example #12
0
 def test_needs_bootstrap_on_initialization(self):
     table_manager = ConfigurableReportTableManagerMixin([MockDataSourceProvider()])
     self.assertTrue(table_manager.needs_bootstrap())