Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / test / flavors.py @ 9ae613af

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 039e3e61 Christos Stavrakakis
from synnefo.api.tests 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)