blob: 0647069dc93cd20eac460a62192b454f19642216 [file] [log] [blame]
Mh Raies96594fc2014-03-26 16:34:18 +05301# Copyright 2014 NEC Corporation. All rights reserved.
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may
4# not use this file except in compliance with the License. You may obtain
5# a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations
13# under the License.
14
15from tempest.api.network import base
16from tempest.common.utils import data_utils
17from tempest import exceptions
18from tempest import test
19
20
21class FWaaSExtensionTestJSON(base.BaseNetworkTest):
22 _interface = 'json'
23
24 """
25 Tests the following operations in the Neutron API using the REST client for
26 Neutron:
27
28 List firewall rules
29 Create firewall rule
30 Update firewall rule
31 Delete firewall rule
32 Show firewall rule
33 List firewall policies
34 Create firewall policy
35 Update firewall policy
36 Delete firewall policy
37 Show firewall policy
38 List firewall
39 Create firewall
40 Update firewall
41 Delete firewall
42 Show firewall
43 """
44
45 @classmethod
46 def setUpClass(cls):
47 super(FWaaSExtensionTestJSON, cls).setUpClass()
48 if not test.is_extension_enabled('fwaas', 'network'):
49 msg = "FWaaS Extension not enabled."
50 raise cls.skipException(msg)
51 cls.fw_rule = cls.create_firewall_rule("allow", "tcp")
52 cls.fw_policy = cls.create_firewall_policy()
53
54 def _try_delete_policy(self, policy_id):
55 # delete policy, if it exists
56 try:
57 self.client.delete_firewall_policy(policy_id)
58 # if policy is not found, this means it was deleted in the test
59 except exceptions.NotFound:
60 pass
61
62 def _try_delete_firewall(self, fw_id):
63 # delete firewall, if it exists
64 try:
65 self.client.delete_firewall(fw_id)
66 # if firewall is not found, this means it was deleted in the test
67 except exceptions.NotFound:
68 pass
69
70 @test.attr(type='smoke')
71 def test_list_firewall_rules(self):
72 # List firewall rules
73 resp, fw_rules = self.client.list_firewall_rules()
74 self.assertEqual('200', resp['status'])
75 fw_rules = fw_rules['firewall_rules']
76 self.assertIn((self.fw_rule['id'],
77 self.fw_rule['name'],
78 self.fw_rule['action'],
79 self.fw_rule['protocol'],
80 self.fw_rule['ip_version'],
81 self.fw_rule['enabled']),
82 [(m['id'],
83 m['name'],
84 m['action'],
85 m['protocol'],
86 m['ip_version'],
87 m['enabled']) for m in fw_rules])
88
89 @test.attr(type='smoke')
90 def test_create_update_delete_firewall_rule(self):
91 # Create firewall rule
92 resp, body = self.client.create_firewall_rule(
93 name=data_utils.rand_name("fw-rule"),
94 action="allow",
95 protocol="tcp")
96 self.assertEqual('201', resp['status'])
97 fw_rule_id = body['firewall_rule']['id']
98
99 # Update firewall rule
100 resp, body = self.client.update_firewall_rule(fw_rule_id,
101 shared=True)
102 self.assertEqual('200', resp['status'])
103 self.assertTrue(body["firewall_rule"]['shared'])
104
105 # Delete firewall rule
106 resp, _ = self.client.delete_firewall_rule(fw_rule_id)
107 self.assertEqual('204', resp['status'])
108 # Confirm deletion
109 resp, fw_rules = self.client.list_firewall_rules()
110 self.assertNotIn(fw_rule_id,
111 [m['id'] for m in fw_rules['firewall_rules']])
112
113 @test.attr(type='smoke')
114 def test_show_firewall_rule(self):
115 # show a created firewall rule
116 resp, fw_rule = self.client.show_firewall_rule(self.fw_rule['id'])
117 self.assertEqual('200', resp['status'])
118 for key, value in fw_rule['firewall_rule'].iteritems():
119 self.assertEqual(self.fw_rule[key], value)
120
121 @test.attr(type='smoke')
122 def test_list_firewall_policies(self):
123 resp, fw_policies = self.client.list_firewall_policies()
124 self.assertEqual('200', resp['status'])
125 fw_policies = fw_policies['firewall_policies']
126 self.assertIn((self.fw_policy['id'],
127 self.fw_policy['name'],
128 self.fw_policy['firewall_rules']),
129 [(m['id'],
130 m['name'],
131 m['firewall_rules']) for m in fw_policies])
132
133 @test.attr(type='smoke')
134 def test_create_update_delete_firewall_policy(self):
135 # Create firewall policy
136 resp, body = self.client.create_firewall_policy(
137 name=data_utils.rand_name("fw-policy"))
138 self.assertEqual('201', resp['status'])
139 fw_policy_id = body['firewall_policy']['id']
140 self.addCleanup(self._try_delete_policy, fw_policy_id)
141
142 # Update firewall policy
143 resp, body = self.client.update_firewall_policy(fw_policy_id,
144 shared=True,
145 name="updated_policy")
146 self.assertEqual('200', resp['status'])
147 updated_fw_policy = body["firewall_policy"]
148 self.assertTrue(updated_fw_policy['shared'])
149 self.assertEqual("updated_policy", updated_fw_policy['name'])
150
151 # Delete firewall policy
152 resp, _ = self.client.delete_firewall_policy(fw_policy_id)
153 self.assertEqual('204', resp['status'])
154 # Confirm deletion
155 resp, fw_policies = self.client.list_firewall_policies()
156 fw_policies = fw_policies['firewall_policies']
157 self.assertNotIn(fw_policy_id, [m['id'] for m in fw_policies])
158
159 @test.attr(type='smoke')
160 def test_show_firewall_policy(self):
161 # show a created firewall policy
162 resp, fw_policy = self.client.show_firewall_policy(
163 self.fw_policy['id'])
164 self.assertEqual('200', resp['status'])
165 fw_policy = fw_policy['firewall_policy']
166 for key, value in fw_policy.iteritems():
167 self.assertEqual(self.fw_policy[key], value)
168
169 @test.attr(type='smoke')
170 def test_create_show_delete_firewall(self):
171 # Create firewall
172 resp, body = self.client.create_firewall(
173 name=data_utils.rand_name("firewall"),
174 firewall_policy_id=self.fw_policy['id'])
175 self.assertEqual('201', resp['status'])
176 created_firewall = body['firewall']
177 firewall_id = created_firewall['id']
178 self.addCleanup(self._try_delete_firewall, firewall_id)
179
180 # show a created firewall
181 resp, firewall = self.client.show_firewall(firewall_id)
182 self.assertEqual('200', resp['status'])
183 firewall = firewall['firewall']
184 for key, value in firewall.iteritems():
185 self.assertEqual(created_firewall[key], value)
186
187 # list firewall
188 resp, firewalls = self.client.list_firewalls()
189 self.assertEqual('200', resp['status'])
190 firewalls = firewalls['firewalls']
191 self.assertIn((created_firewall['id'],
192 created_firewall['name'],
193 created_firewall['firewall_policy_id']),
194 [(m['id'],
195 m['name'],
196 m['firewall_policy_id']) for m in firewalls])
197
198 # Delete firewall
199 resp, _ = self.client.delete_firewall(firewall_id)
200 self.assertEqual('204', resp['status'])
201 # Confirm deletion
202 # TODO(raies): Confirm deletion can be done only when,
203 # deleted firewall status is not "PENDING_DELETE".
204
205
206class FWaaSExtensionTestXML(FWaaSExtensionTestJSON):
207 _interface = 'xml'