blob: 68bc3cd2edcf941f2130d37272a041469def306f [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
Chris Hoge7579c1a2015-02-26 14:12:15 -080070 @test.idempotent_id('e2fb2f8c-45bf-429a-9f17-171c70444612')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050071 def test_list_metering_labels(self):
72 # Verify label filtering
David Kranz34e88122014-12-11 15:24:05 -050073 body = self.admin_client.list_metering_labels(id=33)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050074 metering_labels = body['metering_labels']
75 self.assertEqual(0, len(metering_labels))
76
Chris Hoge7579c1a2015-02-26 14:12:15 -080077 @test.idempotent_id('ec8e15ff-95d0-433b-b8a6-b466bddb1e50')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050078 def test_create_delete_metering_label_with_filters(self):
79 # Creates a label
80 name = data_utils.rand_name('metering-label-')
81 description = "label created by tempest"
David Kranz34e88122014-12-11 15:24:05 -050082 body = self.admin_client.create_metering_label(name=name,
83 description=description)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050084 metering_label = body['metering_label']
85 self.addCleanup(self._delete_metering_label,
86 metering_label['id'])
87 # Assert whether created labels are found in labels list or fail
88 # if created labels are not found in labels list
David Kranz34e88122014-12-11 15:24:05 -050089 labels = (self.admin_client.list_metering_labels(
90 id=metering_label['id']))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050091 self.assertEqual(len(labels['metering_labels']), 1)
92
Chris Hoge7579c1a2015-02-26 14:12:15 -080093 @test.idempotent_id('30abb445-0eea-472e-bd02-8649f54a5968')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050094 def test_show_metering_label(self):
95 # Verifies the details of a label
David Kranz34e88122014-12-11 15:24:05 -050096 body = self.admin_client.show_metering_label(self.metering_label['id'])
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -050097 metering_label = body['metering_label']
98 self.assertEqual(self.metering_label['id'], metering_label['id'])
99 self.assertEqual(self.metering_label['tenant_id'],
100 metering_label['tenant_id'])
101 self.assertEqual(self.metering_label['name'], metering_label['name'])
102 self.assertEqual(self.metering_label['description'],
103 metering_label['description'])
104
Chris Hoge7579c1a2015-02-26 14:12:15 -0800105 @test.idempotent_id('cc832399-6681-493b-9d79-0202831a1281')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500106 def test_list_metering_label_rules(self):
107 # Verify rule filtering
David Kranz34e88122014-12-11 15:24:05 -0500108 body = self.admin_client.list_metering_label_rules(id=33)
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500109 metering_label_rules = body['metering_label_rules']
110 self.assertEqual(0, len(metering_label_rules))
111
Chris Hoge7579c1a2015-02-26 14:12:15 -0800112 @test.idempotent_id('f4d547cd-3aee-408f-bf36-454f8825e045')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500113 def test_create_delete_metering_label_rule_with_filters(self):
114 # Creates a rule
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300115 remote_ip_prefix = ("10.0.1.0/24" if self._ip_version == 4
116 else "fd03::/64")
David Kranz34e88122014-12-11 15:24:05 -0500117 body = (self.admin_client.create_metering_label_rule(
118 remote_ip_prefix=remote_ip_prefix,
119 direction="ingress",
120 metering_label_id=self.metering_label['id']))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500121 metering_label_rule = body['metering_label_rule']
122 self.addCleanup(self._delete_metering_label_rule,
123 metering_label_rule['id'])
124 # Assert whether created rules are found in rules list or fail
125 # if created rules are not found in rules list
David Kranz34e88122014-12-11 15:24:05 -0500126 rules = (self.admin_client.list_metering_label_rules(
127 id=metering_label_rule['id']))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500128 self.assertEqual(len(rules['metering_label_rules']), 1)
129
Chris Hoge7579c1a2015-02-26 14:12:15 -0800130 @test.idempotent_id('b7354489-96ea-41f3-9452-bace120fb4a7')
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500131 def test_show_metering_label_rule(self):
132 # Verifies the details of a rule
David Kranz34e88122014-12-11 15:24:05 -0500133 body = (self.admin_client.show_metering_label_rule(
134 self.metering_label_rule['id']))
Emilien Macchi0d0b7cc2014-01-11 12:30:21 -0500135 metering_label_rule = body['metering_label_rule']
136 self.assertEqual(self.metering_label_rule['id'],
137 metering_label_rule['id'])
138 self.assertEqual(self.metering_label_rule['remote_ip_prefix'],
139 metering_label_rule['remote_ip_prefix'])
140 self.assertEqual(self.metering_label_rule['direction'],
141 metering_label_rule['direction'])
142 self.assertEqual(self.metering_label_rule['metering_label_id'],
143 metering_label_rule['metering_label_id'])
144 self.assertFalse(metering_label_rule['excluded'])
145
146
Ken'ichi Ohmichieb6af632014-12-09 02:13:12 +0000147class MeteringIpV6TestJSON(MeteringTestJSON):
Sergey Shnaidman97e6a0f2014-11-12 20:00:53 +0300148 _ip_version = 6