class CostModelDBAccessorTestNoRateOrMarkup(MasuTestCase):
    """Test Cases for the CostModelDBAccessor object."""
    def setUp(self):
        """Set up a test with database objects."""
        super().setUp()
        self.provider_uuid = '3c6e687e-1a09-4a05-970c-2ccf44b0952e'
        self.schema = 'acct10001'
        self.column_map = ReportingCommonDBAccessor().column_map
        self.creator = ReportObjectCreator(self.schema, self.column_map)

        reporting_period = self.creator.create_ocp_report_period()
        report = self.creator.create_ocp_report(reporting_period)
        self.creator.create_ocp_usage_line_item(reporting_period, report)

        self.cost_model = self.creator.create_cost_model(
            self.provider_uuid, 'OCP')

    def test_initializer_no_rate_no_markup(self):
        """Test initializer."""
        with CostModelDBAccessor(self.schema, self.provider_uuid,
                                 self.column_map) as cost_model_accessor:
            self.assertIsNotNone(cost_model_accessor.report_schema)

    def test_get_rates(self):
        """Test get rates."""
        with CostModelDBAccessor(self.schema, self.provider_uuid,
                                 self.column_map) as cost_model_accessor:
            cpu_usage_rate = cost_model_accessor.get_rates(
                'cpu_core_usage_per_hour')
            self.assertIsNone(cpu_usage_rate)
示例#2
0
    def test_get_bill_ids_from_provider_with_end_date(self):
        """Test that bill IDs are returned for an AWS provider with end date."""
        date_accessor = DateAccessor()

        with ProviderDBAccessor(
                provider_uuid=self.aws_provider_uuid) as provider_accessor:
            provider = provider_accessor.get_provider()
        with AWSReportDBAccessor(schema=self.schema,
                                 column_map=self.column_map) as accessor:
            report_schema = accessor.report_schema
            creator = ReportObjectCreator(self.schema, self.column_map)

            end_date = date_accessor.today_with_timezone('utc').replace(day=1)
            start_date = end_date
            for i in range(2):
                start_date = start_date - relativedelta(months=i)
                bill = creator.create_cost_entry_bill(self.aws_provider_uuid,
                                                      bill_date=start_date)

            bill_table_name = AWS_CUR_TABLE_MAP['bill']
            bill_obj = getattr(accessor.report_schema, bill_table_name)
            bills = accessor.get_cost_entry_bills_query_by_provider(
                provider.uuid)
            with schema_context(self.schema):
                bills = bills.filter(
                    billing_period_start__lte=start_date.date()).all()
                expected_bill_ids = [str(bill.id) for bill in bills]

        bills = utils.get_bills_from_provider(self.aws_provider_uuid,
                                              self.schema,
                                              end_date=start_date)
        with schema_context(self.schema):
            bill_ids = [str(bill.id) for bill in bills]

        self.assertEqual(bill_ids, expected_bill_ids)
