コード例 #1
0
ファイル: test_netinfo.py プロジェクト: gadekalp/cloud-init
 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("."))
コード例 #2
0
 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)
コード例 #3
0
ファイル: test_netinfo.py プロジェクト: gadekalp/cloud-init
 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("."))
コード例 #4
0
ファイル: test_netinfo.py プロジェクト: gadekalp/cloud-init
 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())
コード例 #5
0
 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))
コード例 #6
0
 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)
コード例 #7
0
ファイル: test_util.py プロジェクト: cloud-init/cloud-init
 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)
コード例 #8
0
ファイル: test_util.py プロジェクト: cloud-init/cloud-init
 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)
コード例 #9
0
ファイル: test_util.py プロジェクト: sld880311/cloud-init
 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)
コード例 #10
0
 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)
コード例 #11
0
ファイル: test_util.py プロジェクト: sld880311/cloud-init
 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)
コード例 #12
0
ファイル: test_util.py プロジェクト: cloud-init/cloud-init
 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)
コード例 #13
0
ファイル: test_util.py プロジェクト: sld880311/cloud-init
    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))
コード例 #14
0
ファイル: test_util.py プロジェクト: cloud-init/cloud-init
    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))
コード例 #15
0
    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')
コード例 #16
0
ファイル: test_util.py プロジェクト: sld880311/cloud-init
    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))
コード例 #17
0
ファイル: test_util.py プロジェクト: cloud-init/cloud-init
    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))
コード例 #18
0
    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')
コード例 #19
0
ファイル: test_net_freebsd.py プロジェクト: vultr/cloud-init
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',
コード例 #20
0
ファイル: test_netinfo.py プロジェクト: gadekalp/cloud-init
# 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."""