blob: 9c38ff4c5c6a447a54a5d1970b6c92cb0bf856a1 [file] [log] [blame]
Jay Pipes13b479b2012-06-11 14:52:27 -04001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack, LLC
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
Jay Pipesf38eaac2012-06-21 13:37:35 -040018import nose
Rohit Karajgi03530292012-04-24 17:00:50 -070019from nose.plugins.attrib import attr
dwalleck8ebc3692012-08-28 00:30:02 -050020import unittest2 as unittest
Jay Pipes13b479b2012-06-11 14:52:27 -040021
Tiago Melloeda03b52012-08-22 23:47:29 -030022from tempest.tests.compute import base
Jay Pipesf38eaac2012-06-21 13:37:35 -040023from tempest.tests import compute
Rohit Karajgi03530292012-04-24 17:00:50 -070024
25
Tiago Melloeda03b52012-08-22 23:47:29 -030026class FlavorsAdminTestBase(object):
Rohit Karajgi03530292012-04-24 17:00:50 -070027
28 """
29 Tests Flavors API Create and Delete that require admin privileges
30 """
31
Tiago Melloeda03b52012-08-22 23:47:29 -030032 @staticmethod
Rohit Karajgi03530292012-04-24 17:00:50 -070033 def setUpClass(cls):
Jay Pipesf38eaac2012-06-21 13:37:35 -040034 if not compute.FLAVOR_EXTRA_DATA_ENABLED:
35 msg = "FlavorExtraData extension not enabled."
36 raise nose.SkipTest(msg)
Rohit Karajgi03530292012-04-24 17:00:50 -070037
Jay Pipesf38eaac2012-06-21 13:37:35 -040038 cls.client = cls.os.flavors_client
39 cls.flavor_name = 'test_flavor'
40 cls.ram = 512
41 cls.vcpus = 1
42 cls.disk = 10
43 cls.ephemeral = 10
44 cls.new_flavor_id = 1234
45 cls.swap = 1024
46 cls.rxtx = 1
Rohit Karajgi03530292012-04-24 17:00:50 -070047
48 @attr(type='positive')
49 def test_create_flavor(self):
50 """Create a flavor and ensure it is listed
51 This operation requires the user to have 'admin' role"""
Rohit Karajgi03530292012-04-24 17:00:50 -070052 #Create the flavor
Jay Pipesf38eaac2012-06-21 13:37:35 -040053 resp, flavor = self.client.create_flavor(self.flavor_name,
54 self.ram, self.vcpus,
55 self.disk,
56 self.ephemeral,
57 self.new_flavor_id,
58 self.swap, self.rxtx)
Rohit Karajgi03530292012-04-24 17:00:50 -070059 self.assertEqual(200, resp.status)
60 self.assertEqual(flavor['name'], self.flavor_name)
61 self.assertEqual(flavor['vcpus'], self.vcpus)
62 self.assertEqual(flavor['disk'], self.disk)
63 self.assertEqual(flavor['ram'], self.ram)
64 self.assertEqual(int(flavor['id']), self.new_flavor_id)
65 self.assertEqual(flavor['swap'], self.swap)
66 self.assertEqual(flavor['rxtx_factor'], self.rxtx)
67 self.assertEqual(flavor['OS-FLV-EXT-DATA:ephemeral'], self.ephemeral)
68
69 #Verify flavor is retrieved
Jay Pipesf38eaac2012-06-21 13:37:35 -040070 resp, flavor = self.client.get_flavor_details(self.new_flavor_id)
Rohit Karajgi03530292012-04-24 17:00:50 -070071 self.assertEqual(resp.status, 200)
72 self.assertEqual(flavor['name'], self.flavor_name)
73
74 #Delete the flavor
Jay Pipesf38eaac2012-06-21 13:37:35 -040075 resp, body = self.client.delete_flavor(flavor['id'])
Rohit Karajgi03530292012-04-24 17:00:50 -070076 self.assertEqual(resp.status, 202)
77
78 @attr(type='positive')
79 def test_create_flavor_verify_entry_in_list_details(self):
80 """Create a flavor and ensure it's details are listed
81 This operation requires the user to have 'admin' role"""
Rohit Karajgi03530292012-04-24 17:00:50 -070082 #Create the flavor
Jay Pipesf38eaac2012-06-21 13:37:35 -040083 resp, flavor = self.client.create_flavor(self.flavor_name,
84 self.ram, self.vcpus,
85 self.disk,
86 self.ephemeral,
87 self.new_flavor_id,
88 self.swap, self.rxtx)
Rohit Karajgi03530292012-04-24 17:00:50 -070089 flag = False
90 #Verify flavor is retrieved
Jay Pipesf38eaac2012-06-21 13:37:35 -040091 resp, flavors = self.client.list_flavors_with_detail()
Rohit Karajgi03530292012-04-24 17:00:50 -070092 self.assertEqual(resp.status, 200)
93 for flavor in flavors:
94 if flavor['name'] == self.flavor_name:
95 flag = True
96 self.assertTrue(flag)
97
98 #Delete the flavor
Jay Pipesf38eaac2012-06-21 13:37:35 -040099 resp, body = self.client.delete_flavor(self.new_flavor_id)
Rohit Karajgi03530292012-04-24 17:00:50 -0700100 self.assertEqual(resp.status, 202)
101
102 @attr(type='negative')
103 def test_get_flavor_details_for_deleted_flavor(self):
104 """Delete a flavor and ensure it is not listed"""
Rohit Karajgi03530292012-04-24 17:00:50 -0700105 # Create a test flavor
Jay Pipesf38eaac2012-06-21 13:37:35 -0400106 resp, flavor = self.client.create_flavor(self.flavor_name,
107 self.ram,
108 self.vcpus, self.disk,
109 self.ephemeral,
110 self.new_flavor_id,
111 self.swap, self.rxtx)
Rohit Karajgi03530292012-04-24 17:00:50 -0700112 self.assertEquals(200, resp.status)
113
114 # Delete the flavor
Jay Pipesf38eaac2012-06-21 13:37:35 -0400115 resp, _ = self.client.delete_flavor(self.new_flavor_id)
Rohit Karajgi03530292012-04-24 17:00:50 -0700116 self.assertEqual(resp.status, 202)
117
Dan Prince8581f532012-05-30 17:11:55 -0400118 # Deleted flavors can be seen via detailed GET
Jay Pipesf38eaac2012-06-21 13:37:35 -0400119 resp, flavor = self.client.get_flavor_details(self.new_flavor_id)
Dan Prince8581f532012-05-30 17:11:55 -0400120 self.assertEqual(resp.status, 200)
121 self.assertEqual(flavor['name'], self.flavor_name)
122
123 # Deleted flavors should not show up in a list however
Jay Pipesf38eaac2012-06-21 13:37:35 -0400124 resp, flavors = self.client.list_flavors_with_detail()
Dan Prince8581f532012-05-30 17:11:55 -0400125 self.assertEqual(resp.status, 200)
126 flag = True
127 for flavor in flavors:
128 if flavor['name'] == self.flavor_name:
129 flag = False
130 self.assertTrue(flag)
Tiago Melloeda03b52012-08-22 23:47:29 -0300131
132
133class FlavorsAdminTestXML(base.BaseComputeAdminTestXML,
134 FlavorsAdminTestBase):
135
136 @classmethod
137 def setUpClass(cls):
138 super(FlavorsAdminTestXML, cls).setUpClass()
139 FlavorsAdminTestBase.setUpClass(cls)
140
141
142class FlavorsAdminTestJSON(base.BaseComputeAdminTestJSON,
143 FlavorsAdminTestBase):
144
145 @classmethod
146 def setUpClass(cls):
147 super(FlavorsAdminTestJSON, cls).setUpClass()
148 FlavorsAdminTestBase.setUpClass(cls)