def test_netdev_info_nettools_down(self, m_subp, m_which): """test netdev_info using nettools and down interfaces.""" m_subp.return_value = ( readResource("netinfo/new-ifconfig-output-down"), "") m_which.side_effect = lambda x: x if x == 'ifconfig' else None self.assertEqual( { 'eth0': { 'ipv4': [], 'ipv6': [], 'hwaddr': '00:16:3e:de:51:a6', 'up': False }, 'lo': { 'ipv4': [{ 'ip': '127.0.0.1', 'mask': '255.0.0.0' }], 'ipv6': [{ 'ip': '::1/128', 'scope6': 'host' }], 'hwaddr': '.', 'up': True } }, netdev_info("."))
def testIndexes(self): test_data = helpers.readResource('filter_cloud_multipart.yaml') ud_proc = ud.UserDataProcessor(self.getCloudPaths()) message = ud_proc.process(test_data) start_count = count_messages(message) self.assertTrue(start_count > 0) # This file should have the following # indexes -> amount mapping in it expected_counts = { 2: 2, 3: 2, 1: 2, 0: 1, 4: 1, 7: 0, -1: 0, 100: 0, # None should just give all back None: start_count, # Non ints should be ignored 'c': start_count, # Strings should be converted '1': 2, } self.assertCounts(message, expected_counts)
def test_netdev_info_iproute_down(self, m_subp, m_which): """Test netdev_info with ip and down interfaces.""" m_subp.return_value = ( readResource("netinfo/sample-ipaddrshow-output-down"), "") m_which.side_effect = lambda x: x if x == 'ip' else None self.assertEqual( { 'lo': { 'ipv4': [{ 'ip': '127.0.0.1', 'bcast': '.', 'mask': '255.0.0.0', 'scope': 'host' }], 'ipv6': [{ 'ip': '::1/128', 'scope6': 'host' }], 'hwaddr': '.', 'up': True }, 'eth0': { 'ipv4': [], 'ipv6': [], 'hwaddr': '00:16:3e:de:51:a6', 'up': False } }, netdev_info("."))
def test_netdev_pformat_with_down(self, m_netdev_info): """test netdev_pformat when netdev_info returns 'down' interfaces.""" m_netdev_info.return_value = ({ 'lo': { 'ipv4': [{ 'ip': '127.0.0.1', 'mask': '255.0.0.0', 'scope': 'host' }], 'ipv6': [{ 'ip': '::1/128', 'scope6': 'host' }], 'hwaddr': '.', 'up': True }, 'eth0': { 'ipv4': [], 'ipv6': [], 'hwaddr': '00:16:3e:de:51:a6', 'up': False } }) self.assertEqual(readResource("netinfo/netdev-formatted-output-down"), netdev_pformat())
def testNoneIndex(self): test_data = helpers.readResource('filter_cloud_multipart.yaml') ud_proc = ud.UserDataProcessor(self.getCloudPaths()) message = ud_proc.process(test_data) start_count = count_messages(message) self.assertTrue(start_count > 0) filtered_message = launch_index.Filter(None).apply(message) self.assertTrue(self.equivalentMessage(message, filtered_message))
def test_get_device_info_from_zpool_on_error(self, zpool_output, m_os): # mock /dev/zfs exists m_os.path.exists.return_value = True # mock subp command from util.get_mount_info_fs_on_zpool zpool_output.return_value = ( helpers.readResource('zpool_status_simple.txt'), 'error') # save function return values and do asserts ret = util.get_device_info_from_zpool('vmzroot') self.assertIsNone(ret)
def test_get_device_info_from_zpool_on_error(self, zpool_output, m_os): # mock /dev/zfs exists m_os.path.exists.return_value = True # mock subp command from util.get_mount_info_fs_on_zpool zpool_output.return_value = ( helpers.readResource('zpool_status_simple.txt'), 'error' ) # save function return values and do asserts ret = util.get_device_info_from_zpool('vmzroot') self.assertIsNone(ret)
def test_parse_mount_with_zfs(self, mount_out): mount_out.return_value = ( helpers.readResource('mount_parse_zfs.txt'), '') # this one is valid and exists in mount_parse_zfs.txt ret = util.parse_mount('/var') self.assertEqual(('vmzroot/ROOT/freebsd/var', 'zfs', '/var'), ret) # this one is the root, valid and also exists in mount_parse_zfs.txt ret = util.parse_mount('/') self.assertEqual(('vmzroot/ROOT/freebsd', 'zfs', '/'), ret) # this one does not even exist in mount_parse_ext.txt ret = util.parse_mount('/not/existing/mount') self.assertIsNone(ret)
def test_parse_mount_with_zfs(self, mount_out): mount_out.return_value = ( helpers.readResource('mount_parse_zfs.txt'), '') # this one is valid and exists in mount_parse_zfs.txt ret = util.parse_mount('/var') self.assertEqual(('vmzroot/ROOT/freebsd/var', 'zfs', '/var'), ret) # this one is the root, valid and also exists in mount_parse_zfs.txt ret = util.parse_mount('/') self.assertEqual(('vmzroot/ROOT/freebsd', 'zfs', '/'), ret) # this one does not even exist in mount_parse_ext.txt ret = util.parse_mount('/not/existing/mount') self.assertIsNone(ret)
def testConfigEmailIndex(self): test_data = helpers.readResource('filter_cloud_multipart_1.email') ud_proc = ud.UserDataProcessor(self.getCloudPaths()) message = ud_proc.process(test_data) self.assertTrue(count_messages(message) > 0) # This file should have the following # indexes -> amount mapping in it expected_counts = { 2: 1, -1: 0, None: 1, } self.assertCounts(message, expected_counts)
def test_parse_mount_with_ext(self, mount_out): mount_out.return_value = ( helpers.readResource('mount_parse_ext.txt'), '') # this one is valid and exists in mount_parse_ext.txt ret = util.parse_mount('/var') self.assertEqual(('/dev/mapper/vg00-lv_var', 'ext4', '/var'), ret) # another one that is valid and exists ret = util.parse_mount('/') self.assertEqual(('/dev/mapper/vg00-lv_root', 'ext4', '/'), ret) # this one exists in mount_parse_ext.txt ret = util.parse_mount('/sys/kernel/debug') self.assertIsNone(ret) # this one does not even exist in mount_parse_ext.txt ret = util.parse_mount('/not/existing/mount') self.assertIsNone(ret)
def test_parse_mount_with_ext(self, mount_out): mount_out.return_value = ( helpers.readResource('mount_parse_ext.txt'), '') # this one is valid and exists in mount_parse_ext.txt ret = util.parse_mount('/var') self.assertEqual(('/dev/mapper/vg00-lv_var', 'ext4', '/var'), ret) # another one that is valid and exists ret = util.parse_mount('/') self.assertEqual(('/dev/mapper/vg00-lv_root', 'ext4', '/'), ret) # this one exists in mount_parse_ext.txt ret = util.parse_mount('/sys/kernel/debug') self.assertIsNone(ret) # this one does not even exist in mount_parse_ext.txt ret = util.parse_mount('/not/existing/mount') self.assertIsNone(ret)
def test_raring_btrfs_root(self): lines = helpers.readResource('mountinfo_raring_btrfs.txt').splitlines() expected = ('/dev/vda1', 'btrfs', '/') self.assertEqual(expected, util.parse_mount_info('/', lines)) self.assertEqual(expected, util.parse_mount_info('/usr', lines)) self.assertEqual(expected, util.parse_mount_info('/usr/bin', lines)) self.assertEqual(expected, util.parse_mount_info('/boot', lines)) self.assertEqual(expected, util.parse_mount_info('/boot/grub', lines)) expected = ('/dev/vda1', 'btrfs', '/home') self.assertEqual(expected, util.parse_mount_info('/home', lines)) self.assertEqual(expected, util.parse_mount_info('/home/me', lines)) expected = ('tmpfs', 'tmpfs', '/run') self.assertEqual(expected, util.parse_mount_info('/run', lines)) expected = ('none', 'tmpfs', '/run/lock') self.assertEqual(expected, util.parse_mount_info('/run/lock', lines))
def test_raring_btrfs_root(self): lines = helpers.readResource('mountinfo_raring_btrfs.txt').splitlines() expected = ('/dev/vda1', 'btrfs', '/') self.assertEqual(expected, util.parse_mount_info('/', lines)) self.assertEqual(expected, util.parse_mount_info('/usr', lines)) self.assertEqual(expected, util.parse_mount_info('/usr/bin', lines)) self.assertEqual(expected, util.parse_mount_info('/boot', lines)) self.assertEqual(expected, util.parse_mount_info('/boot/grub', lines)) expected = ('/dev/vda1', 'btrfs', '/home') self.assertEqual(expected, util.parse_mount_info('/home', lines)) self.assertEqual(expected, util.parse_mount_info('/home/me', lines)) expected = ('tmpfs', 'tmpfs', '/run') self.assertEqual(expected, util.parse_mount_info('/run', lines)) expected = ('none', 'tmpfs', '/run/lock') self.assertEqual(expected, util.parse_mount_info('/run/lock', lines))
def test_none_ds(self): new_root = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, new_root) self.replicateTestRoot('simple_ubuntu', new_root) cfg = { 'datasource_list': ['None'], 'cloud_init_modules': ['write-files'], 'system_info': { 'paths': { 'run_dir': new_root } } } ud = helpers.readResource('user_data.1.txt') cloud_cfg = safeyaml.dumps(cfg) util.ensure_dir(os.path.join(new_root, 'etc', 'cloud')) util.write_file(os.path.join(new_root, 'etc', 'cloud', 'cloud.cfg'), cloud_cfg) self._patchIn(new_root) # Now start verifying whats created initer = stages.Init() initer.read_cfg() initer.initialize() initer.fetch() initer.datasource.userdata_raw = ud initer.instancify() initer.update() initer.cloudify().run('consume_data', initer.consume_data, args=[PER_INSTANCE], freq=PER_INSTANCE) mirrors = initer.distro.get_option('package_mirrors') self.assertEqual(1, len(mirrors)) mirror = mirrors[0] self.assertEqual(mirror['arches'], ['i386', 'amd64', 'blah']) mods = stages.Modules(initer) (which_ran, failures) = mods.run_section('cloud_init_modules') self.assertTrue(len(failures) == 0) self.assertTrue(os.path.exists('/etc/blah.ini')) self.assertIn('write-files', which_ran) contents = util.load_file('/etc/blah.ini') self.assertEqual(contents, 'blah')
def test_precise_ext4_root(self): lines = helpers.readResource('mountinfo_precise_ext4.txt').splitlines() expected = ('/dev/mapper/vg0-root', 'ext4', '/') self.assertEqual(expected, util.parse_mount_info('/', lines)) self.assertEqual(expected, util.parse_mount_info('/usr', lines)) self.assertEqual(expected, util.parse_mount_info('/usr/bin', lines)) expected = ('/dev/md0', 'ext4', '/boot') self.assertEqual(expected, util.parse_mount_info('/boot', lines)) self.assertEqual(expected, util.parse_mount_info('/boot/grub', lines)) expected = ('/dev/mapper/vg0-root', 'ext4', '/') self.assertEqual(expected, util.parse_mount_info('/home', lines)) self.assertEqual(expected, util.parse_mount_info('/home/me', lines)) expected = ('tmpfs', 'tmpfs', '/run') self.assertEqual(expected, util.parse_mount_info('/run', lines)) expected = ('none', 'tmpfs', '/run/lock') self.assertEqual(expected, util.parse_mount_info('/run/lock', lines))
def test_precise_ext4_root(self): lines = helpers.readResource('mountinfo_precise_ext4.txt').splitlines() expected = ('/dev/mapper/vg0-root', 'ext4', '/') self.assertEqual(expected, util.parse_mount_info('/', lines)) self.assertEqual(expected, util.parse_mount_info('/usr', lines)) self.assertEqual(expected, util.parse_mount_info('/usr/bin', lines)) expected = ('/dev/md0', 'ext4', '/boot') self.assertEqual(expected, util.parse_mount_info('/boot', lines)) self.assertEqual(expected, util.parse_mount_info('/boot/grub', lines)) expected = ('/dev/mapper/vg0-root', 'ext4', '/') self.assertEqual(expected, util.parse_mount_info('/home', lines)) self.assertEqual(expected, util.parse_mount_info('/home/me', lines)) expected = ('tmpfs', 'tmpfs', '/run') self.assertEqual(expected, util.parse_mount_info('/run', lines)) expected = ('none', 'tmpfs', '/run/lock') self.assertEqual(expected, util.parse_mount_info('/run/lock', lines))
def test_none_ds(self): new_root = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, new_root) self.replicateTestRoot('simple_ubuntu', new_root) cfg = { 'datasource_list': ['None'], 'cloud_init_modules': ['write-files'], 'system_info': {'paths': {'run_dir': new_root}} } ud = helpers.readResource('user_data.1.txt') cloud_cfg = util.yaml_dumps(cfg) util.ensure_dir(os.path.join(new_root, 'etc', 'cloud')) util.write_file(os.path.join(new_root, 'etc', 'cloud', 'cloud.cfg'), cloud_cfg) self._patchIn(new_root) # Now start verifying whats created initer = stages.Init() initer.read_cfg() initer.initialize() initer.fetch() initer.datasource.userdata_raw = ud initer.instancify() initer.update() initer.cloudify().run('consume_data', initer.consume_data, args=[PER_INSTANCE], freq=PER_INSTANCE) mirrors = initer.distro.get_option('package_mirrors') self.assertEqual(1, len(mirrors)) mirror = mirrors[0] self.assertEqual(mirror['arches'], ['i386', 'amd64', 'blah']) mods = stages.Modules(initer) (which_ran, failures) = mods.run_section('cloud_init_modules') self.assertTrue(len(failures) == 0) self.assertTrue(os.path.exists('/etc/blah.ini')) self.assertIn('write-files', which_ran) contents = util.load_file('/etc/blah.ini') self.assertEqual(contents, 'blah')
import os import yaml import cloudinit.net import cloudinit.net.network_state from cloudinit.tests.helpers import (CiTestCase, mock, readResource, dir2dict) SAMPLE_FREEBSD_IFCONFIG_OUT = readResource("netinfo/freebsd-ifconfig-output") V1 = """ config: - id: eno1 mac_address: 08:94:ef:51:ae:e0 mtu: 1470 name: eno1 subnets: - address: 172.20.80.129/25 type: static type: physical version: 1 """ class TestInterfacesByMac(CiTestCase): @mock.patch('cloudinit.subp.subp') @mock.patch('cloudinit.util.is_FreeBSD') def test_get_interfaces_by_mac(self, mock_is_FreeBSD, mock_subp): mock_is_FreeBSD.return_value = True mock_subp.return_value = (SAMPLE_FREEBSD_IFCONFIG_OUT, 0) a = cloudinit.net.get_interfaces_by_mac() assert a == { '52:54:00:50:b7:0d': 'vtnet0',
# This file is part of cloud-init. See LICENSE file for license information. """Tests netinfo module functions and classes.""" from copy import copy from cloudinit.netinfo import netdev_info, netdev_pformat, route_pformat from cloudinit.tests.helpers import CiTestCase, mock, readResource # Example ifconfig and route output SAMPLE_OLD_IFCONFIG_OUT = readResource("netinfo/old-ifconfig-output") SAMPLE_NEW_IFCONFIG_OUT = readResource("netinfo/new-ifconfig-output") SAMPLE_FREEBSD_IFCONFIG_OUT = readResource("netinfo/freebsd-ifconfig-output") SAMPLE_IPADDRSHOW_OUT = readResource("netinfo/sample-ipaddrshow-output") SAMPLE_ROUTE_OUT_V4 = readResource("netinfo/sample-route-output-v4") SAMPLE_ROUTE_OUT_V6 = readResource("netinfo/sample-route-output-v6") SAMPLE_IPROUTE_OUT_V4 = readResource("netinfo/sample-iproute-output-v4") SAMPLE_IPROUTE_OUT_V6 = readResource("netinfo/sample-iproute-output-v6") NETDEV_FORMATTED_OUT = readResource("netinfo/netdev-formatted-output") ROUTE_FORMATTED_OUT = readResource("netinfo/route-formatted-output") FREEBSD_NETDEV_OUT = readResource("netinfo/freebsd-netdev-formatted-output") class TestNetInfo(CiTestCase): maxDiff = None with_logs = True @mock.patch('cloudinit.netinfo.subp.which') @mock.patch('cloudinit.netinfo.subp.subp') def test_netdev_old_nettools_pformat(self, m_subp, m_which): """netdev_pformat properly rendering old nettools info."""