示例#3
0
    def setUp(self):
        """Set up initial data for tests."""
        super(TestUploadUtilsWithData, self).setUp()

        with ReportingCommonDBAccessor(self.schema) as common_accessor:
            self.column_map = common_accessor.column_map
        self.creator = ReportObjectCreator(self.schema, self.column_map)

        timezone = pytz.timezone('UTC')
        # Arbitrary date as "today" so we don't drift around with `now`.
        self.today = datetime(2019, 11, 5, 0, 0, 0, tzinfo=timezone)

        self.today_date = date(year=self.today.year,
                               month=self.today.month,
                               day=self.today.day)
        self.create_some_data_for_date(self.today)

        self.yesterday = self.today - timedelta(days=1)
        self.yesterday_date = date(year=self.yesterday.year,
                                   month=self.yesterday.month,
                                   day=self.yesterday.day)
        self.create_some_data_for_date(self.yesterday)

        self.future = self.today + timedelta(days=900)
        self.future_date = date(year=self.future.year,
                                month=self.future.month,
                                day=self.future.day)
    def setUp(self):
        """Set up a test with database objects."""
        super().setUp()
        self.provider_uuid = '3c6e687e-1a09-4a05-970c-2ccf44b0952e'
        self.schema = 'acct10001'
        self.column_map = ReportingCommonDBAccessor().column_map
        self.creator = ReportObjectCreator(self.schema, self.column_map)

        reporting_period = self.creator.create_ocp_report_period(provider_uuid=self.provider_uuid)
        report = self.creator.create_ocp_report(reporting_period)
        self.creator.create_ocp_usage_line_item(reporting_period, report)
        self.rates = [
            {'metric': {'name': 'cpu_core_usage_per_hour'},
             'tiered_rates': [{'value': 1.5, 'unit': 'USD'}]},
            {'metric': {'name': 'memory_gb_usage_per_hour'},
             'tiered_rates': [{'value': 2.5, 'unit': 'USD'}]},
            {'metric': {'name': 'cpu_core_request_per_hour'},
             'tiered_rates': [{'value': 3.5, 'unit': 'USD'}]},
            {'metric': {'name': 'memory_gb_request_per_hour'},
             'tiered_rates': [{'value': 4.5, 'unit': 'USD'}]},
            {'metric': {'name': 'storage_gb_usage_per_month'},
             'tiered_rates': [{'value': 5.5, 'unit': 'USD'}]},
            {'metric': {'name': 'storage_gb_request_per_month'},
             'tiered_rates': [{'value': 6.5, 'unit': 'USD'}]},
            {'metric': {'name': 'node_cost_per_month'},
             'tiered_rates': [{'value': 7.5, 'unit': 'USD'}]}
        ]

        self.markup = {'value': 10, 'unit': 'percent'}

        self.cost_model = self.creator.create_cost_model(
            self.provider_uuid, Provider.PROVIDER_OCP, self.rates, self.markup
        )
    def setUp(self):
        """Set up a test with database objects."""
        super().setUp()
        self.provider_uuid = '3c6e687e-1a09-4a05-970c-2ccf44b0952e'
        self.schema = 'acct10001'
        self.column_map = ReportingCommonDBAccessor().column_map
        self.creator = ReportObjectCreator(self.schema, self.column_map)

        reporting_period = self.creator.create_ocp_report_period()
        report = self.creator.create_ocp_report(reporting_period)
        self.creator.create_ocp_usage_line_item(reporting_period, report)

        self.cost_model = self.creator.create_cost_model(
            self.provider_uuid, 'OCP')
    def setUp(self):
        """Set up a test with database objects."""
        super().setUp()
        self.provider_uuid = self.ocp_provider_uuid
        self.creator = ReportObjectCreator(self.schema)

        reporting_period = self.creator.create_ocp_report_period(
            self.ocp_provider_uuid)
        report = self.creator.create_ocp_report(reporting_period)
        self.creator.create_ocp_usage_line_item(reporting_period, report)
        self.creator.create_ocp_node_label_line_item(reporting_period, report)

        self.cost_model = self.creator.create_cost_model(
            self.provider_uuid, Provider.PROVIDER_OCP)
    def setUp(self):
        """Set up a test with database objects."""
        super().setUp()
        # Use an OCP provider that does not have a cost model. Any OCP-on-X OCP provider will do
        self.provider_uuid = self.ocpaws_provider_uuid
        self.creator = ReportObjectCreator(self.schema)

        reporting_period = self.creator.create_ocp_report_period(
            provider_uuid=self.provider_uuid)
        report = self.creator.create_ocp_report(reporting_period)
        self.creator.create_ocp_usage_line_item(reporting_period, report)
        self.creator.create_ocp_node_label_line_item(reporting_period, report)
        self.rates, self.mapping = self.build_tag_rates()
        self.cost_model = self.creator.create_cost_model(
            self.provider_uuid, Provider.PROVIDER_OCP, self.rates)
