root / snf-cyclades-app / synnefo / api / test / flavors.py @ ece5581b
History | View | Annotate | Download (5.9 kB)
1 | 039e3e61 | Christos Stavrakakis | # Copyright 2012 GRNET S.A. All rights reserved.
|
---|---|---|---|
2 | 039e3e61 | Christos Stavrakakis | #
|
3 | 039e3e61 | Christos Stavrakakis | # Redistribution and use in source and binary forms, with or
|
4 | 039e3e61 | Christos Stavrakakis | # without modification, are permitted provided that the following
|
5 | 039e3e61 | Christos Stavrakakis | # conditions are met:
|
6 | 039e3e61 | Christos Stavrakakis | #
|
7 | 039e3e61 | Christos Stavrakakis | # 1. Redistributions of source code must retain the above
|
8 | 039e3e61 | Christos Stavrakakis | # copyright notice, this list of conditions and the following
|
9 | 039e3e61 | Christos Stavrakakis | # disclaimer.
|
10 | 039e3e61 | Christos Stavrakakis | #
|
11 | 039e3e61 | Christos Stavrakakis | # 2. Redistributions in binary form must reproduce the above
|
12 | 039e3e61 | Christos Stavrakakis | # copyright notice, this list of conditions and the following
|
13 | 039e3e61 | Christos Stavrakakis | # disclaimer in the documentation and/or other materials
|
14 | 039e3e61 | Christos Stavrakakis | # provided with the distribution.
|
15 | 039e3e61 | Christos Stavrakakis | #
|
16 | 039e3e61 | Christos Stavrakakis | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
17 | 039e3e61 | Christos Stavrakakis | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
18 | 039e3e61 | Christos Stavrakakis | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
19 | 039e3e61 | Christos Stavrakakis | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
20 | 039e3e61 | Christos Stavrakakis | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21 | 039e3e61 | Christos Stavrakakis | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22 | 039e3e61 | Christos Stavrakakis | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
23 | 039e3e61 | Christos Stavrakakis | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
24 | 039e3e61 | Christos Stavrakakis | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
25 | 039e3e61 | Christos Stavrakakis | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
26 | 039e3e61 | Christos Stavrakakis | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
27 | 039e3e61 | Christos Stavrakakis | # POSSIBILITY OF SUCH DAMAGE.
|
28 | 039e3e61 | Christos Stavrakakis | #
|
29 | 039e3e61 | Christos Stavrakakis | # The views and conclusions contained in the software and
|
30 | 039e3e61 | Christos Stavrakakis | # documentation are those of the authors and should not be
|
31 | 039e3e61 | Christos Stavrakakis | # interpreted as representing official policies, either expressed
|
32 | 039e3e61 | Christos Stavrakakis | # or implied, of GRNET S.A.
|
33 | 039e3e61 | Christos Stavrakakis | |
34 | 039e3e61 | Christos Stavrakakis | import json |
35 | 039e3e61 | Christos Stavrakakis | |
36 | d2b8ec7b | Christos Stavrakakis | from snf_django.utils.testing import BaseAPITest |
37 | 039e3e61 | Christos Stavrakakis | from synnefo.db.models import Flavor |
38 | 039e3e61 | Christos Stavrakakis | from synnefo.db.models_factory import FlavorFactory |
39 | a28c5998 | Georgios D. Tsoukalas | from synnefo.lib.services import get_service_path |
40 | a28c5998 | Georgios D. Tsoukalas | from synnefo.cyclades_settings import cyclades_services |
41 | a28c5998 | Georgios D. Tsoukalas | from synnefo.lib import join_urls |
42 | 039e3e61 | Christos Stavrakakis | |
43 | 039e3e61 | Christos Stavrakakis | |
44 | 039e3e61 | Christos Stavrakakis | class FlavorAPITest(BaseAPITest): |
45 | 039e3e61 | Christos Stavrakakis | |
46 | 039e3e61 | Christos Stavrakakis | def setUp(self): |
47 | 039e3e61 | Christos Stavrakakis | self.flavor1 = FlavorFactory()
|
48 | 039e3e61 | Christos Stavrakakis | self.flavor2 = FlavorFactory(deleted=True) |
49 | 039e3e61 | Christos Stavrakakis | self.flavor3 = FlavorFactory()
|
50 | a28c5998 | Georgios D. Tsoukalas | self.compute_path = get_service_path(cyclades_services, 'compute', |
51 | a28c5998 | Georgios D. Tsoukalas | version='v2.0')
|
52 | a28c5998 | Georgios D. Tsoukalas | |
53 | a28c5998 | Georgios D. Tsoukalas | |
54 | a28c5998 | Georgios D. Tsoukalas | def myget(self, path): |
55 | a28c5998 | Georgios D. Tsoukalas | path = join_urls(self.compute_path, path)
|
56 | a28c5998 | Georgios D. Tsoukalas | return self.get(path) |
57 | a28c5998 | Georgios D. Tsoukalas | |
58 | 039e3e61 | Christos Stavrakakis | |
59 | 039e3e61 | Christos Stavrakakis | def test_flavor_list(self): |
60 | 039e3e61 | Christos Stavrakakis | """Test if the expected list of flavors is returned."""
|
61 | a28c5998 | Georgios D. Tsoukalas | response = self.myget('flavors') |
62 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
63 | 039e3e61 | Christos Stavrakakis | |
64 | 2d04422f | Christos Stavrakakis | api_flavors = json.loads(response.content)['flavors']
|
65 | 039e3e61 | Christos Stavrakakis | db_flavors = Flavor.objects.filter(deleted=False)
|
66 | 039e3e61 | Christos Stavrakakis | self.assertEqual(len(api_flavors), len(db_flavors)) |
67 | 039e3e61 | Christos Stavrakakis | for api_flavor in api_flavors: |
68 | 039e3e61 | Christos Stavrakakis | db_flavor = Flavor.objects.get(id=api_flavor['id'])
|
69 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['id'], db_flavor.id) |
70 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['name'], db_flavor.name) |
71 | 039e3e61 | Christos Stavrakakis | |
72 | 039e3e61 | Christos Stavrakakis | def test_flavors_details(self): |
73 | 039e3e61 | Christos Stavrakakis | """Test if the flavors details are returned."""
|
74 | a28c5998 | Georgios D. Tsoukalas | response = self.myget('flavors/detail') |
75 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
76 | 039e3e61 | Christos Stavrakakis | |
77 | 039e3e61 | Christos Stavrakakis | db_flavors = Flavor.objects.filter(deleted=False)
|
78 | 2d04422f | Christos Stavrakakis | api_flavors = json.loads(response.content)['flavors']
|
79 | 039e3e61 | Christos Stavrakakis | |
80 | 039e3e61 | Christos Stavrakakis | self.assertEqual(len(db_flavors), len(api_flavors)) |
81 | 039e3e61 | Christos Stavrakakis | |
82 | 039e3e61 | Christos Stavrakakis | for i in range(0, len(db_flavors)): |
83 | 039e3e61 | Christos Stavrakakis | api_flavor = api_flavors[i] |
84 | 039e3e61 | Christos Stavrakakis | db_flavor = Flavor.objects.get(id=db_flavors[i].id) |
85 | a333c901 | Christos Stavrakakis | self.assertEqual(api_flavor['vcpus'], db_flavor.cpu) |
86 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['id'], db_flavor.id) |
87 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['disk'], db_flavor.disk) |
88 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['name'], db_flavor.name) |
89 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['ram'], db_flavor.ram) |
90 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['SNF:disk_template'], |
91 | 039e3e61 | Christos Stavrakakis | db_flavor.disk_template) |
92 | 039e3e61 | Christos Stavrakakis | |
93 | 039e3e61 | Christos Stavrakakis | def test_flavor_details(self): |
94 | 039e3e61 | Christos Stavrakakis | """Test if the expected flavor is returned."""
|
95 | 039e3e61 | Christos Stavrakakis | flavor = self.flavor3
|
96 | 039e3e61 | Christos Stavrakakis | |
97 | a28c5998 | Georgios D. Tsoukalas | response = self.myget('flavors/%d' % flavor.id) |
98 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
99 | 039e3e61 | Christos Stavrakakis | |
100 | 039e3e61 | Christos Stavrakakis | api_flavor = json.loads(response.content)['flavor']
|
101 | 039e3e61 | Christos Stavrakakis | db_flavor = Flavor.objects.get(id=flavor.id) |
102 | a333c901 | Christos Stavrakakis | self.assertEqual(api_flavor['vcpus'], db_flavor.cpu) |
103 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['id'], db_flavor.id) |
104 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['disk'], db_flavor.disk) |
105 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['name'], db_flavor.name) |
106 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['ram'], db_flavor.ram) |
107 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['SNF:disk_template'], |
108 | 039e3e61 | Christos Stavrakakis | db_flavor.disk_template) |
109 | 039e3e61 | Christos Stavrakakis | |
110 | 039e3e61 | Christos Stavrakakis | def test_deleted_flavor_details(self): |
111 | 039e3e61 | Christos Stavrakakis | """Test that API returns details for deleted flavors"""
|
112 | 039e3e61 | Christos Stavrakakis | flavor = self.flavor2
|
113 | a28c5998 | Georgios D. Tsoukalas | response = self.myget('flavors/%d' % flavor.id) |
114 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
115 | 039e3e61 | Christos Stavrakakis | api_flavor = json.loads(response.content)['flavor']
|
116 | 039e3e61 | Christos Stavrakakis | self.assertEquals(api_flavor['name'], flavor.name) |
117 | 039e3e61 | Christos Stavrakakis | |
118 | 039e3e61 | Christos Stavrakakis | def test_deleted_flavors_list(self): |
119 | 039e3e61 | Christos Stavrakakis | """Test that deleted flavors do not appear to flavors list"""
|
120 | a28c5998 | Georgios D. Tsoukalas | response = self.myget('flavors') |
121 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
122 | 2d04422f | Christos Stavrakakis | api_flavors = json.loads(response.content)['flavors']
|
123 | 039e3e61 | Christos Stavrakakis | self.assertEqual(len(api_flavors), 2) |
124 | 039e3e61 | Christos Stavrakakis | |
125 | 039e3e61 | Christos Stavrakakis | def test_deleted_flavors_details(self): |
126 | 039e3e61 | Christos Stavrakakis | """Test that deleted flavors do not appear to flavors detail list"""
|
127 | 039e3e61 | Christos Stavrakakis | FlavorFactory(deleted=True)
|
128 | a28c5998 | Georgios D. Tsoukalas | response = self.myget('flavors/detail') |
129 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
130 | 2d04422f | Christos Stavrakakis | api_flavors = json.loads(response.content)['flavors']
|
131 | 039e3e61 | Christos Stavrakakis | self.assertEqual(len(api_flavors), 2) |
132 | 039e3e61 | Christos Stavrakakis | |
133 | 039e3e61 | Christos Stavrakakis | def test_wrong_flavor(self): |
134 | 039e3e61 | Christos Stavrakakis | """Test 404 result when requesting a flavor that does not exist."""
|
135 | 039e3e61 | Christos Stavrakakis | |
136 | a28c5998 | Georgios D. Tsoukalas | # XXX: flavors/22 below fails for no apparent reason
|
137 | a28c5998 | Georgios D. Tsoukalas | response = self.myget('flavors/%d' % 23) |
138 | 039e3e61 | Christos Stavrakakis | self.assertItemNotFound(response)
|
139 | a3accf03 | Georgios D. Tsoukalas | |
140 | a3accf03 | Georgios D. Tsoukalas | def test_catch_wrong_api_paths(self, *args): |
141 | a3accf03 | Georgios D. Tsoukalas | response = self.myget('nonexistent') |
142 | a3accf03 | Georgios D. Tsoukalas | self.assertEqual(response.status_code, 400) |
143 | a3accf03 | Georgios D. Tsoukalas | try:
|
144 | a3accf03 | Georgios D. Tsoukalas | error = json.loads(response.content) |
145 | a3accf03 | Georgios D. Tsoukalas | except ValueError: |
146 | a3accf03 | Georgios D. Tsoukalas | self.assertTrue(False) |