#!/usr/bin/python # -*- coding: utf8 -*- from unittest import TestCase from checkdesc.gen_desc import IpAddrParser, removeLocalAddresses, RouteParser from checkdesc.parser import Address from StringIO import StringIO IPADDR_ETH0_LO = \ """1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:15:c5:aa:35:38 brd ff:ff:ff:ff:ff:ff inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0 inet 192.168.1.10/26 scope global eth0 inet6 fe80::215:c5ff:feaa:3538/64 scope link valid_lft forever preferred_lft forever 3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:18:de:1e:c0:06 brd ff:ff:ff:ff:ff:ff""" ROUTES_ETH0_LO = \ """Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 192.168.33.128 0.0.0.0 255.255.255.128 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0 0.0.0.0 192.168.33.129 0.0.0.0 UG 0 0 0 eth0 """ IPADDR_VENET0 = \ """1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 3: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,10000> mtu 1500 qdisc noqueue link/void inet 127.0.0.1/32 scope host venet0 inet 192.168.33.243/32 scope global venet0:0""" MULTIPLE_ROUTES = \ """ Destination Gateway Genmask Flags Metric Ref Use Iface 212.176.255.16 0.0.0.0 255.255.255.240 U 0 0 0 eth2 192.168.210.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 10.51.0.0 10.1.200.2 255.255.0.0 UG 0 0 0 eth0 10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 10.6.0.0 10.1.200.253 255.255.0.0 UG 0 0 0 eth0 0.0.0.0 212.176.255.18 0.0.0.0 UG 0 0 0 eth2 """ class IpAddr(TestCase): def testETH0(self): eth0 = { 'name': "eth0", 'addr': [Address('192.168.0.2/24', scope='global'), Address('192.168.1.10/26', scope='global')], 'link': 'ether', } lo = { 'name': "lo", 'addr': [Address("127.0.0.1/8", scope='host')], 'link': 'loopback', } parser = IpAddrParser(StringIO(IPADDR_ETH0_LO)) interfaces = parser.interfaces self.assertEqual(interfaces, [lo, eth0]) interfaces = self.filterInterfaces(parser.interfaces) self.assertEqual(interfaces, [eth0]) def filterInterfaces(self, parser_interfaces): interfaces = [] for interface in parser_interfaces: removeLocalAddresses(interface) if not interface['addr']: continue interfaces.append(interface) return interfaces def testVENET0(self): lo = { 'name': "lo", 'addr': [Address('127.0.0.1/8', scope='host')], 'link': 'loopback', } venet0 = { 'name': 'venet0', 'addr': [ Address('127.0.0.1/32', scope='host'), Address('192.168.33.243/32', scope='global')], 'link': 'void', } venet0_skip = { 'name': 'venet0', 'addr': [Address('192.168.33.243/32', scope='global')], 'link': 'void', } parser = IpAddrParser(StringIO(IPADDR_VENET0)) interfaces = parser.interfaces self.assertEqual(interfaces, [lo, venet0]) interfaces = self.filterInterfaces(parser.interfaces) self.assertEqual(interfaces, [venet0_skip]) class Route(TestCase): def testRouteParser(self): parser = RouteParser(StringIO(ROUTES_ETH0_LO)) self.assertEqual(parser.routes, [ {'dest': '192.168.33.128', 'genmask': '255.255.255.128', 'interface': 'eth0', 'gateway': '0.0.0.0'}, {'dest': '169.254.0.0', 'genmask': '255.255.0.0', 'interface': 'eth0', 'gateway': '0.0.0.0'}, {'dest': '0.0.0.0', 'genmask': '0.0.0.0', 'interface': 'eth0', 'gateway': '192.168.33.129'}, ]) def testMultiples(self): parser = RouteParser(StringIO(MULTIPLE_ROUTES)) self.assertEqual(parser.routes, [ {'dest': '212.176.255.16', 'genmask': '255.255.255.240', 'interface': 'eth2', 'gateway': '0.0.0.0'}, {'dest': '192.168.210.0', 'genmask': '255.255.255.0', 'interface': 'eth1', 'gateway': '0.0.0.0'}, {'dest': '10.51.0.0', 'genmask': '255.255.0.0', 'interface': 'eth0', 'gateway': '10.1.200.2'}, {'dest': '10.1.0.0', 'genmask': '255.255.0.0', 'interface': 'eth0', 'gateway': '0.0.0.0'}, {'dest': '10.6.0.0', 'genmask': '255.255.0.0', 'interface': 'eth0', 'gateway': '10.1.200.253'}, {'dest': '0.0.0.0', 'genmask': '0.0.0.0', 'interface': 'eth2', 'gateway': '212.176.255.18'}, ]) if __name__ == "__main__": from unittest import main main()