1#!/usr/bin/python 2 3__author__ = "kerl@google.com, gwendal@google.com (Gwendal Grignou)" 4 5import io 6import unittest 7 8from autotest_lib.client.bin import utils 9 10class TestUtils(unittest.TestCase): 11 """Test utils functions.""" 12 13 # Test methods, disable missing-docstring 14 # pylint: disable=missing-docstring 15 def setUp(self): 16 utils._open_file = self.fake_open 17 # Files opened with utils._open_file will contain this string. 18 self.fake_file_text = '' 19 20 def fake_open(self, path): 21 # Use BytesIO instead of StringIO to support with statements. 22 return io.BytesIO(bytes(self.fake_file_text)) 23 24 def test_concat_partition(self): 25 self.assertEquals("nvme0n1p3", utils.concat_partition("nvme0n1", 3)) 26 self.assertEquals("mmcblk1p3", utils.concat_partition("mmcblk1", 3)) 27 self.assertEquals("sda3", utils.concat_partition("sda", 3)) 28 29 # The columns in /proc/stat are: 30 # user nice system idle iowait irq softirq steal guest guest_nice 31 # 32 # Although older kernel versions might not contain all of them. 33 # Unit is 1/100ths of a second. 34 def test_get_cpu_usage(self): 35 self.fake_file_text = 'cpu 254544 9 254768 2859878 1 2 3 4 5 6\n' 36 usage = utils.get_cpu_usage() 37 self.assertEquals({ 38 'user': 254544, 39 'nice': 9, 40 'system': 254768, 41 'idle': 2859878, 42 'iowait': 1, 43 'irq': 2, 44 'softirq': 3, 45 'steal': 4, 46 'guest': 5, 47 'guest_nice': 6 48 }, usage) 49 50 def test_get_cpu_missing_columns(self): 51 self.fake_file_text = 'cpu 254544 9 254768 2859878\n' 52 usage = utils.get_cpu_usage() 53 self.assertEquals({ 54 'user': 254544, 55 'nice': 9, 56 'system': 254768, 57 'idle': 2859878, 58 'iowait': 0, 59 'irq': 0, 60 'softirq': 0, 61 'steal': 0, 62 'guest': 0, 63 'guest_nice': 0 64 }, usage) 65 66 def test_compute_active_cpu_time(self): 67 start_usage = { 68 'user': 900, 69 'nice': 10, 70 'system': 90, 71 'idle': 10000, 72 'iowait': 500, 73 'irq': 100, 74 'softirq': 50, 75 'steal': 150, 76 'guest': 170, 77 'guest_nice': 30 78 } 79 end_usage = { 80 'user': 1800, 81 'nice': 20, 82 'system': 180, 83 'idle': 13000, 84 'iowait': 2000, 85 'irq': 200, 86 'softirq': 100, 87 'steal': 300, 88 'guest': 340, 89 'guest_nice': 60 90 } 91 usage = utils.compute_active_cpu_time(start_usage, end_usage) 92 self.assertAlmostEqual(usage, 0.25) 93 94 def test_compute_active_cpu_time_idle(self): 95 start_usage = { 96 'user': 900, 97 'nice': 10, 98 'system': 90, 99 'idle': 10000, 100 'iowait': 500, 101 'irq': 100, 102 'softirq': 50, 103 'steal': 150, 104 'guest': 170, 105 'guest_nice':30 106 } 107 end_usage = { 108 'user': 900, 109 'nice': 10, 110 'system': 90, 111 'idle': 11000, 112 'iowait': 1000, 113 'irq': 100, 114 'softirq': 50, 115 'steal': 150, 116 'guest': 170, 117 'guest_nice':30 118 } 119 usage = utils.compute_active_cpu_time(start_usage, end_usage) 120 self.assertAlmostEqual(usage, 0) 121 122 def test_get_mem_total(self): 123 self.fake_file_text = ('MemTotal: 2048000 kB\n' 124 'MemFree: 307200 kB\n' 125 'Buffers: 102400 kB\n' 126 'Cached: 204800 kB\n') 127 self.assertAlmostEqual(utils.get_mem_total(), 2000) 128 129 def test_get_mem_free(self): 130 self.fake_file_text = ('MemTotal: 2048000 kB\n' 131 'MemFree: 307200 kB\n' 132 'Buffers: 102400 kB\n' 133 'Cached: 204800 kB\n') 134 self.assertAlmostEqual(utils.get_mem_free(), 300) 135 136 def test_get_mem_free_plus_buffers_and_cached(self): 137 self.fake_file_text = ('MemTotal: 2048000 kB\n' 138 'MemFree: 307200 kB\n' 139 'Buffers: 102400 kB\n' 140 'Cached: 204800 kB\n') 141 self.assertAlmostEqual(utils.get_mem_free_plus_buffers_and_cached(), 142 600) 143 144 def test_get_num_allocated_file_handles(self): 145 self.fake_file_text = '123 0 456\n' 146 self.assertEqual(utils.get_num_allocated_file_handles(), 123) 147 148