blob: 20c3538cdafe4bea9b56d02d3dcf1b4b7af2b471 [file] [log] [blame]
Andrew Kerrfcb0b682016-04-01 16:01:34 -04001# Copyright 2016 Andrew Kerr
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
Ken'ichi Ohmichi8c189082017-04-03 13:47:54 -070016from tempest.api.volume import base
Ken'ichi Ohmichiadb905e2016-08-26 15:16:23 -070017from tempest import config
Ken'ichi Ohmichief1c1ce2017-03-10 11:07:10 -080018from tempest.lib.common.utils import data_utils
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080019from tempest.lib import decorators
Andrew Kerrfcb0b682016-04-01 16:01:34 -040020
Ken'ichi Ohmichiadb905e2016-08-26 15:16:23 -070021CONF = config.CONF
22
Andrew Kerrfcb0b682016-04-01 16:01:34 -040023MESSAGE_KEYS = [
24 'created_at',
25 'event_id',
26 'guaranteed_until',
27 'id',
28 'message_level',
29 'request_id',
30 'resource_type',
31 'resource_uuid',
32 'user_message',
33 'links']
34
35
Ken'ichi Ohmichi8c189082017-04-03 13:47:54 -070036class UserMessagesTest(base.BaseVolumeAdminTest):
37 _api_version = 3
Andrew Kerrfcb0b682016-04-01 16:01:34 -040038 min_microversion = '3.3'
39 max_microversion = 'latest'
40
Andrew Kerrfcb0b682016-04-01 16:01:34 -040041 def _create_user_message(self):
42 """Trigger a 'no valid host' situation to generate a message."""
43 bad_protocol = data_utils.rand_name('storage_protocol')
44 bad_vendor = data_utils.rand_name('vendor_name')
45 extra_specs = {'storage_protocol': bad_protocol,
46 'vendor_name': bad_vendor}
zhuflc6ce5392016-08-17 14:34:37 +080047 vol_type_name = data_utils.rand_name(
48 self.__class__.__name__ + '-volume-type')
Benny Kopilov8a33ee12016-11-09 10:35:23 +020049 bogus_type = self.create_volume_type(
50 name=vol_type_name, extra_specs=extra_specs)
Ken'ichi Ohmichiadb905e2016-08-26 15:16:23 -070051 params = {'volume_type': bogus_type['id'],
52 'size': CONF.volume.volume_size}
Benny Kopilov8a33ee12016-11-09 10:35:23 +020053 volume = self.create_volume(wait_until="error", **params)
Andrew Kerrfcb0b682016-04-01 16:01:34 -040054 messages = self.messages_client.list_messages()['messages']
55 message_id = None
56 for message in messages:
57 if message['resource_uuid'] == volume['id']:
58 message_id = message['id']
59 break
60 self.assertIsNotNone(message_id, 'No user message generated for '
61 'volume %s' % volume['id'])
62 return message_id
63
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080064 @decorators.idempotent_id('50f29e6e-f363-42e1-8ad1-f67ae7fd4d5a')
Andrew Kerrfcb0b682016-04-01 16:01:34 -040065 def test_list_messages(self):
66 self._create_user_message()
67 messages = self.messages_client.list_messages()['messages']
68 self.assertIsInstance(messages, list)
69 for message in messages:
70 for key in MESSAGE_KEYS:
71 self.assertIn(key, message.keys(),
72 'Missing expected key %s' % key)
73
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080074 @decorators.idempotent_id('55a4a61e-c7b2-4ba0-a05d-b914bdef3070')
Andrew Kerrfcb0b682016-04-01 16:01:34 -040075 def test_show_message(self):
76 message_id = self._create_user_message()
77 self.addCleanup(self.messages_client.delete_message, message_id)
78
79 message = self.messages_client.show_message(message_id)['message']
80
81 for key in MESSAGE_KEYS:
82 self.assertIn(key, message.keys(), 'Missing expected key %s' % key)
83
Ken'ichi Ohmichi6b279c72017-01-27 18:26:59 -080084 @decorators.idempotent_id('c6eb6901-cdcc-490f-b735-4fe251842aed')
Andrew Kerrfcb0b682016-04-01 16:01:34 -040085 def test_delete_message(self):
86 message_id = self._create_user_message()
87 self.messages_client.delete_message(message_id)
88 self.messages_client.wait_for_resource_deletion(message_id)