1from autotest_lib.client.common_lib.cros import system_metrics_collector 2 3import unittest 4 5# pylint: disable=missing-docstring 6class TestSystemMetricsCollector(unittest.TestCase): 7 """ 8 Tests for the system_metrics_collector module. 9 """ 10 def test_mem_usage_metric(self): 11 metric = system_metrics_collector.MemUsageMetric(FakeSystemFacade()) 12 metric.collect_metric() 13 self.assertAlmostEqual(60, metric.values[0]) 14 15 def test_file_handles_metric(self): 16 metric = system_metrics_collector.AllocatedFileHandlesMetric( 17 FakeSystemFacade()) 18 metric.collect_metric() 19 self.assertEqual(11, metric.values[0]) 20 21 def test_cpu_usage_metric(self): 22 system_facade = FakeSystemFacade() 23 metric = system_metrics_collector.CpuUsageMetric(system_facade) 24 metric.pre_collect() 25 system_facade.active_cpu_time += 0.1 26 metric.collect_metric() 27 self.assertAlmostEqual(50, metric.values[0]) 28 29 def test_tempature_metric(self): 30 metric = system_metrics_collector.TemperatureMetric(FakeSystemFacade()) 31 metric.collect_metric() 32 self.assertAlmostEqual(43, metric.values[0]) 33 34 def test_storage_written_metric(self): 35 system_facade = FakeSystemFacade() 36 metric = system_metrics_collector.StorageWrittenMetric(system_facade) 37 metric.pre_collect() 38 system_facade.storage_statistics['written_kb'] += 1337 39 metric.collect_metric() 40 self.assertEqual(1337, metric.values[0]) 41 42 def test_collector(self): 43 collector = system_metrics_collector.SystemMetricsCollector( 44 FakeSystemFacade(), [TestMetric()]) 45 collector.collect_snapshot() 46 d = {} 47 def _write_func(**kwargs): 48 d.update(kwargs) 49 collector.write_metrics(_write_func) 50 self.assertEquals('test_description', d['description']) 51 self.assertEquals([1], d['value']) 52 self.assertEquals(False, d['higher_is_better']) 53 self.assertEquals('test_unit', d['units']) 54 55 def test_collector_default_set_of_metrics_no_error(self): 56 # Only verify no errors are thrown when collecting using 57 # the default metric set. 58 collector = system_metrics_collector.SystemMetricsCollector( 59 FakeSystemFacade()) 60 collector.pre_collect() 61 collector.collect_snapshot() 62 collector.collect_snapshot() 63 collector.write_metrics(lambda **kwargs: None) 64 65 def test_aggregate_metric_zero_samples(self): 66 metric = TestAggregateMetric() 67 self.assertEqual(metric.values, []) 68 69 def test_aggregate_metric_one_sample(self): 70 metric = TestAggregateMetric() 71 metric.collect_metric() 72 self.assertEqual(metric.values, 1) 73 74 def test_aggregate_metric_many_samples(self): 75 metric = TestAggregateMetric() 76 metric.collect_metric() 77 metric.value = 2 78 metric.collect_metric() 79 metric.value = 3 80 metric.collect_metric() 81 self.assertEqual(metric.values, 3) 82 83 def test_aggregate_metric_from_metric_one_sample(self): 84 test_metric = TestMetric() 85 aggregate_metric = LastElementMetric.from_metric(test_metric) 86 test_metric.collect_metric() 87 aggregate_metric.collect_metric() 88 self.assertEqual(test_metric.values, [1]) 89 self.assertEqual(aggregate_metric.values, 1) 90 91 def test_aggregate_metric_from_metric_many_samples(self): 92 test_metric = TestMetric() 93 aggregate_metric = LastElementMetric.from_metric(test_metric) 94 test_metric.collect_metric() 95 aggregate_metric.collect_metric() 96 test_metric.value = 2 97 test_metric.collect_metric() 98 aggregate_metric.collect_metric() 99 test_metric.value = 3 100 test_metric.collect_metric() 101 aggregate_metric.collect_metric() 102 self.assertEqual(test_metric.values, [1, 2, 3]) 103 self.assertEqual(aggregate_metric.values, 3) 104 105 def test_peak_metric_description(self): 106 metric = system_metrics_collector.PeakMetric('foo') 107 self.assertEqual(metric.description, 'peak_foo') 108 109 def test_peak_metric_many_samples(self): 110 metric = TestPeakMetric() 111 metric.collect_metric() 112 metric.value = 2 113 metric.collect_metric() 114 metric.value = 0 115 metric.collect_metric() 116 self.assertEqual(metric.values, 2) 117 118 def test_peak_metric_from_metric_many_samples(self): 119 test_metric = TestMetric() 120 peak_metric = system_metrics_collector.PeakMetric.from_metric( 121 test_metric) 122 test_metric.collect_metric() 123 peak_metric.collect_metric() 124 test_metric.value = 2 125 test_metric.collect_metric() 126 peak_metric.collect_metric() 127 test_metric.value = 0 128 test_metric.collect_metric() 129 peak_metric.collect_metric() 130 self.assertEqual(peak_metric.values, 2) 131 132 def test_sum_metric_description(self): 133 metric = system_metrics_collector.SumMetric('foo') 134 self.assertEqual(metric.description, 'sum_foo') 135 136 def test_sum_metric_many_samples(self): 137 metric = TestSumMetric() 138 metric.collect_metric() 139 metric.value = 2 140 metric.collect_metric() 141 metric.value = 3 142 metric.collect_metric() 143 self.assertEqual(metric.values, 6) 144 145 def test_sum_metric_from_metric_many_samples(self): 146 test_metric = TestMetric() 147 sum_metric = system_metrics_collector.SumMetric.from_metric( 148 test_metric) 149 test_metric.collect_metric() 150 sum_metric.collect_metric() 151 test_metric.value = 40 152 test_metric.collect_metric() 153 sum_metric.collect_metric() 154 test_metric.value = 1 155 test_metric.collect_metric() 156 sum_metric.collect_metric() 157 self.assertEqual(sum_metric.values, 42) 158 159class FakeSystemFacade(object): 160 def __init__(self): 161 self.mem_total_mb = 1000.0 162 self.mem_free_mb = 400.0 163 self.file_handles = 11 164 self.active_cpu_time = 0.4 165 self.current_temperature_max = 43 166 self.storage_statistics = { 167 'transfers_per_s': 4.45, 168 'read_kb_per_s': 10.33, 169 'written_kb_per_s': 292.40, 170 'read_kb': 665582, 171 'written_kb': 188458, 172 } 173 174 def get_mem_total(self): 175 return self.mem_total_mb 176 177 def get_mem_free_plus_buffers_and_cached(self): 178 return self.mem_free_mb 179 180 def get_num_allocated_file_handles(self): 181 return self.file_handles 182 183 def get_cpu_usage(self): 184 return {} 185 186 def compute_active_cpu_time(self, last_usage, current_usage): 187 return self.active_cpu_time 188 189 def get_current_temperature_max(self): 190 return self.current_temperature_max 191 192 def get_storage_statistics(self, device=None): 193 return self.storage_statistics 194 195class TestMetric(system_metrics_collector.Metric): 196 def __init__(self): 197 super(TestMetric, self).__init__( 198 'test_description', units='test_unit') 199 self.value = 1 200 201 def collect_metric(self): 202 self._store_sample(self.value) 203 204class LastElementMetric(system_metrics_collector.Metric): 205 def _aggregate(self, x): 206 return x[-1] 207 208class TestAggregateMetric(TestMetric, LastElementMetric): 209 pass 210 211class TestPeakMetric(TestMetric, system_metrics_collector.PeakMetric): 212 pass 213 214class TestSumMetric(TestMetric, system_metrics_collector.SumMetric): 215 pass 216