root / snf-cyclades-app / synnefo / api / test / flavors.py @ c6c889f7
History | View | Annotate | Download (5.3 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 | 039e3e61 | Christos Stavrakakis | |
40 | 039e3e61 | Christos Stavrakakis | |
41 | 039e3e61 | Christos Stavrakakis | class FlavorAPITest(BaseAPITest): |
42 | 039e3e61 | Christos Stavrakakis | |
43 | 039e3e61 | Christos Stavrakakis | def setUp(self): |
44 | 039e3e61 | Christos Stavrakakis | self.flavor1 = FlavorFactory()
|
45 | 039e3e61 | Christos Stavrakakis | self.flavor2 = FlavorFactory(deleted=True) |
46 | 039e3e61 | Christos Stavrakakis | self.flavor3 = FlavorFactory()
|
47 | 039e3e61 | Christos Stavrakakis | |
48 | 039e3e61 | Christos Stavrakakis | def test_flavor_list(self): |
49 | 039e3e61 | Christos Stavrakakis | """Test if the expected list of flavors is returned."""
|
50 | 039e3e61 | Christos Stavrakakis | response = self.get('/api/v1.1/flavors') |
51 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
52 | 039e3e61 | Christos Stavrakakis | |
53 | 039e3e61 | Christos Stavrakakis | api_flavors = json.loads(response.content)['flavors']['values'] |
54 | 039e3e61 | Christos Stavrakakis | db_flavors = Flavor.objects.filter(deleted=False)
|
55 | 039e3e61 | Christos Stavrakakis | self.assertEqual(len(api_flavors), len(db_flavors)) |
56 | 039e3e61 | Christos Stavrakakis | for api_flavor in api_flavors: |
57 | 039e3e61 | Christos Stavrakakis | db_flavor = Flavor.objects.get(id=api_flavor['id'])
|
58 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['id'], db_flavor.id) |
59 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['name'], db_flavor.name) |
60 | 039e3e61 | Christos Stavrakakis | |
61 | 039e3e61 | Christos Stavrakakis | def test_flavors_details(self): |
62 | 039e3e61 | Christos Stavrakakis | """Test if the flavors details are returned."""
|
63 | 039e3e61 | Christos Stavrakakis | response = self.get('/api/v1.1/flavors/detail') |
64 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
65 | 039e3e61 | Christos Stavrakakis | |
66 | 039e3e61 | Christos Stavrakakis | db_flavors = Flavor.objects.filter(deleted=False)
|
67 | 039e3e61 | Christos Stavrakakis | api_flavors = json.loads(response.content)['flavors']['values'] |
68 | 039e3e61 | Christos Stavrakakis | |
69 | 039e3e61 | Christos Stavrakakis | self.assertEqual(len(db_flavors), len(api_flavors)) |
70 | 039e3e61 | Christos Stavrakakis | |
71 | 039e3e61 | Christos Stavrakakis | for i in range(0, len(db_flavors)): |
72 | 039e3e61 | Christos Stavrakakis | api_flavor = api_flavors[i] |
73 | 039e3e61 | Christos Stavrakakis | db_flavor = Flavor.objects.get(id=db_flavors[i].id) |
74 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['cpu'], db_flavor.cpu) |
75 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['id'], db_flavor.id) |
76 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['disk'], db_flavor.disk) |
77 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['name'], db_flavor.name) |
78 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['ram'], db_flavor.ram) |
79 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['SNF:disk_template'], |
80 | 039e3e61 | Christos Stavrakakis | db_flavor.disk_template) |
81 | 039e3e61 | Christos Stavrakakis | |
82 | 039e3e61 | Christos Stavrakakis | def test_flavor_details(self): |
83 | 039e3e61 | Christos Stavrakakis | """Test if the expected flavor is returned."""
|
84 | 039e3e61 | Christos Stavrakakis | flavor = self.flavor3
|
85 | 039e3e61 | Christos Stavrakakis | |
86 | 039e3e61 | Christos Stavrakakis | response = self.get('/api/v1.1/flavors/%d' % flavor.id) |
87 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
88 | 039e3e61 | Christos Stavrakakis | |
89 | 039e3e61 | Christos Stavrakakis | api_flavor = json.loads(response.content)['flavor']
|
90 | 039e3e61 | Christos Stavrakakis | db_flavor = Flavor.objects.get(id=flavor.id) |
91 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['cpu'], db_flavor.cpu) |
92 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['id'], db_flavor.id) |
93 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['disk'], db_flavor.disk) |
94 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['name'], db_flavor.name) |
95 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['ram'], db_flavor.ram) |
96 | 039e3e61 | Christos Stavrakakis | self.assertEqual(api_flavor['SNF:disk_template'], |
97 | 039e3e61 | Christos Stavrakakis | db_flavor.disk_template) |
98 | 039e3e61 | Christos Stavrakakis | |
99 | 039e3e61 | Christos Stavrakakis | def test_deleted_flavor_details(self): |
100 | 039e3e61 | Christos Stavrakakis | """Test that API returns details for deleted flavors"""
|
101 | 039e3e61 | Christos Stavrakakis | flavor = self.flavor2
|
102 | 039e3e61 | Christos Stavrakakis | response = self.get('/api/v1.1/flavors/%d' % flavor.id) |
103 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
104 | 039e3e61 | Christos Stavrakakis | api_flavor = json.loads(response.content)['flavor']
|
105 | 039e3e61 | Christos Stavrakakis | self.assertEquals(api_flavor['name'], flavor.name) |
106 | 039e3e61 | Christos Stavrakakis | |
107 | 039e3e61 | Christos Stavrakakis | def test_deleted_flavors_list(self): |
108 | 039e3e61 | Christos Stavrakakis | """Test that deleted flavors do not appear to flavors list"""
|
109 | 039e3e61 | Christos Stavrakakis | response = self.get('/api/v1.1/flavors') |
110 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
111 | 039e3e61 | Christos Stavrakakis | api_flavors = json.loads(response.content)['flavors']['values'] |
112 | 039e3e61 | Christos Stavrakakis | self.assertEqual(len(api_flavors), 2) |
113 | 039e3e61 | Christos Stavrakakis | |
114 | 039e3e61 | Christos Stavrakakis | def test_deleted_flavors_details(self): |
115 | 039e3e61 | Christos Stavrakakis | """Test that deleted flavors do not appear to flavors detail list"""
|
116 | 039e3e61 | Christos Stavrakakis | FlavorFactory(deleted=True)
|
117 | 039e3e61 | Christos Stavrakakis | response = self.get('/api/v1.1/flavors/detail') |
118 | 039e3e61 | Christos Stavrakakis | self.assertSuccess(response)
|
119 | 039e3e61 | Christos Stavrakakis | api_flavors = json.loads(response.content)['flavors']['values'] |
120 | 039e3e61 | Christos Stavrakakis | self.assertEqual(len(api_flavors), 2) |
121 | 039e3e61 | Christos Stavrakakis | |
122 | 039e3e61 | Christos Stavrakakis | def test_wrong_flavor(self): |
123 | 039e3e61 | Christos Stavrakakis | """Test 404 result when requesting a flavor that does not exist."""
|
124 | 039e3e61 | Christos Stavrakakis | |
125 | 039e3e61 | Christos Stavrakakis | response = self.get('/api/v1.1/flavors/%d' % 22) |
126 | 039e3e61 | Christos Stavrakakis | self.assertItemNotFound(response) |