Merge lp:~axwalk/gwacl/rolesizes-update into lp:gwacl
- rolesizes-update
- Merge into trunk
Proposed by
Andrew Wilkins
Status: | Merged |
---|---|
Approved by: | Andrew Wilkins |
Approved revision: | 236 |
Merge reported by: | Andrew Wilkins |
Merged at revision: | not available |
Proposed branch: | lp:~axwalk/gwacl/rolesizes-update |
Merge into: | lp:gwacl |
Diff against target: |
512 lines (+370/-100) 2 files modified
rolesizes.go (+332/-98) rolesizes_test.go (+38/-2) |
To merge this branch: | bzr merge lp:~axwalk/gwacl/rolesizes-update |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ian Booth | Approve | ||
Review via email: mp+224103@code.launchpad.net |
Commit message
Description of the change
Update role sizes
- Add basic tier role sizes.
- Fix OS disk sizes.
- Separate cost from role sizes,
record region-specific costs.
To post a comment you must log in.
- 236. By Andrew Wilkins
-
Add type name for cost unit
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'rolesizes.go' | |||
2 | --- rolesizes.go 2014-01-31 08:32:00 +0000 | |||
3 | +++ rolesizes.go 2014-06-24 03:26:22 +0000 | |||
4 | @@ -5,32 +5,38 @@ | |||
5 | 5 | 5 | ||
6 | 6 | package gwacl | 6 | package gwacl |
7 | 7 | 7 | ||
8 | 8 | import ( | ||
9 | 9 | "fmt" | ||
10 | 10 | ) | ||
11 | 11 | |||
12 | 8 | // RoleSize is a representation of the machine specs available in the Azure | 12 | // RoleSize is a representation of the machine specs available in the Azure |
13 | 9 | // documentation here: | 13 | // documentation here: |
15 | 10 | // http://msdn.microsoft.com/en-us/library/windowsazure/dn197896.aspx and | 14 | // http://msdn.microsoft.com/en-us/library/windowsazure/dn197896.aspx |
16 | 11 | // | 15 | // |
17 | 12 | // Pricing from here: | 16 | // Pricing from here: |
19 | 13 | // http://www.windowsazure.com/en-us/pricing/details/cloud-services/ | 17 | // http://azure.microsoft.com/en-us/pricing/details/virtual-machines |
20 | 14 | // | 18 | // |
21 | 15 | // Detailed specifications here: | 19 | // Detailed specifications here: |
23 | 16 | // http://msdn.microsoft.com/en-us/library/windowsazure/dn197896.aspx | 20 | // http://msdn.microsoft.com/en-us/library/windowsazure/dn197896.aspx |
24 | 17 | // | 21 | // |
25 | 18 | // Our specifications may be inaccurate or out of date. When in doubt, check! | 22 | // Our specifications may be inaccurate or out of date. When in doubt, check! |
26 | 19 | // | 23 | // |
27 | 20 | // The Disk Space values are only the maxumim permitted; actual space is | 24 | // The Disk Space values are only the maxumim permitted; actual space is |
28 | 21 | // determined by the OS image being used. | 25 | // determined by the OS image being used. |
29 | 22 | // | 26 | // |
31 | 23 | // Sizes and costs last updated 2014-01-31. | 27 | // Sizes and costs last updated 2014-06-23. |
32 | 24 | type RoleSize struct { | 28 | type RoleSize struct { |
40 | 25 | Name string | 29 | Name string |
41 | 26 | CpuCores uint64 | 30 | CpuCores uint64 |
42 | 27 | Mem uint64 // In MB | 31 | Mem uint64 // In MB |
43 | 28 | OSDiskSpaceCloud uint64 // In MB | 32 | OSDiskSpace uint64 // In MB |
44 | 29 | OSDiskSpaceVirt uint64 // In MB | 33 | TempDiskSpace uint64 // In MB |
45 | 30 | MaxDataDisks uint64 // 1TB each | 34 | MaxDataDisks uint64 // 1TB each |
39 | 31 | Cost uint64 // USD cents per hour | ||
46 | 32 | } | 35 | } |
47 | 33 | 36 | ||
48 | 37 | // decicentsPerHour is the unit of cost we store for RoleSizeCost. | ||
49 | 38 | type decicentsPerHour uint64 | ||
50 | 39 | |||
51 | 34 | const ( | 40 | const ( |
52 | 35 | // MB is the unit in which we specify sizes, so it's 1. | 41 | // MB is the unit in which we specify sizes, so it's 1. |
53 | 36 | // But please include it anyway, so that units are always explicit. | 42 | // But please include it anyway, so that units are always explicit. |
54 | @@ -39,94 +45,322 @@ | |||
55 | 39 | TB = 1024 * GB | 45 | TB = 1024 * GB |
56 | 40 | ) | 46 | ) |
57 | 41 | 47 | ||
139 | 42 | var RoleSizes = []RoleSize{ | 48 | // Basic tier roles. |
140 | 43 | { | 49 | var basicRoleSizes = []RoleSize{{ // A0..A4: general purpose |
141 | 44 | Name: "ExtraSmall", | 50 | Name: "Basic_A0", |
142 | 45 | CpuCores: 1, // shared | 51 | CpuCores: 1, // shared |
143 | 46 | Mem: 768 * MB, | 52 | Mem: 768 * MB, |
144 | 47 | OSDiskSpaceCloud: 19 * GB, | 53 | OSDiskSpace: 127 * GB, |
145 | 48 | OSDiskSpaceVirt: 20 * GB, | 54 | TempDiskSpace: 20 * GB, |
146 | 49 | MaxDataDisks: 1, | 55 | MaxDataDisks: 1, |
147 | 50 | Cost: 2, | 56 | }, { |
148 | 51 | }, { | 57 | Name: "Basic_A1", |
149 | 52 | Name: "Small", | 58 | CpuCores: 1, |
150 | 53 | CpuCores: 1, | 59 | Mem: 1.75 * GB, |
151 | 54 | Mem: 1.75 * GB, | 60 | OSDiskSpace: 127 * GB, |
152 | 55 | OSDiskSpaceCloud: 224 * GB, | 61 | TempDiskSpace: 40 * GB, |
153 | 56 | OSDiskSpaceVirt: 70 * GB, | 62 | MaxDataDisks: 2, |
154 | 57 | MaxDataDisks: 2, | 63 | }, { |
155 | 58 | Cost: 8, | 64 | Name: "Basic_A2", |
156 | 59 | }, { | 65 | CpuCores: 2, |
157 | 60 | Name: "Medium", | 66 | Mem: 3.5 * GB, |
158 | 61 | CpuCores: 2, | 67 | OSDiskSpace: 127 * GB, |
159 | 62 | Mem: 3.5 * GB, | 68 | TempDiskSpace: 60 * GB, |
160 | 63 | OSDiskSpaceCloud: 489 * GB, | 69 | MaxDataDisks: 4, |
161 | 64 | OSDiskSpaceVirt: 135 * GB, | 70 | }, { |
162 | 65 | MaxDataDisks: 4, | 71 | Name: "Basic_A3", |
163 | 66 | Cost: 16, | 72 | CpuCores: 4, |
164 | 67 | }, { | 73 | Mem: 7 * GB, |
165 | 68 | Name: "Large", | 74 | OSDiskSpace: 127 * GB, |
166 | 69 | CpuCores: 4, | 75 | TempDiskSpace: 120 * GB, |
167 | 70 | Mem: 7 * GB, | 76 | MaxDataDisks: 8, |
168 | 71 | OSDiskSpaceCloud: 999 * GB, | 77 | }, { |
169 | 72 | OSDiskSpaceVirt: 285 * GB, | 78 | Name: "Basic_A4", |
170 | 73 | MaxDataDisks: 8, | 79 | CpuCores: 8, |
171 | 74 | Cost: 32, | 80 | Mem: 14 * GB, |
172 | 75 | }, { | 81 | OSDiskSpace: 127 * GB, |
173 | 76 | Name: "ExtraLarge", | 82 | TempDiskSpace: 240 * GB, |
174 | 77 | CpuCores: 8, | 83 | MaxDataDisks: 16, |
175 | 78 | Mem: 14 * GB, | 84 | }} |
176 | 79 | OSDiskSpaceCloud: 2039 * GB, | 85 | |
177 | 80 | OSDiskSpaceVirt: 605 * GB, | 86 | // Standard tier roles. |
178 | 81 | MaxDataDisks: 16, | 87 | var standardRoleSizes = []RoleSize{{ // A0..A4: general purpose |
179 | 82 | Cost: 64, | 88 | Name: "ExtraSmall", // A0 |
180 | 83 | }, { | 89 | CpuCores: 1, // shared |
181 | 84 | Name: "A5", | 90 | Mem: 768 * MB, |
182 | 85 | CpuCores: 2, | 91 | OSDiskSpace: 127 * GB, |
183 | 86 | Mem: 14 * GB, | 92 | TempDiskSpace: 20 * GB, |
184 | 87 | OSDiskSpaceCloud: 489 * GB, | 93 | MaxDataDisks: 1, |
185 | 88 | OSDiskSpaceVirt: 135 * GB, | 94 | }, { |
186 | 89 | MaxDataDisks: 4, | 95 | Name: "Small", // A1 |
187 | 90 | Cost: 35, | 96 | CpuCores: 1, |
188 | 91 | }, { | 97 | Mem: 1.75 * GB, |
189 | 92 | Name: "A6", | 98 | OSDiskSpace: 127 * GB, |
190 | 93 | CpuCores: 4, | 99 | TempDiskSpace: 70 * GB, |
191 | 94 | Mem: 28 * GB, | 100 | MaxDataDisks: 2, |
192 | 95 | OSDiskSpaceCloud: 999 * GB, | 101 | }, { |
193 | 96 | OSDiskSpaceVirt: 285 * GB, | 102 | Name: "Medium", // A2 |
194 | 97 | MaxDataDisks: 8, | 103 | CpuCores: 2, |
195 | 98 | Cost: 71, | 104 | Mem: 3.5 * GB, |
196 | 99 | }, { | 105 | OSDiskSpace: 127 * GB, |
197 | 100 | Name: "A7", | 106 | TempDiskSpace: 135 * GB, |
198 | 101 | CpuCores: 8, | 107 | MaxDataDisks: 4, |
199 | 102 | Mem: 56 * GB, | 108 | }, { |
200 | 103 | OSDiskSpaceCloud: 2039 * GB, | 109 | Name: "Large", // A3 |
201 | 104 | OSDiskSpaceVirt: 605 * GB, | 110 | CpuCores: 4, |
202 | 105 | MaxDataDisks: 16, | 111 | Mem: 7 * GB, |
203 | 106 | Cost: 141, | 112 | OSDiskSpace: 127 * GB, |
204 | 107 | }, { | 113 | TempDiskSpace: 285 * GB, |
205 | 108 | Name: "A8", | 114 | MaxDataDisks: 8, |
206 | 109 | CpuCores: 8, | 115 | }, { |
207 | 110 | Mem: 56 * GB, | 116 | Name: "ExtraLarge", // A4 |
208 | 111 | OSDiskSpaceCloud: 2039 * GB, // Estimate; not yet announced. | 117 | CpuCores: 8, |
209 | 112 | OSDiskSpaceVirt: 605 * GB, // Estimate; not yet announced. | 118 | Mem: 14 * GB, |
210 | 113 | MaxDataDisks: 16, // Estimate; not yet announced. | 119 | OSDiskSpace: 127 * GB, |
211 | 114 | Cost: 245, | 120 | TempDiskSpace: 605 * GB, |
212 | 115 | }, { | 121 | MaxDataDisks: 16, |
213 | 116 | Name: "A9", | 122 | }, { // A5..A7: memory intensive |
214 | 117 | CpuCores: 16, | 123 | Name: "A5", |
215 | 118 | Mem: 112 * GB, | 124 | CpuCores: 2, |
216 | 119 | OSDiskSpaceCloud: 2039 * GB, // Estimate; not yet announced. | 125 | Mem: 14 * GB, |
217 | 120 | OSDiskSpaceVirt: 605 * GB, // Estimate; not yet announced. | 126 | OSDiskSpace: 127 * GB, |
218 | 121 | MaxDataDisks: 16, // Estimate; not yet announced. | 127 | TempDiskSpace: 135 * GB, |
219 | 122 | Cost: 490, | 128 | MaxDataDisks: 4, |
220 | 129 | }, { | ||
221 | 130 | Name: "A6", | ||
222 | 131 | CpuCores: 4, | ||
223 | 132 | Mem: 28 * GB, | ||
224 | 133 | OSDiskSpace: 127 * GB, | ||
225 | 134 | TempDiskSpace: 285 * GB, | ||
226 | 135 | MaxDataDisks: 8, | ||
227 | 136 | }, { | ||
228 | 137 | Name: "A7", | ||
229 | 138 | CpuCores: 8, | ||
230 | 139 | Mem: 56 * GB, | ||
231 | 140 | OSDiskSpace: 127 * GB, | ||
232 | 141 | TempDiskSpace: 605 * GB, | ||
233 | 142 | MaxDataDisks: 16, | ||
234 | 143 | }, { // A8..A9: compute intensive | ||
235 | 144 | Name: "A8", | ||
236 | 145 | CpuCores: 8, | ||
237 | 146 | Mem: 56 * GB, | ||
238 | 147 | OSDiskSpace: 127 * GB, | ||
239 | 148 | TempDiskSpace: 382 * GB, | ||
240 | 149 | MaxDataDisks: 16, | ||
241 | 150 | }, { | ||
242 | 151 | Name: "A9", | ||
243 | 152 | CpuCores: 16, | ||
244 | 153 | Mem: 112 * GB, | ||
245 | 154 | OSDiskSpace: 127 * GB, | ||
246 | 155 | TempDiskSpace: 382 * GB, | ||
247 | 156 | MaxDataDisks: 16, | ||
248 | 157 | }} | ||
249 | 158 | |||
250 | 159 | // RoleSizes describes all known role sizes. | ||
251 | 160 | var RoleSizes = append(append([]RoleSize{}, basicRoleSizes...), standardRoleSizes...) | ||
252 | 161 | |||
253 | 162 | var allRegionRoleCosts = map[string]map[string]decicentsPerHour{ | ||
254 | 163 | "East US": { | ||
255 | 164 | "Basic_A0": 18, | ||
256 | 165 | "Basic_A1": 44, | ||
257 | 166 | "Basic_A2": 88, | ||
258 | 167 | "Basic_A3": 176, | ||
259 | 168 | "Basic_A4": 352, | ||
260 | 169 | "ExtraSmall": 20, | ||
261 | 170 | "Small": 60, | ||
262 | 171 | "Medium": 120, | ||
263 | 172 | "Large": 240, | ||
264 | 173 | "ExtraLarge": 480, | ||
265 | 174 | "A5": 250, | ||
266 | 175 | "A6": 500, | ||
267 | 176 | "A7": 1000, | ||
268 | 177 | "A8": 1970, | ||
269 | 178 | "A9": 4470, | ||
270 | 179 | }, | ||
271 | 180 | "West US": { | ||
272 | 181 | "Basic_A0": 18, | ||
273 | 182 | "Basic_A1": 47, | ||
274 | 183 | "Basic_A2": 94, | ||
275 | 184 | "Basic_A3": 188, | ||
276 | 185 | "Basic_A4": 376, | ||
277 | 186 | "ExtraSmall": 20, | ||
278 | 187 | "Small": 60, | ||
279 | 188 | "Medium": 120, | ||
280 | 189 | "Large": 240, | ||
281 | 190 | "ExtraLarge": 480, | ||
282 | 191 | "A5": 250, | ||
283 | 192 | "A6": 500, | ||
284 | 193 | "A7": 1000, | ||
285 | 194 | "A8": 1970, | ||
286 | 195 | "A9": 4470, | ||
287 | 196 | }, | ||
288 | 197 | "North Central US": { | ||
289 | 198 | "Basic_A0": 18, | ||
290 | 199 | "Basic_A1": 47, | ||
291 | 200 | "Basic_A2": 94, | ||
292 | 201 | "Basic_A3": 188, | ||
293 | 202 | "Basic_A4": 376, | ||
294 | 203 | "ExtraSmall": 20, | ||
295 | 204 | "Small": 60, | ||
296 | 205 | "Medium": 120, | ||
297 | 206 | "Large": 240, | ||
298 | 207 | "ExtraLarge": 480, | ||
299 | 208 | "A5": 250, | ||
300 | 209 | "A6": 500, | ||
301 | 210 | "A7": 1000, | ||
302 | 211 | "A8": 1970, | ||
303 | 212 | "A9": 4470, | ||
304 | 213 | }, | ||
305 | 214 | "South Central US": { | ||
306 | 215 | "Basic_A0": 18, | ||
307 | 216 | "Basic_A1": 44, | ||
308 | 217 | "Basic_A2": 88, | ||
309 | 218 | "Basic_A3": 176, | ||
310 | 219 | "Basic_A4": 352, | ||
311 | 220 | "ExtraSmall": 20, | ||
312 | 221 | "Small": 60, | ||
313 | 222 | "Medium": 120, | ||
314 | 223 | "Large": 240, | ||
315 | 224 | "ExtraLarge": 480, | ||
316 | 225 | "A5": 220, | ||
317 | 226 | "A6": 440, | ||
318 | 227 | "A7": 880, | ||
319 | 228 | "A8": 1970, | ||
320 | 229 | "A9": 4470, | ||
321 | 230 | }, | ||
322 | 231 | "North Europe": { | ||
323 | 232 | "Basic_A0": 18, | ||
324 | 233 | "Basic_A1": 47, | ||
325 | 234 | "Basic_A2": 94, | ||
326 | 235 | "Basic_A3": 188, | ||
327 | 236 | "Basic_A4": 376, | ||
328 | 237 | "ExtraSmall": 20, | ||
329 | 238 | "Small": 60, | ||
330 | 239 | "Medium": 120, | ||
331 | 240 | "Large": 240, | ||
332 | 241 | "ExtraLarge": 480, | ||
333 | 242 | "A5": 248, | ||
334 | 243 | "A6": 496, | ||
335 | 244 | "A7": 992, | ||
336 | 245 | "A8": 1970, | ||
337 | 246 | "A9": 4470, | ||
338 | 247 | }, | ||
339 | 248 | "West Europe": { | ||
340 | 249 | "Basic_A0": 18, | ||
341 | 250 | "Basic_A1": 51, | ||
342 | 251 | "Basic_A2": 102, | ||
343 | 252 | "Basic_A3": 204, | ||
344 | 253 | "Basic_A4": 408, | ||
345 | 254 | "ExtraSmall": 20, | ||
346 | 255 | "Small": 60, | ||
347 | 256 | "Medium": 120, | ||
348 | 257 | "Large": 240, | ||
349 | 258 | "ExtraLarge": 480, | ||
350 | 259 | "A5": 270, | ||
351 | 260 | "A6": 540, | ||
352 | 261 | "A7": 1080, | ||
353 | 262 | "A8": 1970, | ||
354 | 263 | "A9": 4470, | ||
355 | 264 | }, | ||
356 | 265 | "Southeast Asia": { | ||
357 | 266 | "Basic_A0": 18, | ||
358 | 267 | "Basic_A1": 58, | ||
359 | 268 | "Basic_A2": 116, | ||
360 | 269 | "Basic_A3": 232, | ||
361 | 270 | "Basic_A4": 464, | ||
362 | 271 | "ExtraSmall": 20, | ||
363 | 272 | "Small": 60, | ||
364 | 273 | "Medium": 120, | ||
365 | 274 | "Large": 240, | ||
366 | 275 | "ExtraLarge": 480, | ||
367 | 276 | "A5": 270, | ||
368 | 277 | "A6": 540, | ||
369 | 278 | "A7": 1080, | ||
370 | 279 | "A8": 1970, | ||
371 | 280 | "A9": 4470, | ||
372 | 281 | }, | ||
373 | 282 | "East Asia": { | ||
374 | 283 | "Basic_A0": 18, | ||
375 | 284 | "Basic_A1": 58, | ||
376 | 285 | "Basic_A2": 116, | ||
377 | 286 | "Basic_A3": 232, | ||
378 | 287 | "Basic_A4": 464, | ||
379 | 288 | "ExtraSmall": 20, | ||
380 | 289 | "Small": 60, | ||
381 | 290 | "Medium": 120, | ||
382 | 291 | "Large": 240, | ||
383 | 292 | "ExtraLarge": 480, | ||
384 | 293 | "A5": 294, | ||
385 | 294 | "A6": 588, | ||
386 | 295 | "A7": 1176, | ||
387 | 296 | "A8": 1970, | ||
388 | 297 | "A9": 4470, | ||
389 | 298 | }, | ||
390 | 299 | "Japan East": { | ||
391 | 300 | "Basic_A0": 18, | ||
392 | 301 | "Basic_A1": 69, | ||
393 | 302 | "Basic_A2": 138, | ||
394 | 303 | "Basic_A3": 276, | ||
395 | 304 | "Basic_A4": 552, | ||
396 | 305 | "ExtraSmall": 27, | ||
397 | 306 | "Small": 81, | ||
398 | 307 | "Medium": 162, | ||
399 | 308 | "Large": 324, | ||
400 | 309 | "ExtraLarge": 648, | ||
401 | 310 | "A5": 281, | ||
402 | 311 | "A6": 562, | ||
403 | 312 | "A7": 1124, | ||
404 | 313 | "A8": 1970, | ||
405 | 314 | "A9": 4470, | ||
406 | 315 | }, | ||
407 | 316 | "Japan West": { | ||
408 | 317 | "Basic_A0": 18, | ||
409 | 318 | "Basic_A1": 61, | ||
410 | 319 | "Basic_A2": 122, | ||
411 | 320 | "Basic_A3": 244, | ||
412 | 321 | "Basic_A4": 488, | ||
413 | 322 | "ExtraSmall": 25, | ||
414 | 323 | "Small": 73, | ||
415 | 324 | "Medium": 146, | ||
416 | 325 | "Large": 292, | ||
417 | 326 | "ExtraLarge": 584, | ||
418 | 327 | "A5": 258, | ||
419 | 328 | "A6": 516, | ||
420 | 329 | "A7": 1032, | ||
421 | 330 | "A8": 1970, | ||
422 | 331 | "A9": 4470, | ||
423 | 332 | }, | ||
424 | 333 | "Brazil South": { | ||
425 | 334 | "Basic_A0": 22, | ||
426 | 335 | "Basic_A1": 58, | ||
427 | 336 | "Basic_A2": 116, | ||
428 | 337 | "Basic_A3": 232, | ||
429 | 338 | "Basic_A4": 464, | ||
430 | 339 | "ExtraSmall": 27, | ||
431 | 340 | "Small": 80, | ||
432 | 341 | "Medium": 160, | ||
433 | 342 | "Large": 320, | ||
434 | 343 | "ExtraLarge": 640, | ||
435 | 344 | "A5": 291, | ||
436 | 345 | "A6": 582, | ||
437 | 346 | "A7": 1164, | ||
438 | 347 | "A8": 1970, | ||
439 | 348 | "A9": 4470, | ||
440 | 123 | }, | 349 | }, |
441 | 124 | } | 350 | } |
442 | 125 | 351 | ||
449 | 126 | var RoleNameMap map[string]RoleSize = make(map[string]RoleSize) | 352 | // RoleSizeCost returns the cost associated with the given role size and region. |
450 | 127 | 353 | func RoleSizeCost(region string, roleSize string) (decicentsPerHour uint64, err error) { | |
451 | 128 | func init() { | 354 | costs, ok := allRegionRoleCosts[region] |
452 | 129 | for _, rolesize := range RoleSizes { | 355 | if !ok { |
453 | 130 | RoleNameMap[rolesize.Name] = rolesize | 356 | return 0, fmt.Errorf("no cost data for region %q", region) |
454 | 131 | } | 357 | } |
455 | 358 | cost, ok := costs[roleSize] | ||
456 | 359 | if ok { | ||
457 | 360 | return uint64(cost), nil | ||
458 | 361 | } | ||
459 | 362 | return 0, fmt.Errorf( | ||
460 | 363 | "no cost data for role size %q in region %q", | ||
461 | 364 | roleSize, region, | ||
462 | 365 | ) | ||
463 | 132 | } | 366 | } |
464 | 133 | 367 | ||
465 | === modified file 'rolesizes_test.go' | |||
466 | --- rolesizes_test.go 2013-07-22 03:46:15 +0000 | |||
467 | +++ rolesizes_test.go 2014-06-24 03:26:22 +0000 | |||
468 | @@ -11,6 +11,42 @@ | |||
469 | 11 | 11 | ||
470 | 12 | var _ = Suite(&rolesizeSuite{}) | 12 | var _ = Suite(&rolesizeSuite{}) |
471 | 13 | 13 | ||
474 | 14 | func (suite *rolesizeSuite) TestMapIsCreated(c *C) { | 14 | var knownRegions = []string{ |
475 | 15 | c.Check(RoleNameMap, HasLen, len(RoleSizes)) | 15 | "East US", |
476 | 16 | "West US", | ||
477 | 17 | "North Central US", | ||
478 | 18 | "South Central US", | ||
479 | 19 | "North Europe", | ||
480 | 20 | "West Europe", | ||
481 | 21 | "Southeast Asia", | ||
482 | 22 | "East Asia", | ||
483 | 23 | "Japan East", | ||
484 | 24 | "Japan West", | ||
485 | 25 | "Brazil South", | ||
486 | 26 | } | ||
487 | 27 | |||
488 | 28 | var knownSizes = []string{ | ||
489 | 29 | "Basic_A0", "Basic_A1", "Basic_A2", "Basic_A3", "Basic_A4", | ||
490 | 30 | "ExtraSmall", "Small", "Medium", "Large", "ExtraLarge", | ||
491 | 31 | "A5", "A6", "A7", "A8", "A9", | ||
492 | 32 | } | ||
493 | 33 | |||
494 | 34 | func (suite *rolesizeSuite) TestRoleCostKnownRegions(c *C) { | ||
495 | 35 | for _, region := range knownRegions { | ||
496 | 36 | for _, roleSize := range knownSizes { | ||
497 | 37 | cost, err := RoleSizeCost(region, roleSize) | ||
498 | 38 | c.Check(err, IsNil) | ||
499 | 39 | c.Check(cost, Not(Equals), uint64(0)) | ||
500 | 40 | } | ||
501 | 41 | } | ||
502 | 42 | } | ||
503 | 43 | |||
504 | 44 | func (suite *rolesizeSuite) TestRoleCostUnknownRegion(c *C) { | ||
505 | 45 | _, err := RoleSizeCost("Eastasia", "A0") | ||
506 | 46 | c.Assert(err, ErrorMatches, `no cost data for region "Eastasia"`) | ||
507 | 47 | } | ||
508 | 48 | |||
509 | 49 | func (suite *rolesizeSuite) TestRoleCostUnknownRoleSize(c *C) { | ||
510 | 50 | _, err := RoleSizeCost("East US", "A10") | ||
511 | 51 | c.Assert(err, ErrorMatches, `no cost data for role size "A10" in region "East US"`) | ||
512 | 16 | } | 52 | } |
I think a type alias would be good.