summaryrefslogtreecommitdiff
path: root/tests/unittests/test_net_freebsd.py
blob: 466d472b84386b2a4affa664075f1003796c365b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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',
                     '80:00:73:63:5c:48': 're0.33',
                     '02:14:39:0e:25:00': 'bridge0',
                     '02:ff:60:8c:f3:72': 'vnet0:11'}


class TestFreeBSDRoundTrip(CiTestCase):

    def _render_and_read(self, network_config=None, state=None,
                         netplan_path=None, target=None):
        if target is None:
            target = self.tmp_dir()
            os.mkdir("%s/etc" % target)
            with open("%s/etc/rc.conf" % target, 'a') as fd:
                fd.write("# dummy rc.conf\n")
            with open("%s/etc/resolv.conf" % target, 'a') as fd:
                fd.write("# dummy resolv.conf\n")

        if network_config:
            ns = cloudinit.net.network_state.parse_net_config_data(
                network_config)
        elif state:
            ns = state
        else:
            raise ValueError("Expected data or state, got neither")

        renderer = cloudinit.net.freebsd.Renderer()
        renderer.render_network_state(ns, target=target)
        return dir2dict(target)

    @mock.patch('cloudinit.subp.subp')
    def test_render_output_has_yaml(self, mock_subp):

        entry = {
            'yaml': V1,
        }
        network_config = yaml.load(entry['yaml'])
        ns = cloudinit.net.network_state.parse_net_config_data(network_config)
        files = self._render_and_read(state=ns)
        assert files == {
            '/etc/resolv.conf': '# dummy resolv.conf\n',
            '/etc/rc.conf': (
                "# dummy rc.conf\n"
                "ifconfig_eno1="
                "'172.20.80.129 netmask 255.255.255.128 mtu 1470'\n")}