blob: 7935e5baf7240ed56a7ac39457d9b7647b1750e2 [file] [log] [blame]
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -05001# Copyright (C) 2014 eNovance SAS <licensing@enovance.com>
2#
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -05003# 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
Doug Hellmann583ce2c2015-03-11 14:55:46 +000015from oslo_log import log as logging
Matthew Treinish01472ff2015-02-20 17:26:52 -050016from tempest_lib.common.utils import data_utils
17
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050018from tempest.api.network import base
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050019from tempest import test
20
21
22LOG = logging.getLogger(__name__)
23
24
Ken'ichi Ohmichieb6af632014-12-09 02:13:12 +000025class MeteringTestJSON(base.BaseAdminNetworkTest):
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050026 """
27 Tests the following operations in the Neutron API using the REST client for
28 Neutron:
29
30 List, Show, Create, Delete Metering labels
31 List, Show, Create, Delete Metering labels rules
32 """
33
34 @classmethod
Rohan Kanadea565e452015-01-27 14:00:13 +053035 def skip_checks(cls):
36 super(MeteringTestJSON, cls).skip_checks()
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050037 if not test.is_extension_enabled('metering', 'network'):
38 msg = "metering extension not enabled."
39 raise cls.skipException(msg)
Rohan Kanadea565e452015-01-27 14:00:13 +053040
41 @classmethod
42 def resource_setup(cls):
43 super(MeteringTestJSON, cls).resource_setup()
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050044 description = "metering label created by tempest"
45 name = data_utils.rand_name("metering-label")
Ghanshyame6aea8e2014-07-31 12:41:44 +090046 cls.metering_label = cls.create_metering_label(name, description)
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +030047 remote_ip_prefix = ("10.0.0.0/24" if cls._ip_version == 4
48 else "fd02::/64")
Ghanshyame6aea8e2014-07-31 12:41:44 +090049 direction = "ingress"
50 cls.metering_label_rule = cls.create_metering_label_rule(
51 remote_ip_prefix, direction,
52 metering_label_id=cls.metering_label['id'])
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050053
54 def _delete_metering_label(self, metering_label_id):
55 # Deletes a label and verifies if it is deleted or not
David Kranz34e88122014-12-11 15:24:05 -050056 self.admin_client.delete_metering_label(metering_label_id)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050057 # Asserting that the label is not found in list after deletion
David Kranz34e88122014-12-11 15:24:05 -050058 labels = self.admin_client.list_metering_labels(id=metering_label_id)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050059 self.assertEqual(len(labels['metering_labels']), 0)
60
61 def _delete_metering_label_rule(self, metering_label_rule_id):
62 # Deletes a rule and verifies if it is deleted or not
David Kranz34e88122014-12-11 15:24:05 -050063 self.admin_client.delete_metering_label_rule(
64 metering_label_rule_id)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050065 # Asserting that the rule is not found in list after deletion
David Kranz34e88122014-12-11 15:24:05 -050066 rules = (self.admin_client.list_metering_label_rules(
67 id=metering_label_rule_id))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050068 self.assertEqual(len(rules['metering_label_rules']), 0)
69
70 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080071 @test.idempotent_id('e2fb2f8c-45bf-429a-9f17-171c70444612')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050072 def test_list_metering_labels(self):
73 # Verify label filtering
David Kranz34e88122014-12-11 15:24:05 -050074 body = self.admin_client.list_metering_labels(id=33)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050075 metering_labels = body['metering_labels']
76 self.assertEqual(0, len(metering_labels))
77
78 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080079 @test.idempotent_id('ec8e15ff-95d0-433b-b8a6-b466bddb1e50')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050080 def test_create_delete_metering_label_with_filters(self):
81 # Creates a label
82 name = data_utils.rand_name('metering-label-')
83 description = "label created by tempest"
David Kranz34e88122014-12-11 15:24:05 -050084 body = self.admin_client.create_metering_label(name=name,
85 description=description)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050086 metering_label = body['metering_label']
87 self.addCleanup(self._delete_metering_label,
88 metering_label['id'])
89 # Assert whether created labels are found in labels list or fail
90 # if created labels are not found in labels list
David Kranz34e88122014-12-11 15:24:05 -050091 labels = (self.admin_client.list_metering_labels(
92 id=metering_label['id']))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050093 self.assertEqual(len(labels['metering_labels']), 1)
94
95 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -080096 @test.idempotent_id('30abb445-0eea-472e-bd02-8649f54a5968')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050097 def test_show_metering_label(self):
98 # Verifies the details of a label
David Kranz34e88122014-12-11 15:24:05 -050099 body = self.admin_client.show_metering_label(self.metering_label['id'])
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500100 metering_label = body['metering_label']
101 self.assertEqual(self.metering_label['id'], metering_label['id'])
102 self.assertEqual(self.metering_label['tenant_id'],
103 metering_label['tenant_id'])
104 self.assertEqual(self.metering_label['name'], metering_label['name'])
105 self.assertEqual(self.metering_label['description'],
106 metering_label['description'])
107
108 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800109 @test.idempotent_id('cc832399-6681-493b-9d79-0202831a1281')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500110 def test_list_metering_label_rules(self):
111 # Verify rule filtering
David Kranz34e88122014-12-11 15:24:05 -0500112 body = self.admin_client.list_metering_label_rules(id=33)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500113 metering_label_rules = body['metering_label_rules']
114 self.assertEqual(0, len(metering_label_rules))
115
116 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800117 @test.idempotent_id('f4d547cd-3aee-408f-bf36-454f8825e045')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500118 def test_create_delete_metering_label_rule_with_filters(self):
119 # Creates a rule
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300120 remote_ip_prefix = ("10.0.1.0/24" if self._ip_version == 4
121 else "fd03::/64")
David Kranz34e88122014-12-11 15:24:05 -0500122 body = (self.admin_client.create_metering_label_rule(
123 remote_ip_prefix=remote_ip_prefix,
124 direction="ingress",
125 metering_label_id=self.metering_label['id']))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500126 metering_label_rule = body['metering_label_rule']
127 self.addCleanup(self._delete_metering_label_rule,
128 metering_label_rule['id'])
129 # Assert whether created rules are found in rules list or fail
130 # if created rules are not found in rules list
David Kranz34e88122014-12-11 15:24:05 -0500131 rules = (self.admin_client.list_metering_label_rules(
132 id=metering_label_rule['id']))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500133 self.assertEqual(len(rules['metering_label_rules']), 1)
134
135 @test.attr(type='smoke')
Chris Hoge7579c1a2015-02-26 14:12:15 -0800136 @test.idempotent_id('b7354489-96ea-41f3-9452-bace120fb4a7')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500137 def test_show_metering_label_rule(self):
138 # Verifies the details of a rule
David Kranz34e88122014-12-11 15:24:05 -0500139 body = (self.admin_client.show_metering_label_rule(
140 self.metering_label_rule['id']))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500141 metering_label_rule = body['metering_label_rule']
142 self.assertEqual(self.metering_label_rule['id'],
143 metering_label_rule['id'])
144 self.assertEqual(self.metering_label_rule['remote_ip_prefix'],
145 metering_label_rule['remote_ip_prefix'])
146 self.assertEqual(self.metering_label_rule['direction'],
147 metering_label_rule['direction'])
148 self.assertEqual(self.metering_label_rule['metering_label_id'],
149 metering_label_rule['metering_label_id'])
150 self.assertFalse(metering_label_rule['excluded'])
151
152
Ken'ichi Ohmichieb6af632014-12-09 02:13:12 +0000153class MeteringIpV6TestJSON(MeteringTestJSON):
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300154 _ip_version = 6