Fixes unit tests
[apex.git] / tests / test_apex_ip_utils.py
1 ##############################################################################
2 # Copyright (c) 2016 Dan Radez (Red Hat)
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9
10 import re
11
12 from apex.ip_utils import IPUtilsException
13 from apex.ip_utils import get_interface
14 from apex.ip_utils import find_gateway
15 from apex.ip_utils import get_ip
16 from apex.ip_utils import get_ip_range
17
18 from nose.tools import assert_equal
19 from nose.tools import assert_raises
20 from nose.tools import assert_is_instance
21 from nose.tools import assert_regexp_matches
22
23 from ipaddress import IPv4Address
24 from ipaddress import IPv6Address
25 from ipaddress import ip_network
26
27
28 ip4_pattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
29 ip4_range_pattern = re.compile('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3},\d{1,'
30                                '3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
31
32
33 def get_default_gateway_linux():
34     """Read the default gateway directly from /proc."""
35     with open("/proc/net/route") as fh:
36         for line in fh:
37             fields = line.strip().split()
38             if fields[2] not in ('00000000', 'Gateway'):
39                 return fields[0]
40
41
42 class TestIpUtils(object):
43     @classmethod
44     def setup_class(klass):
45         """This method is run once for each class before any tests are run"""
46         klass.iface_name = get_default_gateway_linux()
47         iface = get_interface(klass.iface_name)
48         klass.iface = iface
49
50     @classmethod
51     def teardown_class(klass):
52         """This method is run once for each class _after_ all tests are run"""
53
54     def setUp(self):
55         """This method is run once before _each_ test method is executed"""
56
57     def teardown(self):
58         """This method is run once after _each_ test method is executed"""
59
60     def test_get_interface(self):
61         assert_equal(get_interface(''), None)
62         assert_equal(get_interface('notreal'), None)
63         assert_is_instance(get_interface(
64                                self.iface_name,
65                                address_family=4), IPv4Address)
66 #        assert_is_instance(get_interface(
67 #                               self.iface_name,
68 #                               address_family=6), IPv6Address)
69         assert_raises(IPUtilsException,
70                       get_interface, self.iface_name, 0)
71
72     def test_find_gateway(self):
73         assert_is_instance(find_gateway(self.iface), str)
74         iface_virbr0 = get_interface('virbr0')
75         assert_equal(find_gateway(iface_virbr0), None)
76
77     def test_get_ip(self):
78         assert_equal(get_ip(1, cidr="10.10.10.0/24"), "0")
79         assert_regexp_matches(get_ip(1, interface=self.iface), ip4_pattern)
80         assert_raises(IPUtilsException, get_ip, 1)
81
82     def test_get_ip_range_raises(self):
83         assert_raises(IPUtilsException, get_ip_range)
84         assert_raises(IPUtilsException, get_ip_range, interface=self.iface)
85
86     def test_get_ip_range_with_interface(self):
87         assert_regexp_matches(get_ip_range(interface=self.iface,
88                                            start_offset=1, end_offset=20),
89                               ip4_range_pattern)
90         assert_regexp_matches(get_ip_range(interface=self.iface,
91                                            start_offset=1, count=10),
92                               ip4_range_pattern)
93         assert_regexp_matches(get_ip_range(interface=self.iface, end_offset=20,
94                                            count=10), ip4_range_pattern)
95
96     @staticmethod
97     def test_get_ip_range_with_cidr():
98         cidr = ip_network('10.10.10.0/24')
99         assert_raises(IPUtilsException, get_ip_range, cidr=cidr)
100         assert_regexp_matches(get_ip_range(cidr=cidr, start_offset=1,
101                                            end_offset=20), ip4_pattern)
102         assert_regexp_matches(get_ip_range(cidr=cidr, start_offset=1,
103                                            count=10), ip4_pattern)
104         assert_regexp_matches(get_ip_range(cidr=cidr, end_offset=20,
105                                            count=10), ip4_pattern)