root / snf-cyclades-app / synnefo / logic / tests / networks.py @ a96e84cf
History | View | Annotate | Download (6.6 kB)
1 | 5962d9a6 | Christos Stavrakakis | # vim: set fileencoding=utf-8 :
|
---|---|---|---|
2 | 5962d9a6 | Christos Stavrakakis | # Copyright 2013 GRNET S.A. All rights reserved.
|
3 | 5962d9a6 | Christos Stavrakakis | #
|
4 | 5962d9a6 | Christos Stavrakakis | # Redistribution and use in source and binary forms, with or without
|
5 | 5962d9a6 | Christos Stavrakakis | # modification, are permitted provided that the following conditions
|
6 | 5962d9a6 | Christos Stavrakakis | # are met:
|
7 | 5962d9a6 | Christos Stavrakakis | #
|
8 | 5962d9a6 | Christos Stavrakakis | # 1. Redistributions of source code must retain the above copyright
|
9 | 5962d9a6 | Christos Stavrakakis | # notice, this list of conditions and the following disclaimer.
|
10 | 5962d9a6 | Christos Stavrakakis | #
|
11 | 5962d9a6 | Christos Stavrakakis | # 2. Redistributions in binary form must reproduce the above copyright
|
12 | 5962d9a6 | Christos Stavrakakis | # notice, this list of conditions and the following disclaimer in the
|
13 | 5962d9a6 | Christos Stavrakakis | # documentation and/or other materials provided with the distribution.
|
14 | 5962d9a6 | Christos Stavrakakis | #
|
15 | 5962d9a6 | Christos Stavrakakis | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
16 | 5962d9a6 | Christos Stavrakakis | # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
17 | 5962d9a6 | Christos Stavrakakis | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
18 | 5962d9a6 | Christos Stavrakakis | # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
19 | 5962d9a6 | Christos Stavrakakis | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
20 | 5962d9a6 | Christos Stavrakakis | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
21 | 5962d9a6 | Christos Stavrakakis | # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
22 | 5962d9a6 | Christos Stavrakakis | # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
23 | 5962d9a6 | Christos Stavrakakis | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
24 | 5962d9a6 | Christos Stavrakakis | # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
25 | 5962d9a6 | Christos Stavrakakis | # SUCH DAMAGE.
|
26 | 5962d9a6 | Christos Stavrakakis | #
|
27 | 5962d9a6 | Christos Stavrakakis | # The views and conclusions contained in the software and documentation are
|
28 | 5962d9a6 | Christos Stavrakakis | # those of the authors and should not be interpreted as representing official
|
29 | 5962d9a6 | Christos Stavrakakis | # policies, either expressed or implied, of GRNET S.A.
|
30 | 5962d9a6 | Christos Stavrakakis | |
31 | 5962d9a6 | Christos Stavrakakis | # Provides automated tests for logic module
|
32 | 5962d9a6 | Christos Stavrakakis | from django.test import TestCase |
33 | 5962d9a6 | Christos Stavrakakis | from snf_django.lib.api import faults |
34 | 5962d9a6 | Christos Stavrakakis | from snf_django.utils.testing import mocked_quotaholder |
35 | 5962d9a6 | Christos Stavrakakis | from synnefo.logic import networks |
36 | 5962d9a6 | Christos Stavrakakis | from synnefo.db import models_factory as mfactory |
37 | 5962d9a6 | Christos Stavrakakis | from synnefo.db.models import BridgePoolTable, MacPrefixPoolTable |
38 | 5962d9a6 | Christos Stavrakakis | from synnefo import settings |
39 | 5962d9a6 | Christos Stavrakakis | from copy import copy |
40 | 5962d9a6 | Christos Stavrakakis | |
41 | 5962d9a6 | Christos Stavrakakis | |
42 | 5962d9a6 | Christos Stavrakakis | #@patch("synnefo.logic.rapi_pool.GanetiRapiClient")
|
43 | 5962d9a6 | Christos Stavrakakis | class NetworkTest(TestCase): |
44 | 5962d9a6 | Christos Stavrakakis | def test_create(self): |
45 | 5962d9a6 | Christos Stavrakakis | kwargs = { |
46 | 5962d9a6 | Christos Stavrakakis | "name": "test", |
47 | a96e84cf | Christos Stavrakakis | "userid": "user", |
48 | 5962d9a6 | Christos Stavrakakis | "subnet": "192.168.20.0/24", |
49 | 5962d9a6 | Christos Stavrakakis | "flavor": "CUSTOM", |
50 | 5962d9a6 | Christos Stavrakakis | } |
51 | 5962d9a6 | Christos Stavrakakis | # wrong gateway
|
52 | 5962d9a6 | Christos Stavrakakis | kw = copy(kwargs) |
53 | 5962d9a6 | Christos Stavrakakis | kw["gateway"] = "192.168.3.1" |
54 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.BadRequest, networks.create, **kw)
|
55 | 5962d9a6 | Christos Stavrakakis | # wrong subnet
|
56 | 5962d9a6 | Christos Stavrakakis | kw = copy(kwargs) |
57 | 5962d9a6 | Christos Stavrakakis | kw["subnet"] = "192.168.2.0" |
58 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.OverLimit, networks.create, **kw)
|
59 | 5962d9a6 | Christos Stavrakakis | kw["subnet"] = "192.168.0.0/16" |
60 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.OverLimit, networks.create, **kw)
|
61 | 5962d9a6 | Christos Stavrakakis | kw["subnet"] = "192.168.0.3/24" |
62 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.BadRequest, networks.create, **kw)
|
63 | 5962d9a6 | Christos Stavrakakis | # wrong flavor
|
64 | 5962d9a6 | Christos Stavrakakis | kw = copy(kwargs) |
65 | 5962d9a6 | Christos Stavrakakis | kw["flavor"] = "UNKNOWN" |
66 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.BadRequest, networks.create, **kw)
|
67 | 5962d9a6 | Christos Stavrakakis | # Test create objet
|
68 | 5962d9a6 | Christos Stavrakakis | kwargs["gateway"] = "192.168.20.1" |
69 | 5962d9a6 | Christos Stavrakakis | kwargs["public"] = True |
70 | 5962d9a6 | Christos Stavrakakis | kwargs["dhcp"] = False |
71 | 5962d9a6 | Christos Stavrakakis | with mocked_quotaholder():
|
72 | 5962d9a6 | Christos Stavrakakis | net = networks.create(**kwargs) |
73 | 8764d304 | Christos Stavrakakis | self.assertEqual(net.subnet4, "192.168.20.0/24") |
74 | 8764d304 | Christos Stavrakakis | self.assertEqual(net.subnets.get(ipversion=4).gateway, "192.168.20.1") |
75 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.public, True) |
76 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.flavor, "CUSTOM") |
77 | 8764d304 | Christos Stavrakakis | self.assertEqual(net.subnets.get(ipversion=4).dhcp, False) |
78 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.action, "CREATE") |
79 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.state, "ACTIVE") |
80 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.name, "test") |
81 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.userid, "user") |
82 | 5962d9a6 | Christos Stavrakakis | |
83 | 5962d9a6 | Christos Stavrakakis | # Test for each for flavor type
|
84 | 5962d9a6 | Christos Stavrakakis | # MAC_FILTERED
|
85 | 5962d9a6 | Christos Stavrakakis | kwargs["flavor"] = "MAC_FILTERED" |
86 | 5962d9a6 | Christos Stavrakakis | # Test exception if no rules exists
|
87 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.ServiceUnavailable, networks.create, **kwargs)
|
88 | 5962d9a6 | Christos Stavrakakis | mfactory.MacPrefixPoolTableFactory(base="aa:bb:0")
|
89 | 5962d9a6 | Christos Stavrakakis | with mocked_quotaholder():
|
90 | 5962d9a6 | Christos Stavrakakis | net = networks.create(**kwargs) |
91 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.mode, "bridged") |
92 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.mac_prefix, "aa:bb:1") |
93 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.link, settings.DEFAULT_MAC_FILTERED_BRIDGE)
|
94 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.backend_tag, ["private-filtered"]) |
95 | 5962d9a6 | Christos Stavrakakis | pool = MacPrefixPoolTable.get_pool() |
96 | 5962d9a6 | Christos Stavrakakis | self.assertFalse(pool.is_available("aa:bb:1")) |
97 | 5962d9a6 | Christos Stavrakakis | |
98 | 5962d9a6 | Christos Stavrakakis | # PHYSICAL_VLAN
|
99 | 5962d9a6 | Christos Stavrakakis | kwargs["flavor"] = "PHYSICAL_VLAN" |
100 | 5962d9a6 | Christos Stavrakakis | # Test exception if no rules exists
|
101 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.ServiceUnavailable, networks.create, **kwargs)
|
102 | 5962d9a6 | Christos Stavrakakis | mfactory.BridgePoolTableFactory(base="prv")
|
103 | 5962d9a6 | Christos Stavrakakis | with mocked_quotaholder():
|
104 | 5962d9a6 | Christos Stavrakakis | net = networks.create(**kwargs) |
105 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.mode, "bridged") |
106 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
|
107 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.link, "prv1") |
108 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.backend_tag, ["physical-vlan"]) |
109 | 5962d9a6 | Christos Stavrakakis | pool = BridgePoolTable.get_pool() |
110 | 5962d9a6 | Christos Stavrakakis | self.assertFalse(pool.is_available(net.link))
|
111 | 5962d9a6 | Christos Stavrakakis | |
112 | 5962d9a6 | Christos Stavrakakis | # IP_LESS_ROUTED
|
113 | 5962d9a6 | Christos Stavrakakis | kwargs["flavor"] = "IP_LESS_ROUTED" |
114 | 5962d9a6 | Christos Stavrakakis | with mocked_quotaholder():
|
115 | 5962d9a6 | Christos Stavrakakis | net = networks.create(**kwargs) |
116 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.mode, "routed") |
117 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
|
118 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.link, settings.DEFAULT_ROUTING_TABLE)
|
119 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.backend_tag, ["ip-less-routed"]) |
120 | 5962d9a6 | Christos Stavrakakis | |
121 | 5962d9a6 | Christos Stavrakakis | # CUSTOM
|
122 | 5962d9a6 | Christos Stavrakakis | kwargs["flavor"] = "CUSTOM" |
123 | 5962d9a6 | Christos Stavrakakis | with mocked_quotaholder():
|
124 | 5962d9a6 | Christos Stavrakakis | net = networks.create(**kwargs) |
125 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.mode, "bridged") |
126 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
|
127 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.link, settings.DEFAULT_BRIDGE)
|
128 | 5962d9a6 | Christos Stavrakakis | self.assertEqual(net.backend_tag, [])
|
129 | 5962d9a6 | Christos Stavrakakis | |
130 | 5962d9a6 | Christos Stavrakakis | def test_create_network_ipv6(self): |
131 | 5962d9a6 | Christos Stavrakakis | kwargs = { |
132 | 5962d9a6 | Christos Stavrakakis | "name": "test", |
133 | a96e84cf | Christos Stavrakakis | "userid": "user", |
134 | 5962d9a6 | Christos Stavrakakis | "flavor": "CUSTOM", |
135 | 5962d9a6 | Christos Stavrakakis | "subnet6": "2001:648:2ffc:1112::/64", |
136 | 5962d9a6 | Christos Stavrakakis | } |
137 | 5962d9a6 | Christos Stavrakakis | # Wrong subnet
|
138 | 5962d9a6 | Christos Stavrakakis | kw = copy(kwargs) |
139 | 5962d9a6 | Christos Stavrakakis | kw["subnet6"] = "2001:64q:2ffc:1112::/64" |
140 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.BadRequest, networks.create, **kw)
|
141 | 5962d9a6 | Christos Stavrakakis | # Wrong gateway
|
142 | 5962d9a6 | Christos Stavrakakis | kw = copy(kwargs) |
143 | 5962d9a6 | Christos Stavrakakis | kw["gateway6"] = "2001:64q:2ffc:1119::1" |
144 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.BadRequest, networks.create, **kw)
|
145 | 5962d9a6 | Christos Stavrakakis | # floating_ip_pools can not be ipv6 only
|
146 | 5962d9a6 | Christos Stavrakakis | kw = copy(kwargs) |
147 | 5962d9a6 | Christos Stavrakakis | kw["floating_ip_pool"] = True |
148 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(faults.BadRequest, networks.create, **kw)
|
149 | 5962d9a6 | Christos Stavrakakis | kwargs["gateway6"] = "2001:648:2ffc:1112::1" |
150 | 5962d9a6 | Christos Stavrakakis | with mocked_quotaholder():
|
151 | 5962d9a6 | Christos Stavrakakis | net = networks.create(**kwargs) |
152 | 8764d304 | Christos Stavrakakis | subnet6 = net.subnets.get(ipversion=6)
|
153 | 8764d304 | Christos Stavrakakis | self.assertEqual(subnet6.cidr, "2001:648:2ffc:1112::/64") |
154 | 8764d304 | Christos Stavrakakis | self.assertEqual(subnet6.gateway, "2001:648:2ffc:1112::1") |
155 | 5962d9a6 | Christos Stavrakakis | self.assertRaises(Exception, net.get_pool) |