示例#8
0
 def setUpClass(cls):
     """Set up the test class with required objects."""
     super().setUpClass()
     cls.accessor = OCPReportDBAccessor(schema=cls.schema)
     cls.report_schema = cls.accessor.report_schema
     cls.creator = ReportObjectCreator(cls.schema)
     cls.all_tables = list(OCP_REPORT_TABLE_MAP.values())
    def setUp(self):
        """Set up a test with database objects."""
        super().setUp()
        self.provider_uuid = self.ocp_provider_uuid
        self.schema = "acct10001"
        self.creator = ReportObjectCreator(self.schema)

        reporting_period = self.creator.create_ocp_report_period(
            provider_uuid=self.provider_uuid)
        report = self.creator.create_ocp_report(reporting_period)
        self.creator.create_ocp_usage_line_item(reporting_period, report)
        self.creator.create_ocp_node_label_line_item(reporting_period, report)
        self.rates, self.expected_value_rate_mapping = build_rates()
        self.markup = {"value": 10, "unit": "percent"}
        self.cost_model = self.creator.create_cost_model(
            self.provider_uuid, Provider.PROVIDER_OCP, self.rates, self.markup)
示例#10
0
    def setUpClass(cls):
        """Set up the test class with required objects."""
        super().setUpClass()

        cls.common_accessor = ReportingCommonDBAccessor()
        cls.column_map = cls.common_accessor.column_map
        cls.accessor = AWSReportDBAccessor(schema=cls.schema,
                                           column_map=cls.column_map)
        cls.report_schema = cls.accessor.report_schema
        cls.creator = ReportObjectCreator(cls.accessor, cls.column_map,
                                          cls.report_schema.column_types)

        cls.all_tables = list(AWS_CUR_TABLE_MAP.values())
        cls.foreign_key_tables = [
            AWS_CUR_TABLE_MAP['bill'],
            AWS_CUR_TABLE_MAP['product'],
            AWS_CUR_TABLE_MAP['pricing'],
            AWS_CUR_TABLE_MAP['reservation'],
        ]
        billing_start = datetime.datetime.utcnow().replace(day=1)
        cls.manifest_dict = {
            'assembly_id': '1234',
            'billing_period_start_datetime': billing_start,
            'num_total_files': 2,
            'provider_id': cls.aws_provider.id,
        }
        cls.manifest_accessor = ReportManifestDBAccessor()
示例#11
0
    def setUpClass(cls):
        """Set up for the class."""
        super().setUpClass()
        cls.aws_tables = list(AWS_CUR_TABLE_MAP.values())
        cls.ocp_tables = list(OCP_REPORT_TABLE_MAP.values())
        cls.all_tables = list(AWS_CUR_TABLE_MAP.values()) + list(OCP_REPORT_TABLE_MAP.values())

        cls.creator = ReportObjectCreator(cls.schema)
class CostModelDBAccessorTestNoRateOrMarkup(MasuTestCase):
    """Test Cases for the CostModelDBAccessor object."""
    def setUp(self):
        """Set up a test with database objects."""
        super().setUp()
        # Use an OCP provider that does not have a cost model. Any OCP-on-X OCP provider will do
        self.provider_uuid = self.ocpaws_provider_uuid
        self.creator = ReportObjectCreator(self.schema)

        reporting_period = self.creator.create_ocp_report_period(
            self.provider_uuid)
        report = self.creator.create_ocp_report(reporting_period)
        self.creator.create_ocp_usage_line_item(reporting_period, report)
        self.creator.create_ocp_node_label_line_item(reporting_period, report)

        self.cost_model = self.creator.create_cost_model(
            self.provider_uuid, Provider.PROVIDER_OCP)

    def test_initializer_no_rate_no_markup(self):
        """Test initializer."""
        with CostModelDBAccessor(self.schema,
                                 self.provider_uuid) as cost_model_accessor:
            self.assertEqual(cost_model_accessor.provider_uuid,
                             self.provider_uuid)

    def test_get_rates(self):
        """Test get rates."""
        with CostModelDBAccessor(self.schema,
                                 self.provider_uuid) as cost_model_accessor:
            cpu_usage_rate = cost_model_accessor.get_rates(
                "cpu_core_usage_per_hour")
            self.assertIsNone(cpu_usage_rate)
