Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-gtools / test / synnefo.ganeti_unittest.py @ 65462ca9

History | View | Annotate | Download (4.4 kB)

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

42 45ebfd48 Vangelis Koukis
Provides unit tests for the code implementing
43 45ebfd48 Vangelis Koukis
the Ganeti notification daemon and the Ganeti hook in Synnefo.
44 45ebfd48 Vangelis Koukis

45 45ebfd48 Vangelis Koukis
"""
46 45ebfd48 Vangelis Koukis
47 45ebfd48 Vangelis Koukis
# This assumes a test-specific configuration file
48 45ebfd48 Vangelis Koukis
# is in the same directory as the unit test script
49 45ebfd48 Vangelis Koukis
import os
50 45ebfd48 Vangelis Koukis
os.environ["SYNNEFO_CONFIG_DIR"] = os.path.dirname(__file__)
51 45ebfd48 Vangelis Koukis
52 ff55193e Vangelis Koukis
import logging
53 45ebfd48 Vangelis Koukis
import unittest
54 45ebfd48 Vangelis Koukis
55 45ebfd48 Vangelis Koukis
from synnefo.ganeti.hook import ganeti_net_status
56 06a0e098 Vassilios Karakoidas
57 06a0e098 Vassilios Karakoidas
58 45ebfd48 Vangelis Koukis
class GanetiHookTestCase(unittest.TestCase):
59 ff55193e Vangelis Koukis
60 ff55193e Vangelis Koukis
    def setUp(self):
61 ff55193e Vangelis Koukis
        # Example Ganeti environment, based on from
62 ff55193e Vangelis Koukis
        # http://docs.ganeti.org/ganeti/master/html/hooks.html?highlight=hooks#examples
63 ff55193e Vangelis Koukis
        self.env = {
64 ff55193e Vangelis Koukis
            'GANETI_CLUSTER': 'cluster1.example.com',
65 ff55193e Vangelis Koukis
            'GANETI_DATA_DIR': '/var/lib/ganeti',
66 ff55193e Vangelis Koukis
            'GANETI_FORCE': 'False',
67 ff55193e Vangelis Koukis
            'GANETI_HOOKS_PATH': 'instance-start',
68 ff55193e Vangelis Koukis
            'GANETI_HOOKS_PHASE': 'post',
69 ff55193e Vangelis Koukis
            'GANETI_HOOKS_VERSION': '2',
70 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_DISK0_MODE': 'rw',
71 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_DISK0_SIZE': '128',
72 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_DISK_COUNT': '1',
73 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_DISK_TEMPLATE': 'drbd',
74 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_MEMORY': '128',
75 eab0602e Vangelis Koukis
            'GANETI_INSTANCE_TAGS': 'tag1 synnefo:network:0:protected tag2',
76 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_NAME': 'instance2.example.com',
77 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_NIC0_BRIDGE': 'xen-br0',
78 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_NIC0_IP': '147.102.3.1',
79 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_NIC0_MAC': '00:01:de:ad:be:ef',
80 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_NIC1_MAC': '00:01:de:ad:ba:be',
81 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_NIC2_MAC': '00:01:02:03:04:05',
82 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_NIC2_IP': '147.102.3.98',
83 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_NIC_COUNT': '3',
84 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_OS_TYPE': 'debootstrap',
85 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_PRIMARY': 'node3.example.com',
86 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_SECONDARY': 'node5.example.com',
87 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_STATUS': 'down',
88 ff55193e Vangelis Koukis
            'GANETI_INSTANCE_VCPUS': '1',
89 ff55193e Vangelis Koukis
            'GANETI_MASTER': 'node1.example.com',
90 ff55193e Vangelis Koukis
            'GANETI_OBJECT_TYPE': 'INSTANCE',
91 ff55193e Vangelis Koukis
            'GANETI_OP_CODE': 'OP_INSTANCE_STARTUP',
92 ff55193e Vangelis Koukis
            'GANETI_OP_TARGET': 'instance2.example.com'
93 ff55193e Vangelis Koukis
        }
94 ff55193e Vangelis Koukis
95 ff55193e Vangelis Koukis
    def test_ganeti_net_status(self):
96 ff55193e Vangelis Koukis
        e = self.env
97 ff55193e Vangelis Koukis
        expected = {
98 ff55193e Vangelis Koukis
            'type': 'ganeti-net-status',
99 ff55193e Vangelis Koukis
            'instance': 'instance2.example.com',
100 ff55193e Vangelis Koukis
            'nics': [
101 746c6bf4 Vangelis Koukis
                {
102 746c6bf4 Vangelis Koukis
                    'ip': '147.102.3.1', 'mac': '00:01:de:ad:be:ef',
103 eab0602e Vangelis Koukis
                    'link': 'xen-br0', 'ipv6': '2001:db8::201:deff:fead:beef',
104 eab0602e Vangelis Koukis
                    'firewall': 'protected'
105 746c6bf4 Vangelis Koukis
                },
106 ff55193e Vangelis Koukis
                { 'mac': '00:01:de:ad:ba:be' },
107 ff55193e Vangelis Koukis
                { 'ip': '147.102.3.98', 'mac': '00:01:02:03:04:05' }
108 ff55193e Vangelis Koukis
            ]
109 ff55193e Vangelis Koukis
        }
110 ff55193e Vangelis Koukis
111 ff55193e Vangelis Koukis
        self.assertEqual(ganeti_net_status(logging, e), expected)
112 45ebfd48 Vangelis Koukis
113 45ebfd48 Vangelis Koukis
114 45ebfd48 Vangelis Koukis
if __name__ == '__main__':
115 45ebfd48 Vangelis Koukis
    unittest.main()