summaryrefslogtreecommitdiff
path: root/cloudinit/tests/test_netinfo.py
blob: 7dea2e411f5eed505504867dbd8ffbad085bbab1 (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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# This file is part of cloud-init. See LICENSE file for license information.

"""Tests netinfo module functions and classes."""

from cloudinit.netinfo import netdev_pformat, route_pformat
from cloudinit.tests.helpers import CiTestCase, mock


# Example ifconfig and route output
SAMPLE_IFCONFIG_OUT = """\
enp0s25   Link encap:Ethernet  HWaddr 50:7b:9d:2c:af:91
          inet addr:192.168.2.18  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::8107:2b92:867e:f8a6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8106427 errors:55 dropped:0 overruns:0 frame:37
          TX packets:9339739 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4953721719 (4.9 GB)  TX bytes:7731890194 (7.7 GB)
          Interrupt:20 Memory:e1200000-e1220000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:579230851 errors:0 dropped:0 overruns:0 frame:0
          TX packets:579230851 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
"""

SAMPLE_ROUTE_OUT = '\n'.join([
    '0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0'
    ' enp0s25',
    '0.0.0.0         192.168.2.1     0.0.0.0         UG        0 0          0'
    ' wlp3s0',
    '192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0'
    ' enp0s25'])


NETDEV_FORMATTED_OUT = '\n'.join([
    '+++++++++++++++++++++++++++++++++++++++Net device info+++++++++++++++++++'
    '++++++++++++++++++++',
    '+---------+------+------------------------------+---------------+-------+'
    '-------------------+',
    '|  Device |  Up  |           Address            |      Mask     | Scope |'
    '     Hw-Address    |',
    '+---------+------+------------------------------+---------------+-------+'
    '-------------------+',
    '| enp0s25 | True |         192.168.2.18         | 255.255.255.0 |   .   |'
    ' 50:7b:9d:2c:af:91 |',
    '| enp0s25 | True | fe80::8107:2b92:867e:f8a6/64 |       .       |  link |'
    ' 50:7b:9d:2c:af:91 |',
    '|    lo   | True |          127.0.0.1           |   255.0.0.0   |   .   |'
    '         .         |',
    '|    lo   | True |           ::1/128            |       .       |  host |'
    '         .         |',
    '+---------+------+------------------------------+---------------+-------+'
    '-------------------+'])

ROUTE_FORMATTED_OUT = '\n'.join([
    '+++++++++++++++++++++++++++++Route IPv4 info++++++++++++++++++++++++++'
    '+++',
    '+-------+-------------+-------------+---------------+-----------+-----'
    '--+',
    '| Route | Destination |   Gateway   |    Genmask    | Interface | Flags'
    ' |',
    '+-------+-------------+-------------+---------------+-----------+'
    '-------+',
    '|   0   |   0.0.0.0   | 192.168.2.1 |    0.0.0.0    |   wlp3s0  |'
    '   UG  |',
    '|   1   | 192.168.2.0 |   0.0.0.0   | 255.255.255.0 |  enp0s25  |'
    '   U   |',
    '+-------+-------------+-------------+---------------+-----------+'
    '-------+',
    '++++++++++++++++++++++++++++++++++++++++Route IPv6 info++++++++++'
    '++++++++++++++++++++++++++++++',
    '+-------+-------------+-------------+---------------+---------------+'
    '-----------------+-------+',
    '| Route |    Proto    |    Recv-Q   |     Send-Q    | Local Address |'
    ' Foreign Address | State |',
    '+-------+-------------+-------------+---------------+---------------+'
    '-----------------+-------+',
    '|   0   |   0.0.0.0   | 192.168.2.1 |    0.0.0.0    |       UG      |'
    '        0        |   0   |',
    '|   1   | 192.168.2.0 |   0.0.0.0   | 255.255.255.0 |       U       |'
    '        0        |   0   |',
    '+-------+-------------+-------------+---------------+---------------+'
    '-----------------+-------+'])


class TestNetInfo(CiTestCase):

    maxDiff = None

    @mock.patch('cloudinit.netinfo.util.subp')
    def test_netdev_pformat(self, m_subp):
        """netdev_pformat properly rendering network device information."""
        m_subp.return_value = (SAMPLE_IFCONFIG_OUT, '')
        content = netdev_pformat()
        self.assertEqual(NETDEV_FORMATTED_OUT, content)

    @mock.patch('cloudinit.netinfo.util.subp')
    def test_route_pformat(self, m_subp):
        """netdev_pformat properly rendering network device information."""
        m_subp.return_value = (SAMPLE_ROUTE_OUT, '')
        content = route_pformat()
        self.assertEqual(ROUTE_FORMATTED_OUT, content)