Statistics
| Branch: | Tag: | Revision:

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

History | View | Annotate | Download (4.7 kB)

1
# vim: set fileencoding=utf-8 :
2
# Copyright 2013 GRNET S.A. All rights reserved.
3
#
4
# Redistribution and use in source and binary forms, with or without
5
# modification, are permitted provided that the following conditions
6
# are met:
7
#
8
#   1. Redistributions of source code must retain the above copyright
9
#      notice, this list of conditions and the following disclaimer.
10
#
11
#  2. Redistributions in binary form must reproduce the above copyright
12
#     notice, this list of conditions and the following disclaimer in the
13
#     documentation and/or other materials provided with the distribution.
14
#
15
# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
16
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18
# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
19
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25
# SUCH DAMAGE.
26
#
27
# The views and conclusions contained in the software and documentation are
28
# those of the authors and should not be interpreted as representing official
29
# policies, either expressed or implied, of GRNET S.A.
30

    
31
# Provides automated tests for logic module
32
from django.test import TestCase
33
from snf_django.lib.api import faults
34
from snf_django.utils.testing import mocked_quotaholder
35
from synnefo.logic import networks
36
from synnefo.db import models_factory as mfactory
37
from synnefo.db.models import BridgePoolTable, MacPrefixPoolTable
38
from synnefo import settings
39
from copy import copy
40

    
41

    
42
#@patch("synnefo.logic.rapi_pool.GanetiRapiClient")
43
class NetworkTest(TestCase):
44
    def test_create(self):
45
        kwargs = {
46
            "name": "test",
47
            "userid": "user",
48
            "flavor": "CUSTOM",
49
        }
50
        # wrong flavor
51
        kw = copy(kwargs)
52
        kw["flavor"] = "UNKNOWN"
53
        self.assertRaises(faults.BadRequest, networks.create, **kw)
54
        # Test create objet
55
        kwargs["public"] = True
56
        with mocked_quotaholder():
57
            net = networks.create(**kwargs)
58
        self.assertEqual(net.public, True)
59
        self.assertEqual(net.flavor, "CUSTOM")
60
        self.assertEqual(net.action, "CREATE")
61
        self.assertEqual(net.state, "ACTIVE")
62
        self.assertEqual(net.name, "test")
63
        self.assertEqual(net.userid, "user")
64

    
65
        # Test for each for flavor type
66
        # MAC_FILTERED
67
        kwargs["flavor"] = "MAC_FILTERED"
68
        # Test exception if no rules exists
69
        self.assertRaises(faults.ServiceUnavailable, networks.create, **kwargs)
70
        mfactory.MacPrefixPoolTableFactory(base="aa:bb:0")
71
        with mocked_quotaholder():
72
                net = networks.create(**kwargs)
73
        self.assertEqual(net.mode, "bridged")
74
        self.assertEqual(net.mac_prefix, "aa:bb:1")
75
        self.assertEqual(net.link, settings.DEFAULT_MAC_FILTERED_BRIDGE)
76
        self.assertEqual(net.backend_tag, ["private-filtered"])
77
        pool = MacPrefixPoolTable.get_pool()
78
        self.assertFalse(pool.is_available("aa:bb:1"))
79

    
80
        # PHYSICAL_VLAN
81
        kwargs["flavor"] = "PHYSICAL_VLAN"
82
        # Test exception if no rules exists
83
        self.assertRaises(faults.ServiceUnavailable, networks.create, **kwargs)
84
        mfactory.BridgePoolTableFactory(base="prv")
85
        with mocked_quotaholder():
86
            net = networks.create(**kwargs)
87
        self.assertEqual(net.mode, "bridged")
88
        self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
89
        self.assertEqual(net.link, "prv1")
90
        self.assertEqual(net.backend_tag, ["physical-vlan"])
91
        pool = BridgePoolTable.get_pool()
92
        self.assertFalse(pool.is_available(net.link))
93

    
94
        # IP_LESS_ROUTED
95
        kwargs["flavor"] = "IP_LESS_ROUTED"
96
        with mocked_quotaholder():
97
            net = networks.create(**kwargs)
98
        self.assertEqual(net.mode, "routed")
99
        self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
100
        self.assertEqual(net.link, settings.DEFAULT_ROUTING_TABLE)
101
        self.assertEqual(net.backend_tag, ["ip-less-routed"])
102

    
103
        # CUSTOM
104
        kwargs["flavor"] = "CUSTOM"
105
        with mocked_quotaholder():
106
            net = networks.create(**kwargs)
107
        self.assertEqual(net.mode, "bridged")
108
        self.assertEqual(net.mac_prefix, settings.DEFAULT_MAC_PREFIX)
109
        self.assertEqual(net.link, settings.DEFAULT_BRIDGE)
110
        self.assertEqual(net.backend_tag, [])