1#   Copyright 2017 Huawei, Inc. 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#
15
16from openstackclient.compute.v2 import server_event
17from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
18
19
20class TestServerEvent(compute_fakes.TestComputev2):
21
22    fake_server = compute_fakes.FakeServer.create_one_server()
23
24    def setUp(self):
25        super(TestServerEvent, self).setUp()
26
27        self.servers_mock = self.app.client_manager.compute.servers
28        self.servers_mock.reset_mock()
29        self.events_mock = self.app.client_manager.compute.instance_action
30        self.events_mock.reset_mock()
31
32        self.servers_mock.get.return_value = self.fake_server
33
34
35class TestListServerEvent(TestServerEvent):
36
37    fake_event = compute_fakes.FakeServerEvent.create_one_server_event()
38
39    columns = (
40        'Request ID',
41        'Server ID',
42        'Action',
43        'Start Time',
44    )
45    data = ((
46        fake_event.request_id,
47        fake_event.instance_uuid,
48        fake_event.action,
49        fake_event.start_time,
50    ), )
51
52    long_columns = (
53        'Request ID',
54        'Server ID',
55        'Action',
56        'Start Time',
57        'Message',
58        'Project ID',
59        'User ID',
60    )
61    long_data = ((
62        fake_event.request_id,
63        fake_event.instance_uuid,
64        fake_event.action,
65        fake_event.start_time,
66        fake_event.message,
67        fake_event.project_id,
68        fake_event.user_id,
69    ), )
70
71    def setUp(self):
72        super(TestListServerEvent, self).setUp()
73
74        self.events_mock.list.return_value = [self.fake_event, ]
75        self.cmd = server_event.ListServerEvent(self.app, None)
76
77    def test_server_event_list(self):
78        arglist = [
79            self.fake_server.name,
80        ]
81        verifylist = [
82            ('server', self.fake_server.name),
83            ('long', False),
84        ]
85
86        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
87
88        columns, data = self.cmd.take_action(parsed_args)
89
90        self.servers_mock.get.assert_called_once_with(self.fake_server.name)
91        self.events_mock.list.assert_called_once_with(self.fake_server.id)
92
93        self.assertEqual(self.columns, columns)
94        self.assertEqual(self.data, tuple(data))
95
96    def test_server_event_list_long(self):
97        arglist = [
98            '--long',
99            self.fake_server.name,
100        ]
101        verifylist = [
102            ('server', self.fake_server.name),
103            ('long', True),
104        ]
105
106        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
107
108        columns, data = self.cmd.take_action(parsed_args)
109
110        self.servers_mock.get.assert_called_once_with(self.fake_server.name)
111        self.events_mock.list.assert_called_once_with(self.fake_server.id)
112
113        self.assertEqual(self.long_columns, columns)
114        self.assertEqual(self.long_data, tuple(data))
115
116
117class TestShowServerEvent(TestServerEvent):
118
119    fake_event = compute_fakes.FakeServerEvent.create_one_server_event()
120
121    columns = (
122        'action',
123        'events',
124        'instance_uuid',
125        'message',
126        'project_id',
127        'request_id',
128        'start_time',
129        'user_id',
130    )
131    data = (
132        fake_event.action,
133        fake_event.events,
134        fake_event.instance_uuid,
135        fake_event.message,
136        fake_event.project_id,
137        fake_event.request_id,
138        fake_event.start_time,
139        fake_event.user_id,
140    )
141
142    def setUp(self):
143        super(TestShowServerEvent, self).setUp()
144
145        self.events_mock.get.return_value = self.fake_event
146        self.cmd = server_event.ShowServerEvent(self.app, None)
147
148    def test_server_event_show(self):
149        arglist = [
150            self.fake_server.name,
151            self.fake_event.request_id,
152        ]
153        verifylist = [
154            ('server', self.fake_server.name),
155            ('request_id', self.fake_event.request_id),
156        ]
157
158        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
159
160        columns, data = self.cmd.take_action(parsed_args)
161
162        self.servers_mock.get.assert_called_once_with(self.fake_server.name)
163        self.events_mock.get.assert_called_once_with(
164            self.fake_server.id, self.fake_event.request_id)
165
166        self.assertEqual(self.columns, columns)
167        self.assertEqual(self.data, data)
168