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() |