blob: ce16353f115933fd5b5a6bae980489ebe4044a82 [file] [log] [blame]
Leo Toyoda3ae31e12013-04-19 11:19:57 +09001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2013 NEC Corporation
Liu, Zhi Kund42c9912013-07-18 23:03:57 +08004# Copyright 2013 IBM Corp.
Leo Toyoda3ae31e12013-04-19 11:19:57 +09005# All Rights Reserved.
6#
7# Licensed under the Apache License, Version 2.0 (the "License"); you may
8# not use this file except in compliance with the License. You may obtain
9# a copy of the License at
10#
11# http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing, software
14# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16# License for the specific language governing permissions and limitations
17# under the License.
18
Sean Dague1937d092013-05-17 16:36:38 -040019from tempest.api.compute import base
Leo Toyoda3ae31e12013-04-19 11:19:57 +090020from tempest import exceptions
21from tempest.test import attr
Leo Toyoda3ae31e12013-04-19 11:19:57 +090022
23
24class ServicesAdminTestJSON(base.BaseComputeAdminTest):
25
26 """
27 Tests Services API. List and Enable/Disable require admin privileges.
28 """
29
30 _interface = 'json'
31
32 @classmethod
33 def setUpClass(cls):
34 super(ServicesAdminTestJSON, cls).setUpClass()
35 cls.client = cls.os_adm.services_client
36 cls.non_admin_client = cls.services_client
37
Giulio Fidenteba3985a2013-05-29 01:46:36 +020038 @attr(type='gate')
Leo Toyoda3ae31e12013-04-19 11:19:57 +090039 def test_list_services(self):
Leo Toyoda3ae31e12013-04-19 11:19:57 +090040 resp, services = self.client.list_services()
41 self.assertEqual(200, resp.status)
Liu, Zhi Kund42c9912013-07-18 23:03:57 +080042 self.assertNotEqual(0, len(services))
Leo Toyoda3ae31e12013-04-19 11:19:57 +090043
Giampaolo Lauriae9c77022013-05-22 01:23:58 -040044 @attr(type=['negative', 'gate'])
Leo Toyoda3ae31e12013-04-19 11:19:57 +090045 def test_list_services_with_non_admin_user(self):
Leo Toyoda3ae31e12013-04-19 11:19:57 +090046 self.assertRaises(exceptions.Unauthorized,
47 self.non_admin_client.list_services)
48
Liu, Zhi Kund42c9912013-07-18 23:03:57 +080049 @attr(type='gate')
50 def test_get_service_by_service_binary_name(self):
51 binary_name = 'nova-compute'
52 params = {'binary': binary_name}
53 resp, services = self.client.list_services(params)
54 self.assertEqual(200, resp.status)
55 self.assertNotEqual(0, len(services))
56 for service in services:
57 self.assertEqual(binary_name, service['binary'])
58
59 @attr(type='gate')
60 def test_get_service_by_host_name(self):
61 resp, services = self.client.list_services()
62 host_name = services[0]['host']
63 services_on_host = [service for service in services if
64 service['host'] == host_name]
65 params = {'host': host_name}
66 resp, services = self.client.list_services(params)
Sean Dague3b616492013-07-26 15:04:12 -040067
68 # we could have a periodic job checkin between the 2 service
69 # lookups, so only compare binary lists.
70 s1 = map(lambda x: x['binary'], services)
71 s2 = map(lambda x: x['binary'], services_on_host)
72 self.assertEqual(s1, s2)
Liu, Zhi Kund42c9912013-07-18 23:03:57 +080073
74 @attr(type=['negative', 'gate'])
75 def test_get_service_by_invalid_params(self):
76 #return all services if send the request with invalid parameter
77 resp, services = self.client.list_services()
78 params = {'xxx': 'nova-compute'}
79 resp, services_xxx = self.client.list_services(params)
80 self.assertEqual(200, resp.status)
81 self.assertEqual(len(services), len(services_xxx))
82
83 @attr(type='gate')
84 def test_get_service_by_service_and_host_name(self):
85 resp, services = self.client.list_services()
86 host_name = services[0]['host']
87 binary_name = services[0]['binary']
88 params = {'host': host_name, 'binary': binary_name}
89 resp, services = self.client.list_services(params)
90 self.assertEqual(200, resp.status)
91 self.assertEqual(1, len(services))
92 self.assertEqual(host_name, services[0]['host'])
93 self.assertEqual(binary_name, services[0]['binary'])
94
95 @attr(type=['negative', 'gate'])
96 def test_get_service_by_invalid_service_and_valid_host(self):
97 resp, services = self.client.list_services()
98 host_name = services[0]['host']
99 params = {'host': host_name, 'binary': 'xxx'}
100 resp, services = self.client.list_services(params)
101 self.assertEqual(200, resp.status)
102 self.assertEqual(0, len(services))
103
104 @attr(type=['negative', 'gate'])
105 def test_get_service_with_valid_service_and_invalid_host(self):
106 resp, services = self.client.list_services()
107 binary_name = services[0]['binary']
108 params = {'host': 'xxx', 'binary': binary_name}
109 resp, services = self.client.list_services(params)
110 self.assertEqual(200, resp.status)
111 self.assertEqual(0, len(services))
112
113 @attr(type='gate')
114 def test_service_enable_disable(self):
115 resp, services = self.client.list_services()
116 host_name = services[0]['host']
117 binary_name = services[0]['binary']
118
119 resp, service = self.client.disable_service(host_name, binary_name)
120 self.assertEqual(200, resp.status)
121 params = {'host': host_name, 'binary': binary_name}
122 resp, services = self.client.list_services(params)
123 self.assertEqual('disabled', services[0]['status'])
124
125 resp, service = self.client.enable_service(host_name, binary_name)
126 self.assertEqual(200, resp.status)
127 resp, services = self.client.list_services(params)
128 self.assertEqual('enabled', services[0]['status'])
129
Leo Toyoda3ae31e12013-04-19 11:19:57 +0900130
131class ServicesAdminTestXML(ServicesAdminTestJSON):
132 _interface = 'xml'