示例#13
0
    def setUp(self):
        """Shared variables used by ocp common tests."""
        super().setUp()
        self.accessor = OCPReportDBAccessor(schema=self.schema)
        self.provider_accessor = ProviderDBAccessor(
            provider_uuid=self.ocp_test_provider_uuid)
        self.report_schema = self.accessor.report_schema
        self.creator = ReportObjectCreator(self.schema)
        self.all_tables = list(OCP_REPORT_TABLE_MAP.values())

        self.provider_uuid = self.provider_accessor.get_provider().uuid
        reporting_period = self.creator.create_ocp_report_period(
            provider_uuid=self.provider_uuid)
        report = self.creator.create_ocp_report(
            reporting_period, reporting_period.report_period_start)
        self.creator.create_ocp_usage_line_item(reporting_period, report)
        self.creator.create_ocp_storage_line_item(reporting_period, report)
        self.creator.create_ocp_node_label_line_item(reporting_period, report)
示例#14
0
 def setUpClass(cls):
     """Set up the test class with required objects."""
     super().setUpClass()
     cls.common_accessor = ReportingCommonDBAccessor()
     cls.column_map = cls.common_accessor.column_map
     cls.accessor = OCPReportDBAccessor(schema='acct10001', column_map=cls.column_map)
     cls.report_schema = cls.accessor.report_schema
     cls.creator = ReportObjectCreator(cls.schema, cls.column_map)
     cls.all_tables = list(OCP_REPORT_TABLE_MAP.values())
示例#15
0
 def setUpClass(cls):
     """Set up the test class with required objects."""
     super().setUpClass()
     cls.accessor = GCPReportDBAccessor(schema=cls.schema)
     cls.report_schema = cls.accessor.report_schema
     cls.creator = ReportObjectCreator(cls.schema)
     cls.all_tables = list(GCP_REPORT_TABLE_MAP.values())
     cls.foreign_key_tables = [
         GCP_REPORT_TABLE_MAP["bill"], GCP_REPORT_TABLE_MAP["product"]
     ]
示例#16
0
    def setUpClass(cls):
        """Set up the test class with required objects."""
        super().setUpClass()

        cls.accessor = AWSReportDBAccessor(cls.schema)
        cls.report_schema = cls.accessor.report_schema
        cls.all_tables = list(AWS_CUR_TABLE_MAP.values())
        cls.creator = ReportObjectCreator(cls.schema)
        cls.date_accessor = DateAccessor()
        cls.manifest_accessor = ReportManifestDBAccessor()
示例#17
0
    def setUp(self):
        """Set up initial data for tests."""
        super().setUp()

        self.creator = ReportObjectCreator(self.schema)

        timezone = pytz.timezone("UTC")
        # Arbitrary date as "today" so we don't drift around with `now`.
        self.today = datetime(2019, 11, 5, 0, 0, 0, tzinfo=timezone)

        self.today_date = date(year=self.today.year, month=self.today.month, day=self.today.day)
        self.create_some_data_for_date(self.today)

        self.yesterday = self.today - timedelta(days=1)
        self.yesterday_date = date(year=self.yesterday.year, month=self.yesterday.month, day=self.yesterday.day)
        self.create_some_data_for_date(self.yesterday)

        self.future = self.today + timedelta(days=900)
        self.future_date = date(year=self.future.year, month=self.future.month, day=self.future.day)
示例#18
0
    def setUpClass(cls):
        """Set up for the class."""
        super().setUpClass()
        cls.aws_tables = list(AWS_CUR_TABLE_MAP.values())
        cls.ocp_tables = list(OCP_REPORT_TABLE_MAP.values())
        cls.all_tables = list(AWS_CUR_TABLE_MAP.values()) + list(OCP_REPORT_TABLE_MAP.values())
        with ReportingCommonDBAccessor() as report_common_db:
            cls.column_map = report_common_db.column_map

        cls.creator = ReportObjectCreator(cls.schema, cls.column_map)
示例#19
0
 def setUpClass(cls):
     """Set up the test class with required objects."""
     super().setUpClass()
     cls.common_accessor = ReportingCommonDBAccessor()
     cls.column_map = cls.common_accessor.column_map
     cls.ocp_provider_uuid = '3c6e687e-1a09-4a05-970c-2ccf44b0952e'
     cls.accessor = OCPReportDBAccessor(schema='acct10001', column_map=cls.column_map)
     cls.report_schema = cls.accessor.report_schema
     cls.creator = ReportObjectCreator(cls.schema, cls.column_map)
     cls.all_tables = list(OCP_REPORT_TABLE_MAP.values())
