Statistics
| Branch: | Tag: | Revision:

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)