def test_wb_collect_system_info_gets_curtin_version(self): """_collect_system_info stores curtin version in target_dir.""" with mock.patch('curtin.version.version_string') as m_version: m_version.return_value = '17.999' collect_logs._collect_system_info(self.new_root, config={}) version = self.tmp_path('version', _dir=self.new_root) with open(version, 'r') as f: self.assertEqual(f.read(), '17.999')
def test_wb_collect_system_info_writes_uname(self): """_collect_system_info saves uname details in target_dir.""" def fake_subp(cmd, capture=False, combine_capture=False): if cmd == ['uname', '-a'] and capture: return ('Linux myhost 4.4.0-104-generic', '') return ('', '') self.mock_subp.side_effect = fake_subp collect_logs._collect_system_info(self.new_root, config={}) uname = self.tmp_path('uname', _dir=self.new_root) with open(uname, 'r') as f: self.assertEqual(f.read(), 'Linux myhost 4.4.0-104-generic')
def test_wb_collect_system_info_writes_lshw(self): """_collect_system_info saves lshw details in target_dir.""" def fake_subp(cmd, capture=False, combine_capture=False): if cmd == ['sudo', 'lshw'] and capture: return ('lshw output', '') return ('', '') self.mock_subp.side_effect = fake_subp collect_logs._collect_system_info(self.new_root, config={}) lshw = self.tmp_path('lshw', _dir=self.new_root) with open(lshw, 'r') as f: self.assertEqual(f.read(), 'lshw output')
def test_wb_collect_system_info_copies_system_files(self): """_collect_system_info copies system files into in target_dir. Expected files are minimally /etc/os-release, /proc/cmdline and /proc/partitions. Since os-release cmdline files are read-only chmod copied files 0o644. """ with mock.patch('curtin.commands.collect_logs.os.chmod') as m_chmod: with mock.patch('shutil.copy') as m_copy: collect_logs._collect_system_info(self.new_root, config={}) self.assertEqual([ mock.call('/etc/os-release', self.new_root), mock.call('/proc/cmdline', self.new_root), mock.call('/proc/partitions', self.new_root) ], m_copy.call_args_list) for fname in ('os-release', 'cmdline', 'partitions'): self.assertIn( mock.call(os.path.join(self.new_root, 'os-release'), 0o644), m_chmod.call_args_list)
def test_wb_collect_system_info_writes_curtin_config(self): """_collect_system_info saves curtin config json-formatted.""" config = { "install": { "log_file": "/var/log/curtin/install.log" }, "late_commands": { "builtin": [] } } collect_logs._collect_system_info(self.new_root, config=config) curtin_config = self.tmp_path('curtin-config', _dir=self.new_root) with open(curtin_config, 'r') as f: self.assertEqual( f.read(), json.dumps(config, indent=1, sort_keys=True, separators=(',', ': ')))
def test_wb_collect_system_info_writes_network_info(self): """_collect_system_info saves network details in target_dir.""" ipv4_addr = '1: lo inet 127.0.0.1/8 scope host lo' ipv6_addr = '1: lo inet6 ::1/128 scope host' ipv4_route = 'default via 192.168.2.1 dev wlp3s0' ipv6_route = 'fe80::/64 dev lxdbr0 proto kernel' expected = dedent("""\ === ip --oneline address list === {ipv4_addr} === ip --oneline -6 address list === {ipv6_addr} === ip --oneline route list === {ipv4_route} === ip --oneline -6 route list === {ipv6_route}""".format(ipv4_addr=ipv4_addr, ipv6_addr=ipv6_addr, ipv4_route=ipv4_route, ipv6_route=ipv6_route)) def fake_subp(cmd, capture=False, combine_capture=False): if cmd[0] == 'ip': assert combine_capture, ('combine_capture not set for cmd %s' % cmd) else: assert capture, 'capture not set True for cmd %s' % cmd if cmd == ['ip', '--oneline', 'address', 'list']: return ipv4_addr, '' if cmd == ['ip', '--oneline', '-6', 'address', 'list']: return ipv6_addr, '' if cmd == ['ip', '--oneline', 'route', 'list']: return ipv4_route, '' if cmd == ['ip', '--oneline', '-6', 'route', 'list']: return ipv6_route, '' return ('', '') self.mock_subp.side_effect = fake_subp collect_logs._collect_system_info(self.new_root, config={}) network = self.tmp_path('network', _dir=self.new_root) with open(network, 'r') as f: self.assertEqual(f.read(), expected)