Esempio n. 1
0
    def test_purge_expired_line_item_for_provider(self):
        """Test that the provider_uuid deletes all data for the provider."""
        report_period_table_name = OCP_REPORT_TABLE_MAP["report_period"]
        report_table_name = OCP_REPORT_TABLE_MAP["report"]
        line_item_table_name = OCP_REPORT_TABLE_MAP["line_item"]
        storage_line_item_table_name = OCP_REPORT_TABLE_MAP["storage_line_item"]

        cleaner = OCPReportDBCleaner(self.schema)

        with schema_context(self.schema):
            # Verify that data is cleared for a cutoff date == billing_period_start
            first_period = (
                self.accessor._get_db_obj_query(report_period_table_name)
                .filter(provider_id=self.ocp_provider_uuid)
                .order_by("-report_period_start")
                .first()
            )
            cutoff_date = first_period.report_period_start
            self.assertIsNotNone(self.accessor._get_db_obj_query(report_period_table_name).first())
            self.assertIsNotNone(self.accessor._get_db_obj_query(report_table_name).first())
            self.assertIsNotNone(self.accessor._get_db_obj_query(line_item_table_name).first())
            self.assertIsNotNone(self.accessor._get_db_obj_query(storage_line_item_table_name).first())

            expected_count = (
                self.accessor._get_db_obj_query(report_period_table_name)
                .filter(provider_id=self.ocp_provider_uuid)
                .count()
            )

        removed_data = cleaner.purge_expired_line_item(cutoff_date, provider_uuid=self.ocp_provider_uuid)

        self.assertEqual(len(removed_data), expected_count)
        self.assertIn(first_period.id, [item.get("usage_period_id") for item in removed_data])
        self.assertIn(str(first_period.report_period_start), [item.get("interval_start") for item in removed_data])
Esempio n. 2
0
    def test_purge_expired_line_item_on_date_simulate(self):
        """Test to simulate removing report data on a provided date."""
        report_period_table_name = OCP_REPORT_TABLE_MAP["report_period"]
        report_table_name = OCP_REPORT_TABLE_MAP["report"]
        line_item_table_name = OCP_REPORT_TABLE_MAP["line_item"]
        storage_line_item_table_name = OCP_REPORT_TABLE_MAP[
            "storage_line_item"]

        cleaner = OCPReportDBCleaner(self.schema)

        # Verify that data is cleared for a cutoff date == billing_period_start
        with schema_context(self.schema):
            first_period = (
                self.accessor._get_db_obj_query(report_period_table_name).
                order_by("-report_period_start").first())
            cutoff_date = first_period.report_period_start
            expected_count = (self.accessor._get_db_obj_query(
                report_period_table_name).filter(
                    report_period_start__lte=cutoff_date).count())

            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    report_period_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(report_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(line_item_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    storage_line_item_table_name).first())

        removed_data = cleaner.purge_expired_line_item(cutoff_date,
                                                       simulate=True)

        self.assertEqual(len(removed_data), expected_count)
        self.assertIn(first_period.id,
                      [item.get("usage_period_id") for item in removed_data])
        self.assertIn(str(first_period.report_period_start),
                      [item.get("interval_start") for item in removed_data])

        with schema_context(self.schema):
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    report_period_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(report_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(line_item_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    storage_line_item_table_name).first())
Esempio n. 3
0
    def test_purge_expired_line_item_after_date(self):
        """Test to remove report data after a provided date."""
        report_period_table_name = OCP_REPORT_TABLE_MAP["report_period"]
        report_table_name = OCP_REPORT_TABLE_MAP["report"]
        line_item_table_name = OCP_REPORT_TABLE_MAP["line_item"]
        storage_line_item_table_name = OCP_REPORT_TABLE_MAP[
            "storage_line_item"]

        cleaner = OCPReportDBCleaner(self.schema)

        with schema_context(self.schema):
            # Verify that data is cleared for a cutoff date > billing_period_start
            first_period = (
                self.accessor._get_db_obj_query(report_period_table_name).
                order_by("-report_period_start").first())
            cutoff_date = first_period.report_period_start
            later_date = cutoff_date + relativedelta.relativedelta(months=+1)
            later_cutoff = later_date.replace(day=15)
            expected_count = (self.accessor._get_db_obj_query(
                report_period_table_name).filter(
                    report_period_start__lte=later_cutoff).count())

            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    report_period_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(report_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(line_item_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    storage_line_item_table_name).first())

        removed_data = cleaner.purge_expired_line_item(later_cutoff)
        self.assertEqual(len(removed_data), expected_count)
        self.assertIn(first_period.id,
                      [item.get("usage_period_id") for item in removed_data])
        self.assertIn(str(first_period.report_period_start),
                      [item.get("interval_start") for item in removed_data])

        with schema_context(self.schema):
            self.assertIsNone(
                self.accessor._get_db_obj_query(line_item_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    report_period_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(report_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    storage_line_item_table_name).first())
Esempio n. 4
0
    def test_purge_expired_line_item_before_date(self):
        """Test to remove report data before a provided date."""
        report_period_table_name = OCP_REPORT_TABLE_MAP["report_period"]
        report_table_name = OCP_REPORT_TABLE_MAP["report"]
        line_item_table_name = OCP_REPORT_TABLE_MAP["line_item"]
        storage_line_item_table_name = OCP_REPORT_TABLE_MAP[
            "storage_line_item"]

        cleaner = OCPReportDBCleaner(self.schema)

        with schema_context(self.schema):
            # Verify that data is not cleared for a cutoff date < billing_period_start
            first_period = (
                self.accessor._get_db_obj_query(report_period_table_name).
                order_by("-report_period_start").first())
            cutoff_date = first_period.report_period_start
            earlier_date = cutoff_date + relativedelta.relativedelta(months=-1)
            earlier_cutoff = earlier_date.replace(month=earlier_date.month,
                                                  day=15)
            expected_count = (self.accessor._get_db_obj_query(
                report_period_table_name).filter(
                    report_period_start__lte=earlier_cutoff).count())

            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    report_period_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(report_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(line_item_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    storage_line_item_table_name).first())

        removed_data = cleaner.purge_expired_line_item(earlier_cutoff)

        self.assertEqual(len(removed_data), expected_count)

        with schema_context(self.schema):
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(line_item_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    report_period_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(report_table_name).first())
            self.assertIsNotNone(
                self.accessor._get_db_obj_query(
                    storage_line_item_table_name).first())
Esempio n. 5
0
 def test_purge_expired_line_items_not_datetime_obj(self):
     """Test error raised if expired_date is not datetime.datetime."""
     cleaner = OCPReportDBCleaner(self.schema)
     with self.assertRaises(OCPReportDBCleanerError):
         cleaner.purge_expired_line_item(False)