class TestPerfManagerCollector(unittest.TestCase): def setUp(self): self.coll = PerfManagerCollector() now_timestamp = int(time.mktime(datetime.now().timetuple())) # Mock function calls in vim_client results = {} results["disk.usage"] = [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)] results["net.usage"] = [(10.0, 3.0), (11.0, 5.0)] results["cpu.cpuUsagePercentage"] = [(now_timestamp, 50.0)] results["mem.memoryUsagePercentage"] = [(now_timestamp, 50.0)] self.mock_vim = MagicMock() self.mock_vim.query_stats = MagicMock(return_value=results) self.coll._get_client = MagicMock(return_value=self.mock_vim) def test_collect(self): now = datetime.now() now_timestamp = int(time.mktime(datetime.now().timetuple())) since = now - timedelta(seconds=20) results = self.coll.collect(since) # Verify counters returned by queryperf. assert_that(results, has_entries('disk.usage', [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)])) assert_that(results, has_entries('net.usage', [(10.0, 3.0), (11.0, 5.0)])) # Verify counters collected through Pyvmomi Host object assert_that(results, has_entries('cpu.cpuUsagePercentage', [(now_timestamp, 50.0)])) assert_that(results, has_entries('mem.memoryUsagePercentage', [(now_timestamp, 50.0)])) self.mock_vim.get_perf_manager_stats = MagicMock(return_value={})
class TestPerfManagerCollector(unittest.TestCase): def setUp(self): self.mock_perf_mgr = MagicMock() self.mock_perf_mgr.perfCounter = fake_get_counters() self.coll = PerfManagerCollector() metric_names = [ [], ["A.B", "C.D"], ["E.F", "G.H"], ["I.J", "I.K", "I.L"], ["M.N", "M.O", "M.O"] ] self.coll.metric_names = metric_names host = MagicMock(spec=vim.ManagedObject, key=vim.HostSystem("ha-host")) host.summary = MagicMock() host.summary.quickStats = MagicMock() host.summary.hardware = MagicMock() host.summary.quickStats.overallCpuUsage = MagicMock(return_value=100) host.summary.hardware.cpuMhz = MagicMock(return_value=2048) host.summary.hardware.numCpuCores = MagicMock(return_value=12) host.summary.quickStats.overallMemoryUsage = MagicMock(return_value=2500) host.summary.hardware.memorySize = MagicMock(return_value=4000) self.coll.get_perf_manager = MagicMock(return_value=self.mock_perf_mgr) self.coll.get_host_system = MagicMock( return_value=host) self.mock_vim = MagicMock() self.mock_vim.get_vms_in_cache.return_value = [MagicMock(name="fake-vm-id", project_id="p1", tenant_id="t1")] self.mock_vim.get_vm_obj_in_cache.return_value = vim.VirtualMachine('9') self.coll.get_vim_client = MagicMock(return_value=self.mock_vim) def test_initialize_host_counters(self): self.coll.initialize_host_counters() assert_that(self.coll._counter_to_metric_map, equal_to( {7376: 'I.L', 7778: 'M.N', 7779: 'M.O', 7172: 'G.H', 6566: 'A.B', 7374: 'I.J', 7375: 'I.K', 6768: 'C.D', 6970: 'E.F'})) assert_that(self.coll._selected_metric_names, equal_to(['A.B', 'C.D'])) for metric_obj in self.coll._selected_perf_metric_id_objs: assert_that([6566, 6768], has_item(metric_obj.counterId)) def test_update_selected_metrics(self): self.coll.initialize_host_counters() # select higher level (=2) to pick a bigger set of metrics to query self.coll._update_selected_metrics(2) assert_that(self.coll._selected_metric_names, equal_to(['A.B', 'C.D', 'E.F', 'G.H'])) for metric_obj in self.coll._selected_perf_metric_id_objs: assert_that([6566, 6768, 6970, 7172], has_item(metric_obj.counterId)) assert_that(metric_obj.instance, is_("*")) def test_get_perf_manager_stats(self): self.coll.initialize_host_counters() now = datetime.now() since = now - timedelta(seconds=20) self.mock_perf_mgr.QueryPerf.return_value = [ vim.PerformanceManager.EntityMetricCSV( entity=vim.HostSystem('ha-host'), sampleInfoCSV='20,1970-01-01T00:00:10Z', value=[ vim.PerformanceManager.MetricSeriesCSV( id=vim.PerformanceManager.MetricId(counterId=6566, instance=''), value='200')] ), vim.PerformanceManager.EntityMetricCSV( entity=vim.VirtualMachine('9'), sampleInfoCSV='20,1970-01-01T00:00:10Z', value=[ vim.PerformanceManager.MetricSeriesCSV( id=vim.PerformanceManager.MetricId(counterId=6566, instance=''), value='100')] ) ] results = self.coll.get_perf_manager_stats(since, now) assert_that(len(results.keys()), is_(2)) assert_that(results, has_entries('vm.t1.p1.A.B', [(10.0, 100.0)], 'A.B', [(10.0, 200.0)])) assert_that(self.mock_perf_mgr.QueryPerf.call_count, is_(1)) expected_entity_refs = ["'vim.VirtualMachine:9'", "'vim.HostSystem:ha-host'"] for i in range(len(expected_entity_refs)): # ref_str = expected_entity_refs[i] query_spec = self.mock_perf_mgr.QueryPerf.call_args[0][0][i] assert_that(query_spec, instance_of(vim.PerformanceManager.QuerySpec)) assert_that(query_spec.intervalId, is_(20)) assert_that(query_spec.format, is_('csv')) assert_that(len(query_spec.metricId), is_(2)) # assert_that(str(query_spec.entity), is_(ref_str)) t_start = datetime.strptime( str(query_spec.startTime), '%Y-%m-%d %H:%M:%S.%f') t_end = datetime.strptime( str(query_spec.endTime), '%Y-%m-%d %H:%M:%S.%f') assert_that(t_end, equal_to(now)) assert_that(t_start, equal_to(since)) @parameterized.expand([ (True,), (False,), ]) def test_collect(self, initialized): now = datetime.now() since = now - timedelta(seconds=20) self.coll._initialized = initialized self.coll.get_perf_manager_stats = MagicMock() self.coll.initialize_host_counters = MagicMock() self.coll.collect(since) assert_that(self.coll.initialize_host_counters.call_count, is_(0 if initialized else 1)) assert_that(self.coll.get_perf_manager_stats.call_count, is_(1))
class TestPerfManagerCollector(unittest.TestCase): def setUp(self): self.coll = PerfManagerCollector() # Create mock Host entity to get CPU and Memory Performance Counters. self.host = MagicMock(spec=vim.ManagedObject, key=vim.HostSystem("ha-host")) self.host.summary = MagicMock() self.host.summary.quickStats = MagicMock() self.host.summary.hardware = MagicMock() self.host.summary.quickStats.overallCpuUsage = 1024 self.host.summary.hardware.cpuMhz = 1024 self.host.summary.hardware.numCpuCores = 2 self.host.summary.quickStats.overallMemoryUsage = 2 # 2GB self.host.summary.hardware.memorySize = 4*1024*1024 # 4GB self.coll.get_host_system = MagicMock(return_value=self.host) # Mock function calls in vim_client results = {} results["disk.usage"] = [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)] results["net.usage"] = [(10.0, 3.0), (11.0, 5.0)] self.mock_vim = MagicMock() self.mock_vim.query_stats = MagicMock(return_value=results) self.coll.get_vim_client = MagicMock(return_value=self.mock_vim) def test_collect(self): now = datetime.now() now_timestamp = int(time.mktime(now.timetuple())) since = now - timedelta(seconds=20) self.coll._get_timestamp = MagicMock(return_value=now_timestamp) results = self.coll.collect(since) # Verify counters returned by vim_client. assert_that(results, has_entries('disk.usage', [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)])) assert_that(results, has_entries('net.usage', [(10.0, 3.0), (11.0, 5.0)])) # Verify counters collected through Pyvmomi Host object assert_that(results, has_entries('cpu.cpuUsagePercentage', [(now_timestamp, 50.0)])) assert_that(results, has_entries('mem.memoryUsagePercentage', [(now_timestamp, 50.0)])) self.mock_vim.get_perf_manager_stats = MagicMock(return_value={}) def test_collect_with_no_vim_client_results(self): now = datetime.now() now_timestamp = int(time.mktime(now.timetuple())) since = now - timedelta(seconds=20) self.coll._get_timestamp = MagicMock(return_value=now_timestamp) self.mock_vim.query_stats = MagicMock(return_value={}) results = self.coll.collect(since) # Verify no counter assert_that("disk.usage" in results.keys(), equal_to(False)) assert_that("net.usage" in results.keys(), equal_to(False)) # Verify counters collected through Pyvmomi Host object assert_that(results, has_entries('cpu.cpuUsagePercentage', [(now_timestamp, 50.0)])) assert_that(results, has_entries('mem.memoryUsagePercentage', [(now_timestamp, 50.0)])) def test_collect_with_bad_pyvmomi_results(self): now = datetime.now() now_timestamp = int(time.mktime(now.timetuple())) since = now - timedelta(seconds=20) self.coll._get_timestamp = MagicMock(return_value=now_timestamp) self.host.summary.hardware.numCpuCores = 0 self.host.summary.hardware.memorySize = 0 results = self.coll.collect(since) # Verify no counter assert_that(results, has_entries('cpu.cpuUsagePercentage', [(now_timestamp, 0.0)])) assert_that(results, has_entries('mem.memoryUsagePercentage', [(now_timestamp, 0.0)]))