示例#20
0
    def setUp(self):
        super().setUp()
        self.common_accessor = ReportingCommonDBAccessor()
        self.column_map = self.common_accessor.column_map
        self.accessor = OCPReportDBAccessor(schema=self.schema,
                                            column_map=self.column_map)
        self.provider_accessor = ProviderDBAccessor(
            provider_uuid=self.ocp_test_provider_uuid)
        self.report_schema = self.accessor.report_schema
        self.creator = ReportObjectCreator(self.schema, self.column_map)
        self.all_tables = list(OCP_REPORT_TABLE_MAP.values())

        self.provider_uuid = self.provider_accessor.get_provider().uuid
        reporting_period = self.creator.create_ocp_report_period(
            provider_uuid=self.provider_uuid)
        report = self.creator.create_ocp_report(
            reporting_period, reporting_period.report_period_start)
        self.creator.create_ocp_usage_line_item(reporting_period, report)
        self.creator.create_ocp_storage_line_item(reporting_period, report)
示例#21
0
    def setUpClass(cls):
        """Set up the test class with required objects."""
        super().setUpClass()

        cls.accessor = AzureReportDBAccessor("acct10001")
        cls.report_schema = cls.accessor.report_schema
        cls.all_tables = list(AZURE_REPORT_TABLE_MAP.values())
        cls.creator = ReportObjectCreator(cls.schema)
        cls.date_accessor = DateHelper()
        cls.manifest_accessor = ReportManifestDBAccessor()
    def setUpClass(cls):
        """Set up the test class with required objects."""
        super().setUpClass()
        with ReportingCommonDBAccessor() as report_common_db:
            cls.column_map = report_common_db.column_map

        cls.accessor = AzureReportDBAccessor("acct10001", cls.column_map)
        cls.report_schema = cls.accessor.report_schema
        cls.all_tables = list(AZURE_REPORT_TABLE_MAP.values())
        cls.creator = ReportObjectCreator(cls.schema, cls.column_map)
        cls.date_accessor = DateAccessor()
        cls.manifest_accessor = ReportManifestDBAccessor()
 def setUpClass(cls):
     """Set up the test class with required objects."""
     super().setUpClass()
     cls.accessor = AWSReportDBAccessor(schema=cls.schema)
     cls.report_schema = cls.accessor.report_schema
     cls.creator = ReportObjectCreator(cls.schema)
     cls.all_tables = list(AWS_CUR_TABLE_MAP.values())
     cls.foreign_key_tables = [
         AWS_CUR_TABLE_MAP["bill"],
         AWS_CUR_TABLE_MAP["product"],
         AWS_CUR_TABLE_MAP["pricing"],
         AWS_CUR_TABLE_MAP["reservation"],
     ]
 def setUpClass(cls):
     """Set up the test class with required objects."""
     super().setUpClass()
     cls.common_accessor = ReportingCommonDBAccessor()
     cls.column_map = cls.common_accessor.column_map
     cls.accessor = AzureReportDBAccessor(schema=cls.schema, column_map=cls.column_map)
     cls.report_schema = cls.accessor.report_schema
     cls.creator = ReportObjectCreator(cls.schema, cls.column_map)
     cls.all_tables = list(AZURE_REPORT_TABLE_MAP.values())
     cls.foreign_key_tables = [
         AZURE_REPORT_TABLE_MAP['bill'],
         AZURE_REPORT_TABLE_MAP['product'],
         AZURE_REPORT_TABLE_MAP['meter'],
     ]
示例#25
0
    def setUp(self):
        """Set up initial data for tests."""
        super(TestUploadUtilsWithData, self).setUp()

        with ReportingCommonDBAccessor(self.schema) as common_accessor:
            self.column_map = common_accessor.column_map
        self.creator = ReportObjectCreator(self.schema, self.column_map)

        self.today = DateAccessor().today_with_timezone('UTC')
        self.today_date = date(
            year=self.today.year, month=self.today.month, day=self.today.day
        )
        self.create_some_data_for_date(self.today)

        self.yesterday = self.today - timedelta(days=1)
        self.yesterday_date = date(
            year=self.yesterday.year, month=self.yesterday.month, day=self.yesterday.day
        )
        self.create_some_data_for_date(self.yesterday)

        self.future = self.today + timedelta(days=900)
        self.future_date = date(
            year=self.future.year, month=self.future.month, day=self.future.day
        )
