Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / tests / networks.py @ 6e9255ab

History | View | Annotate | Download (6.5 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 5962d9a6 Christos Stavrakakis
            "user_id": "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 5962d9a6 Christos Stavrakakis
        self.assertEqual(net.subnet, "192.168.20.0/24")
74 5962d9a6 Christos Stavrakakis
        self.assertEqual(net.gateway, "192.168.20.1")
75 5962d9a6 Christos Stavrakakis
        self.assertEqual(net.public, True)
76 5962d9a6 Christos Stavrakakis
        self.assertEqual(net.flavor, "CUSTOM")
77 5962d9a6 Christos Stavrakakis
        self.assertEqual(net.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 5962d9a6 Christos Stavrakakis
            "user_id": "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 5962d9a6 Christos Stavrakakis
        self.assertEqual(net.subnet6, "2001:648:2ffc:1112::/64")
153 5962d9a6 Christos Stavrakakis
        self.assertEqual(net.gateway6, "2001:648:2ffc:1112::1")
154 5962d9a6 Christos Stavrakakis
        self.assertRaises(Exception, net.get_pool)