def test_update_pod_data_usage_lt_request(self): """Test that _update_pod_data keeps usage <= limit <= request.""" pods = self.attributes.get("nodes")[0].get("namespaces")[0].get("pods") kwargs = { "report_type": "test_report", "cpu_usage": self._usage_dict(), "mem_usage_gig": self._usage_dict(), "pod_seconds": 86400, "pod": pods[0], } generator = OCPGenerator(self.two_hours_ago, self.now) in_row = generator._init_data_row(self.two_hours_ago, self.now, report_type=OCP_POD_USAGE) out_row = generator._update_pod_data(copy(in_row), self.two_hours_ago, self.now, **kwargs) for x in ["cpu_core", "memory_byte"]: with self.subTest(row=out_row): with self.subTest(x=x): self.assertLessEqual( out_row.get(f"pod_usage_{x}_seconds"), out_row.get(f"pod_request_{x}_seconds")) self.assertLessEqual(out_row.get(f"pod_usage_{x}_seconds"), out_row.get(f"pod_limit_{x}_seconds")) self.assertLessEqual( out_row.get(f"pod_limit_{x}_seconds"), out_row.get(f"pod_request_{x}_seconds"))
def test_update_storage_data(self): """Test that _update_storage_data updates storage data.""" kwargs = { "volume_claim_usage_gig": self._usage_dict(), "vc_capacity": self.fake.pyint(1, 100), "namespace": self.fake.word(), "pod": self.fake.word(), "volume_claim": self.fake.uuid4(), "volume_name": self.fake.word(), "storage_class": self.fake.word(), "volume_request": self.fake.pyint(1, 100), "volume_labels": ( f"label_{self.fake.word()}:{self.fake.word()}", f"|label_{self.fake.word()}:{self.fake.word()}", ), "volume_claim_labels": ( f"label_{self.fake.word()}:{self.fake.word()}", f"|label_{self.fake.word()}:{self.fake.word()}", ), } changed = { "namespace", "pod", "persistentvolumeclaim", "persistentvolume", "storageclass", "persistentvolumeclaim_capacity_bytes", "persistentvolumeclaim_capacity_byte_seconds", "volume_request_storage_byte_seconds", "persistentvolume_labels", "persistentvolumeclaim_labels", "persistentvolumeclaim_usage_byte_seconds", } generator = OCPGenerator(self.two_hours_ago, self.now) in_row = generator._init_data_row(self.two_hours_ago, self.now, report_type=OCP_STORAGE_USAGE) out_row = generator._update_storage_data(copy(in_row), self.two_hours_ago, self.now, **kwargs) for key in changed: with self.subTest(key=key): if key in kwargs: self.assertEqual(out_row.get(key), kwargs.get(key)) self.assertNotEqual(out_row.get(key), in_row.get(key)) for key in list(set(out_row.keys()) - changed): with self.subTest(key=key): self.assertIsNotNone(out_row.get(key))
def test_init_data_row(self): """Test that init_data_row initializes a row of data.""" generator = OCPGenerator(self.two_hours_ago, self.now, self.attributes) for report_type, columns in [ (OCP_POD_USAGE, OCP_POD_USAGE_COLUMNS), (OCP_NODE_LABEL, OCP_NODE_LABEL_COLUMNS), (OCP_STORAGE_USAGE, OCP_STORAGE_COLUMNS), ]: with self.subTest(report_type=report_type): row = generator._init_data_row(self.two_hours_ago, self.now, report_type=report_type) self.assertIsInstance(row, dict) self.assertEqual(list(row.keys()), list(columns))
def test_update_storage_data_usage_lt_request(self): """Test that _update_storge_data keeps usage <= capacity <= request.""" kwargs = { "volume_claim_usage_gig": self._usage_dict(), "vc_capacity": self.fake.pyint(1, 100), "namespace": self.fake.word(), "pod": self.fake.word(), "volume_claim": self.fake.uuid4(), "volume_name": self.fake.word(), "storage_class": self.fake.word(), "volume_request": self.fake.pyint(1, 100), "volume_labels": ( f"label_{self.fake.word()}:{self.fake.word()}", f"|label_{self.fake.word()}:{self.fake.word()}", ), "volume_claim_labels": ( f"label_{self.fake.word()}:{self.fake.word()}", f"|label_{self.fake.word()}:{self.fake.word()}", ), } generator = OCPGenerator(self.two_hours_ago, self.now) in_row = generator._init_data_row(self.two_hours_ago, self.now, report_type=OCP_STORAGE_USAGE) out_row = generator._update_storage_data(copy(in_row), self.two_hours_ago, self.now, **kwargs) self.assertLessEqual( out_row.get("persistentvolumeclaim_usage_byte_seconds"), out_row.get("persistentvolumeclaim_capacity_byte_seconds") * GIGABYTE, ) self.assertLessEqual( out_row.get("persistentvolumeclaim_capacity_byte_seconds"), out_row.get("volume_request_storage_byte_seconds"), )
def test_update_node_label_data(self): """Test that _update_node_label_data updates label data""" node = self.attributes.get("nodes")[0] kwargs = { "node": node.get("node"), "node_labels": node.get("node_labels") } generator = OCPGenerator(self.two_hours_ago, self.now) in_row = generator._init_data_row(self.two_hours_ago, self.now, report_type=OCP_NODE_LABEL) out_row = generator._update_node_label_data(copy(in_row), self.two_hours_ago, self.now, **kwargs) self.assertEqual(out_row.get("node"), node.get("node")) self.assertNotEqual(out_row.get("node"), in_row.get("node")) self.assertEqual(out_row.get("node_labels"), node.get("node_labels")) self.assertNotEqual(out_row.get("node_labels"), in_row.get("node_labels"))
def test_update_pod_data(self): """Test that _update_pod_data updates pod data""" pods = self.attributes.get("nodes")[0].get("namespaces")[0].get("pods") usage_dict = self._usage_dict() kwargs = { "report_type": "test_report", "cpu_usage": usage_dict, "mem_usage_gig": usage_dict, "pod_seconds": 86400, "pod": pods[0], } changed = { "pod_usage_cpu_core_seconds", "pod_request_cpu_core_seconds", "pod_limit_cpu_core_seconds", "pod_usage_memory_byte_seconds", "pod_request_memory_byte_seconds", "pod_limit_memory_byte_seconds", } generator = OCPGenerator(self.two_hours_ago, self.now) generator.nodes = self.attributes in_row = generator._init_data_row(self.two_hours_ago, self.now, report_type=OCP_POD_USAGE) out_row = generator._update_pod_data( copy(in_row), datetime.strptime(random.choice(list(usage_dict.keys())), "%m-%d-%Y"), self.now, **kwargs) for key in changed: with self.subTest(key=key): self.assertIsNotNone(out_row.get(key)) self.assertNotEqual(out_row.get(key), in_row.get(key)) for key in list(set(out_row.keys()) - changed): with self.subTest(key=key): self.assertIsNotNone(out_row.get(key))
def test_update_pod_data(self): """Test that _update_pod_data updates pod data""" pods = next( iter(self.attributes.get("nodes")[0].get( "namespaces").values())).get("pods") kwargs = { "cpu_usage": self._usage_dict(), "mem_usage_gig": self._usage_dict(), "pod_seconds": 86400, "pod": pods[0], } changed = { "pod_usage_cpu_core_seconds", "pod_request_cpu_core_seconds", "pod_limit_cpu_core_seconds", "pod_usage_memory_byte_seconds", "pod_request_memory_byte_seconds", "pod_limit_memory_byte_seconds", } generator = OCPGenerator(self.two_hours_ago, self.now, {}) in_row = generator._init_data_row(self.two_hours_ago, self.now, report_type=OCP_POD_USAGE) out_row = generator._update_pod_data(copy(in_row), self.two_hours_ago, self.now, **kwargs) for key in changed: with self.subTest(key=key): self.assertEqual(out_row.get(key), pods[0].get(key)) self.assertNotEqual(out_row.get(key), in_row.get(key)) for key in list(set(out_row.keys()) - changed): with self.subTest(key=key): self.assertIn( out_row.get(key), [pods[0].get(key), in_row.get(key)])