1
2 import os
3 import tempfile
4
5 from starcluster import exception
6 from starcluster.cluster import Cluster
7 from starcluster.tests import StarClusterTest
8
9
11
20
22
23
24 cases = [
25 {'p1_class': 'None'},
26 {'p1_class':'unittest.TestCase'},
27 ]
28 for case in cases:
29 cfg = self.get_custom_config(**case)
30 try:
31 cfg.get_cluster_template('c1')
32 except exception.PluginError:
33 pass
34 else:
35 raise Exception(
36 'cluster allows non-valid plugin setup class (case: %s)' %
37 case)
38
54
56 cases = [
57 {'cluster_shell': ''},
58 {'cluster_shell': 'nosh'},
59 {'cluster_shell': 2},
60 ]
61 failed = self.__test_cases_from_cluster(
62 cases, '_validate_shell_setting')
63 if failed:
64 raise Exception('cluster allows invalid cluster shell (cases: %s)'
65 % failed)
66
83
85 """
86 Tests all cases by loading a cluster template from the test config.
87 This method will write a custom test config for each case using its
88 settings.
89 """
90 failed = []
91 for case in cases:
92 cfg = self.get_custom_config(**case)
93 cluster = cfg.get_cluster_template(cluster_name)
94 try:
95 getattr(cluster, test)()
96 except exception.ClusterValidationError, e:
97 print "case: %s, error: %s" % (str(case), e)
98 continue
99 else:
100 failed.append(case)
101 return failed
102
104 """
105 Tests all cases by manually loading a cluster template using the
106 Cluster class. All settings for a case are passed in as constructor
107 keywords. Avoids the config module by using the Cluster object
108 directly to create a test case.
109 """
110 failed = []
111 for case in cases:
112 cluster = Cluster(**case)
113 try:
114 getattr(cluster, test)()
115 except exception.ClusterValidationError:
116 continue
117 else:
118 failed.append(case)
119 return failed
120
122 cases = [
123 {'node_instance_type': 'asdf'},
124 {'master_instance_type': 'fdsa', 'node_instance_type': 'm1.small'},
125 ]
126 failed = self.__test_cases_from_cluster(cases,
127 "_validate_instance_types")
128 if failed:
129 raise Exception(
130 'cluster allows invalid instance type settings (cases: %s)' % \
131 failed)
132
134 try:
135 failed = self.__test_cases_from_cfg(
136 [{'v1_device': '/dev/asd'}], '_validate_ebs_settings')
137 raise Exception(
138 'cluster allows invalid ebs settings (cases: %s)' % failed)
139 except exception.InvalidDevice:
140 pass
141 try:
142 failed = self.__test_cases_from_cfg(
143 [{'v1_partition': -1}], '_validate_ebs_settings')
144 raise Exception(
145 'cluster allows invalid ebs settings (cases: %s)' % failed)
146 except exception.InvalidPartition:
147 pass
148 cases = [
149 {'v1_mount_path': 'home'},
150 {'v1_mount_path': '/home', 'v2_mount_path': '/home'},
151 {'v4_id': 'vol-abcdefg', 'v5_id': 'vol-abcdefg',
152 'v4_partition': 2, 'v5_partition': 2, 'c1_vols': 'v4, v5'},
153 {'v1_id': 'vol-abcdefg', 'v2_id': 'vol-gfedcba',
154 'v1_device': '/dev/sdd', 'v2_device': '/dev/sdd',
155 'c1_vols': 'v1, v2'},
156 {'v1_id': 'vol-abcdefg', 'v2_id': 'vol-abcdefg',
157 'v1_device': '/dev/sdz', 'v2_device': '/dev/sdd',
158 'c1_vols': 'v1, v2'}
159 ]
160 failed = self.__test_cases_from_cfg(cases, '_validate_ebs_settings')
161 if failed:
162 raise Exception(
163 'cluster allows invalid ebs settings (cases: %s)' % failed)
164
165 cases = [
166 {'v4_id': 'vol-abcdefg', 'v5_id': 'vol-abcdefg',
167 'v4_partition': 1, 'v5_partition': 2, 'c1_vols': 'v4, v5'},
168 ]
169 passed = self.__test_cases_from_cfg(cases, '_validate_ebs_settings')
170 if len(passed) != len(cases):
171 raise Exception("validation fails on valid cases: %s" %
172 str(passed))
173
175 assert self.config.permissions.s3.ip_protocol == 'tcp'
176 assert self.config.permissions.s3.cidr_ip == '0.0.0.0/0'
177 cases = [
178 {'s1_from_port':90, 's1_to_port': 10},
179 {'s1_from_port':-1},
180 {'s1_cidr_ip':'asdfasdf'},
181 ]
182 failed = self.__test_cases_from_cfg(cases,
183 '_validate_permission_settings',
184 cluster_name='c4')
185 if failed:
186 raise Exception(
187 "cluster allows invalid permission settings (cases %s)" % \
188 failed)
189
190
191
192
193
194
195
196
197
198