def test_netdev_info_iproute_down(self, m_subp, m_which, resource, is_json): """Test netdev_info with ip and down interfaces.""" m_subp.return_value = (readResource(resource), "") if not is_json: m_subp.side_effect = [ subp.ProcessExecutionError, (readResource(resource), ""), ] m_which.side_effect = lambda x: x if x == "ip" else None assert netdev_info(".") == { "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, }, }
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 assert netdev_info(".") == { "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, }, }
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, }, } assert (readResource("netinfo/netdev-formatted-output-down") == netdev_pformat())
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 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 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 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 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_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_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')
import json from copy import copy import pytest from cloudinit import subp from cloudinit.netinfo import ( _netdev_info_iproute_json, netdev_info, netdev_pformat, route_pformat, ) from tests.unittests.helpers import 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_IPADDRSHOW_JSON = readResource("netinfo/sample-ipaddrshow-json") 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: @mock.patch("cloudinit.netinfo.subp.which")
import os import cloudinit.net import cloudinit.net.network_state from cloudinit import safeyaml from tests.unittests.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',