Revision 66eba2cf snf-tools/synnefo_tools/burnin.py
b/snf-tools/synnefo_tools/burnin.py | ||
---|---|---|
71 | 71 |
import unittest |
72 | 72 |
|
73 | 73 |
|
74 |
class BurninTestResult(unittest.TextTestResult): |
|
75 |
def addSuccess(self, test): |
|
76 |
super(BurninTestResult, self).addSuccess(test) |
|
77 |
if self.showAll: |
|
78 |
if test.result_dict: |
|
79 |
run_details = test.result_dict |
|
80 |
|
|
81 |
self.stream.write("\n") |
|
82 |
for i in run_details: |
|
83 |
self.stream.write("%s : %s \n" % (i, run_details[i])) |
|
84 |
self.stream.write("\n") |
|
85 |
|
|
86 |
elif self.dots: |
|
87 |
self.stream.write('.') |
|
88 |
self.stream.flush() |
|
89 |
|
|
90 |
def addError(self, test, err): |
|
91 |
super(BurninTestResult, self).addError(test, err) |
|
92 |
if self.showAll: |
|
93 |
self.stream.writeln("ERROR") |
|
94 |
|
|
95 |
run_details = test.result_dict |
|
96 |
|
|
97 |
self.stream.write("\n") |
|
98 |
for i in run_details: |
|
99 |
self.stream.write("%s : %s \n" % (i, run_details[i])) |
|
100 |
self.stream.write("\n") |
|
101 |
|
|
102 |
elif self.dots: |
|
103 |
self.stream.write('E') |
|
104 |
self.stream.flush() |
|
105 |
|
|
106 |
def addFailure(self, test, err): |
|
107 |
super(BurninTestResult, self).addFailure(test, err) |
|
108 |
if self.showAll: |
|
109 |
self.stream.writeln("FAIL") |
|
110 |
|
|
111 |
run_details = test.result_dict |
|
112 |
|
|
113 |
self.stream.write("\n") |
|
114 |
for i in run_details: |
|
115 |
self.stream.write("%s : %s \n" % (i, run_details[i])) |
|
116 |
self.stream.write("\n") |
|
117 |
|
|
118 |
elif self.dots: |
|
119 |
self.stream.write('F') |
|
120 |
self.stream.flush() |
|
121 |
|
|
122 |
|
|
123 |
|
|
74 | 124 |
API = None |
75 | 125 |
TOKEN = None |
76 | 126 |
DEFAULT_API = "https://cyclades.okeanos.grnet.gr/api/v1.1" |
... | ... | |
125 | 175 |
|
126 | 176 |
|
127 | 177 |
class UnauthorizedTestCase(unittest.TestCase): |
178 |
|
|
179 |
@classmethod |
|
180 |
def setUpClass(cls): |
|
181 |
cls.result_dict = dict() |
|
182 |
|
|
128 | 183 |
def test_unauthorized_access(self): |
129 | 184 |
"""Test access without a valid token fails""" |
130 | 185 |
log.info("Authentication test") |
... | ... | |
148 | 203 |
cls.plankton = ImageClient(PLANKTON, TOKEN) |
149 | 204 |
cls.images = cls.plankton.list_public() |
150 | 205 |
cls.dimages = cls.plankton.list_public(detail=True) |
206 |
cls.result_dict = dict() |
|
151 | 207 |
|
152 | 208 |
def test_001_list_images(self): |
153 | 209 |
"""Test image list actually returns images""" |
... | ... | |
188 | 244 |
cls.client = ComputeClient(API, TOKEN) |
189 | 245 |
cls.flavors = cls.client.list_flavors() |
190 | 246 |
cls.dflavors = cls.client.list_flavors(detail=True) |
247 |
cls.result_dict = dict() |
|
191 | 248 |
|
192 | 249 |
def test_001_list_flavors(self): |
193 | 250 |
"""Test flavor list actually returns flavors""" |
... | ... | |
230 | 287 |
cls.client = ComputeClient(API, TOKEN) |
231 | 288 |
cls.servers = cls.client.list_servers() |
232 | 289 |
cls.dservers = cls.client.list_servers(detail=True) |
290 |
cls.result_dict = dict() |
|
233 | 291 |
|
234 | 292 |
# def test_001_list_servers(self): |
235 | 293 |
# """Test server list actually returns servers""" |
... | ... | |
256 | 314 |
log.info("Spawning server for image `%s'" %cls.imagename) |
257 | 315 |
cls.client = ComputeClient(API, TOKEN) |
258 | 316 |
cls.cyclades = CycladesClient(API, TOKEN) |
317 |
cls.result_dict = dict() |
|
259 | 318 |
|
260 | 319 |
def _get_ipv4(self, server): |
261 | 320 |
"""Get the public IPv4 of a server from the detailed server info""" |
... | ... | |
440 | 499 |
cls.username = None |
441 | 500 |
cls.passwd = server["adminPass"] |
442 | 501 |
|
502 |
self.result_dict["Server ID"] = str(server["id"]) |
|
503 |
self.result_dict["Password"] = str(server["adminPass"]) |
|
504 |
|
|
443 | 505 |
def test_002a_server_is_building_in_list(self): |
444 | 506 |
"""Test server is in BUILD state, in server list""" |
445 | 507 |
log.info("Server in BUILD state in server list") |
446 | 508 |
|
509 |
self.result_dict.clear() |
|
510 |
|
|
447 | 511 |
servers = self.client.list_servers(detail=True) |
448 | 512 |
servers = filter(lambda x: x["name"] == self.servername, servers) |
449 | 513 |
self.assertEqual(len(servers), 1) |
... | ... | |
549 | 613 |
|
550 | 614 |
log.info("Validate server's IPv4") |
551 | 615 |
|
616 |
|
|
552 | 617 |
server = self.client.get_server_details(self.serverid) |
553 | 618 |
ipv4 = self._get_ipv4(server) |
619 |
|
|
620 |
self.result_dict.clear() |
|
621 |
self.result_dict["IPv4"] = str(ipv4) |
|
622 |
|
|
554 | 623 |
self.assertEquals(IP(ipv4).version(), 4) |
555 | 624 |
|
556 | 625 |
def test_005_server_has_ipv6(self): |
... | ... | |
561 | 630 |
|
562 | 631 |
server = self.client.get_server_details(self.serverid) |
563 | 632 |
ipv6 = self._get_ipv6(server) |
633 |
|
|
634 |
self.result_dict.clear() |
|
635 |
self.result_dict["IPv6"] = str(ipv6) |
|
636 |
|
|
564 | 637 |
self.assertEquals(IP(ipv6).version(), 6) |
565 | 638 |
|
566 | 639 |
def test_006_server_responds_to_ping_IPv4(self): |
567 | 640 |
"""Test server responds to ping on IPv4 address""" |
568 | 641 |
|
569 | 642 |
log.info("Testing if server responds to pings in IPv4") |
643 |
self.result_dict.clear() |
|
570 | 644 |
|
571 | 645 |
server = self.client.get_server_details(self.serverid) |
572 | 646 |
ip = self._get_ipv4(server) |
... | ... | |
730 | 804 |
cls.password = dict() |
731 | 805 |
cls.is_windows = cls.imagename.lower().find("windows") >= 0 |
732 | 806 |
|
807 |
cls.result_dict = dict() |
|
808 |
|
|
733 | 809 |
def _skipIf(self, condition, msg): |
734 | 810 |
if condition: |
735 | 811 |
self.skipTest(msg) |
... | ... | |
786 | 862 |
log.info("Server A id:" + str(serverA["id"])) |
787 | 863 |
log.info("Server password " + (self.password['A'])) |
788 | 864 |
|
865 |
self.result_dict["Server A ID"] = str(serverA["id"]) |
|
866 |
self.result_dict["Server A password"] = serverA["adminPass"] |
|
867 |
|
|
789 | 868 |
def test_00001b_serverA_becomes_active(self): |
790 | 869 |
"""Test server becomes ACTIVE""" |
791 | 870 |
|
792 | 871 |
log.info("Waiting until test server A becomes ACTIVE") |
872 |
self.result_dict.clear() |
|
793 | 873 |
|
794 | 874 |
fail_tmout = time.time() + self.action_timeout |
795 | 875 |
while True: |
... | ... | |
809 | 889 |
"""Test submit create server request""" |
810 | 890 |
|
811 | 891 |
log.info("Creating test server B") |
812 |
|
|
892 |
|
|
813 | 893 |
serverB = self.client.create_server(self.servername, self.flavorid, |
814 | 894 |
self.imageid, personality=None) |
815 | 895 |
|
... | ... | |
826 | 906 |
log.info("Server B id: " + str(serverB["id"])) |
827 | 907 |
log.info("Password " + (self.password['B'])) |
828 | 908 |
|
909 |
self.result_dict.clear() |
|
910 |
self.result_dict["Server B ID"] = str(serverB["id"]) |
|
911 |
self.result_dict["Server B password"] = serverB["adminPass"] |
|
912 |
|
|
829 | 913 |
def test_00002b_serverB_becomes_active(self): |
830 | 914 |
"""Test server becomes ACTIVE""" |
831 | 915 |
|
832 | 916 |
log.info("Waiting until test server B becomes ACTIVE") |
917 |
self.result_dict.clear() |
|
833 | 918 |
|
834 | 919 |
fail_tmout = time.time() + self.action_timeout |
835 | 920 |
while True: |
... | ... | |
849 | 934 |
"""Test submit create network request""" |
850 | 935 |
|
851 | 936 |
log.info("Submit new network request") |
852 |
|
|
937 |
self.result_dict.clear() |
|
938 |
|
|
853 | 939 |
name = SNF_TEST_PREFIX + TEST_RUN_ID |
854 | 940 |
previous_num = len(self.client.list_networks()) |
855 | 941 |
network = self.client.create_network(name) |
... | ... | |
865 | 951 |
#Test if new network is created |
866 | 952 |
self.assertTrue(len(networks) > previous_num) |
867 | 953 |
|
954 |
self.result_dict["Private network ID"] = str(network['id']) |
|
955 |
|
|
868 | 956 |
def test_002_connect_to_network(self): |
869 | 957 |
"""Test connect VMs to network""" |
870 | 958 |
|
871 | 959 |
log.info("Connect VMs to private network") |
960 |
self.result_dict.clear() |
|
872 | 961 |
|
873 | 962 |
self.client.connect_server(self.serverid['A'], self.networkid) |
874 | 963 |
self.client.connect_server(self.serverid['B'], self.networkid) |
... | ... | |
927 | 1016 |
"Test if server A responds to IPv4 pings" |
928 | 1017 |
|
929 | 1018 |
log.info("Testing if server A responds to IPv4 pings ") |
1019 |
self.result_dict.clear() |
|
930 | 1020 |
|
931 | 1021 |
server = self.client.get_server_details(self.serverid['A']) |
932 | 1022 |
ip = self._get_ipv4(server) |
... | ... | |
934 | 1024 |
fail_tmout = time.time() + self.action_timeout |
935 | 1025 |
|
936 | 1026 |
s = False |
1027 |
|
|
1028 |
self.result_dict["Server A public IP"] = str(ip) |
|
937 | 1029 |
|
938 | 1030 |
while True: |
939 | 1031 |
|
... | ... | |
953 | 1045 |
"""Reboot server B""" |
954 | 1046 |
|
955 | 1047 |
log.info("Rebooting server B") |
1048 |
self.result_dict.clear() |
|
956 | 1049 |
|
957 | 1050 |
self.client.shutdown_server(self.serverid['B']) |
958 | 1051 |
|
... | ... | |
986 | 1079 |
"""Test if server B responds to IPv4 pings""" |
987 | 1080 |
|
988 | 1081 |
log.info("Testing if server B responds to IPv4 pings") |
1082 |
self.result_dict.clear() |
|
1083 |
|
|
989 | 1084 |
server = self.client.get_server_details(self.serverid['B']) |
990 | 1085 |
ip = self._get_ipv4(server) |
991 | 1086 |
|
... | ... | |
993 | 1088 |
|
994 | 1089 |
s = False |
995 | 1090 |
|
1091 |
self.result_dict["Server B public IP"] = str(ip) |
|
1092 |
|
|
996 | 1093 |
while True: |
997 | 1094 |
if self._ping_once(ip): |
998 | 1095 |
s = True |
... | ... | |
1012 | 1109 |
self._skipIf(self.is_windows, "only valid for Linux servers") |
1013 | 1110 |
|
1014 | 1111 |
log.info("Setting up interface eth1 for server A") |
1112 |
self.result_dict.clear() |
|
1015 | 1113 |
|
1016 | 1114 |
server = self.client.get_server_details(self.serverid['A']) |
1017 | 1115 |
image = self.client.get_image_details(self.imageid) |
... | ... | |
1703 | 1801 |
error = open(error_file, "w") |
1704 | 1802 |
|
1705 | 1803 |
suite = unittest.TestLoader().loadTestsFromTestCase(case) |
1706 |
runner = unittest.TextTestRunner(f, verbosity=2, failfast=True) |
|
1804 |
runner = unittest.TextTestRunner(f, verbosity=2, failfast=True, resultclass=BurninTestResult)
|
|
1707 | 1805 |
result = runner.run(suite) |
1708 | 1806 |
|
1709 | 1807 |
for res in result.errors: |
Also available in: Unified diff