示例#26
0
class OCPUtilTests(MasuTestCase):
    """Test the OCP utility functions."""

    def setUp(self):
        """Shared variables used by ocp common tests."""
        super().setUp()
        self.common_accessor = ReportingCommonDBAccessor()
        self.column_map = self.common_accessor.column_map
        self.accessor = OCPReportDBAccessor(schema=self.schema, column_map=self.column_map)
        self.provider_accessor = ProviderDBAccessor(provider_uuid=self.ocp_test_provider_uuid)
        self.report_schema = self.accessor.report_schema
        self.creator = ReportObjectCreator(self.schema, self.column_map)
        self.all_tables = list(OCP_REPORT_TABLE_MAP.values())

        self.provider_uuid = self.provider_accessor.get_provider().uuid
        reporting_period = self.creator.create_ocp_report_period(provider_uuid=self.provider_uuid)
        report = self.creator.create_ocp_report(
            reporting_period, reporting_period.report_period_start
        )
        self.creator.create_ocp_usage_line_item(reporting_period, report)
        self.creator.create_ocp_storage_line_item(reporting_period, report)

    def test_get_cluster_id_from_provider(self):
        """Test that the cluster ID is returned from OCP provider."""
        cluster_id = utils.get_cluster_id_from_provider(self.ocp_test_provider_uuid)
        self.assertIsNotNone(cluster_id)

    def test_get_cluster_id_from_non_ocp_provider(self):
        """Test that None is returned when getting cluster ID on non-OCP provider."""
        cluster_id = utils.get_cluster_id_from_provider(self.aws_provider_uuid)
        self.assertIsNone(cluster_id)

    def test_get_provider_uuid_from_cluster_id(self):
        """Test that the provider uuid is returned for a cluster ID."""
        cluster_id = self.ocp_provider_resource_name
        provider_uuid = utils.get_provider_uuid_from_cluster_id(cluster_id)
        try:
            UUID(provider_uuid)
        except ValueError:
            self.fail('{} is not a valid uuid.'.format(str(provider_uuid)))

    def test_get_provider_uuid_from_invalid_cluster_id(self):
        """Test that the provider uuid is not returned for an invalid cluster ID."""
        cluster_id = 'bad_cluster_id'
        provider_uuid = utils.get_provider_uuid_from_cluster_id(cluster_id)
        self.assertIsNone(provider_uuid)

    def test_poll_ingest_override_for_provider(self):
        """Test that OCP polling override returns True if insights local path exists."""
        fake_dir = tempfile.mkdtemp()
        with patch.object(Config, 'INSIGHTS_LOCAL_REPORT_DIR', fake_dir):
            cluster_id = utils.get_cluster_id_from_provider(self.ocp_test_provider_uuid)
            expected_path = '{}/{}/'.format(Config.INSIGHTS_LOCAL_REPORT_DIR, cluster_id)
            os.makedirs(expected_path, exist_ok=True)
            self.assertTrue(utils.poll_ingest_override_for_provider(self.ocp_test_provider_uuid))
        shutil.rmtree(fake_dir)
示例#27
0
    def test_get_bill_ids_from_provider(self):
        """Test that bill IDs are returned for an AWS provider."""
        date_accessor = DateAccessor()

        creator = ReportObjectCreator(self.schema, self.column_map)

        expected_bill_ids = []

        end_date = date_accessor.today_with_timezone('utc').replace(day=1)
        start_date = end_date
        for i in range(2):
            start_date = start_date - relativedelta(months=i)
            bill = creator.create_cost_entry_bill(
                provider_uuid=self.aws_provider_uuid, bill_date=start_date)
            with schema_context(self.schema):
                expected_bill_ids.append(str(bill.id))

        bills = utils.get_bills_from_provider(self.aws_provider_uuid,
                                              self.schema)

        with schema_context(self.schema):
            bill_ids = [str(bill.id) for bill in bills]

        self.assertEqual(sorted(bill_ids), sorted(expected_bill_ids))
