Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / logic / test / servers.py @ 5962d9a6

History | View | Annotate | Download (4.2 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.utils.testing import mocked_quotaholder
34
from synnefo.logic import servers
35
from synnefo.db import models_factory as mfactory
36
from mock import patch
37

    
38

    
39
@patch("synnefo.logic.rapi_pool.GanetiRapiClient")
40
class ServerTest(TestCase):
41
    def test_connect_network(self, mrapi):
42
        # Common connect
43
        net = mfactory.NetworkFactory(subnet="192.168.2.0/24",
44
                                      gateway="192.168.2.1",
45
                                      state="ACTIVE",
46
                                      dhcp=True,
47
                                      flavor="CUSTOM")
48
        vm = mfactory.VirtualMachineFactory()
49
        mfactory.BackendNetworkFactory(network=net, backend=vm.backend)
50
        mrapi().ModifyInstance.return_value = 42
51
        servers.connect(vm, net)
52
        pool = net.get_pool(with_lock=False)
53
        self.assertFalse(pool.is_available("192.168.2.2"))
54
        args, kwargs = mrapi().ModifyInstance.call_args
55
        nics = kwargs["nics"][0]
56
        self.assertEqual(args[0], vm.backend_vm_id)
57
        self.assertEqual(nics[0], "add")
58
        self.assertEqual(nics[1]["ip"], "192.168.2.2")
59
        self.assertEqual(nics[1]["network"], net.backend_id)
60

    
61
        # No dhcp
62
        vm = mfactory.VirtualMachineFactory()
63
        net = mfactory.NetworkFactory(subnet="192.168.2.0/24",
64
                                      gateway="192.168.2.1",
65
                                      state="ACTIVE",
66
                                      dhcp=False)
67
        mfactory.BackendNetworkFactory(network=net, backend=vm.backend)
68
        servers.connect(vm, net)
69
        pool = net.get_pool(with_lock=False)
70
        self.assertTrue(pool.is_available("192.168.2.2"))
71
        args, kwargs = mrapi().ModifyInstance.call_args
72
        nics = kwargs["nics"][0]
73
        self.assertEqual(args[0], vm.backend_vm_id)
74
        self.assertEqual(nics[0], "add")
75
        self.assertEqual(nics[1]["ip"], None)
76
        self.assertEqual(nics[1]["network"], net.backend_id)
77

    
78
        # Test connect to IPv6 only network
79
        vm = mfactory.VirtualMachineFactory()
80
        net = mfactory.NetworkFactory(subnet6="2000::/64",
81
                                      state="ACTIVE",
82
                                      gateway="2000::1")
83
        mfactory.BackendNetworkFactory(network=net, backend=vm.backend)
84
        servers.connect(vm, net)
85
        args, kwargs = mrapi().ModifyInstance.call_args
86
        nics = kwargs["nics"][0]
87
        self.assertEqual(args[0], vm.backend_vm_id)
88
        self.assertEqual(nics[0], "add")
89
        self.assertEqual(nics[1]["ip"], None)
90
        self.assertEqual(nics[1]["network"], net.backend_id)