示例#28
0
 def setUpClass(cls):
     """Set up the test class with required objects."""
     super().setUpClass()
     cls.common_accessor = ReportingCommonDBAccessor()
     cls.column_map = cls.common_accessor.column_map
     cls.accessor = AWSReportDBAccessor(schema=cls.schema,
                                        column_map=cls.column_map)
     cls.report_schema = cls.accessor.report_schema
     cls.creator = ReportObjectCreator(cls.schema, cls.column_map)
     cls.all_tables = list(AWS_CUR_TABLE_MAP.values())
     cls.foreign_key_tables = [
         AWS_CUR_TABLE_MAP['bill'],
         AWS_CUR_TABLE_MAP['product'],
         AWS_CUR_TABLE_MAP['pricing'],
         AWS_CUR_TABLE_MAP['reservation'],
     ]
    def setUpClass(cls):
        """Set up the test class with required objects."""
        super().setUpClass()

        cls.accessor = AzureReportDBAccessor(schema=cls.schema)
        cls.report_schema = cls.accessor.report_schema
        cls.creator = ReportObjectCreator(cls.schema)
        cls.dh = DateHelper()

        cls.all_tables = list(AZURE_REPORT_TABLE_MAP.values())
        cls.foreign_key_tables = [
            AZURE_REPORT_TABLE_MAP["bill"],
            AZURE_REPORT_TABLE_MAP["product"],
            AZURE_REPORT_TABLE_MAP["meter"],
        ]
        cls.manifest_accessor = ReportManifestDBAccessor()
示例#30
0
    def _generate_ocp_on_azure_data(self):
        """Generate OpenShift and Azure data sufficient for matching."""
        creator = ReportObjectCreator(self.schema, self.column_map)
        bill_table_name = AZURE_REPORT_TABLE_MAP['bill']
        with AzureReportDBAccessor(self.schema, self.column_map) as accessor:
            accessor._get_db_obj_query(bill_table_name).all().delete()
        bill_ids = []
        today = DateAccessor().today_with_timezone('UTC')
        last_month = today - relativedelta(months=1)

        instance_id = '/subscriptions/99999999-9999-9999-9999-999999999999'\
                      + '/resourceGroups/koku-99hqd-rg/providers/Microsoft.Compute/'\
                      + 'virtualMachines/koku-99hqd-worker-eastus1-jngbr'
        node = instance_id.split('/')[8]

        with schema_context(self.schema):
            for cost_entry_date in (today, last_month):
                bill = creator.create_azure_cost_entry_bill(
                    provider_uuid=self.azure_provider.uuid,
                    bill_date=cost_entry_date
                )
                bill_ids.append(str(bill.id))
                product = creator.create_azure_cost_entry_product(
                    provider_uuid=self.azure_provider.uuid,
                    instance_id=instance_id
                )
                meter = creator.create_azure_meter(
                    provider_uuid=self.azure_provider.uuid
                )
                creator.create_azure_cost_entry_line_item(
                    bill, product, meter, usage_date_time=cost_entry_date
                )
        with OCPReportDBAccessor(self.schema, self.column_map) as ocp_accessor:
            cluster_id = 'my-ocp-cluster-1'
            for cost_entry_date in (today, last_month):
                period = creator.create_ocp_report_period(
                    self.ocp_test_provider_uuid,
                    period_date=cost_entry_date,
                    cluster_id=cluster_id
                )
                report = creator.create_ocp_report(period, cost_entry_date)
                creator.create_ocp_usage_line_item(
                    period, report, node=node
                )
            ocp_report_table_name = OCP_REPORT_TABLE_MAP['report']
            with schema_context(self.schema):
                report_table = getattr(ocp_accessor.report_schema, ocp_report_table_name)

                report_entry = report_table.objects.all().aggregate(
                    Min('interval_start'), Max('interval_start')
                )
                start_date = report_entry['interval_start__min']
                end_date = report_entry['interval_start__max']

                start_date = start_date.replace(hour=0, minute=0, second=0, microsecond=0)
                end_date = end_date.replace(hour=0, minute=0, second=0, microsecond=0)

            ocp_accessor.populate_line_item_daily_table(
                start_date, end_date, cluster_id
            )
            ocp_accessor.populate_line_item_daily_summary_table(
                start_date, end_date, cluster_id
            )

        return bill_ids