1# Copyright 2016 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 unittest import mock 17 18from openstackclient.compute.v2 import console 19from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes 20 21 22class TestConsole(compute_fakes.TestComputev2): 23 24 def setUp(self): 25 super(TestConsole, self).setUp() 26 self.servers_mock = self.app.client_manager.compute.servers 27 self.servers_mock.reset_mock() 28 29 30class TestConsoleUrlShow(TestConsole): 31 32 def setUp(self): 33 super(TestConsoleUrlShow, self).setUp() 34 fake_console_data = {'remote_console': {'url': 'http://localhost', 35 'protocol': 'fake_protocol', 36 'type': 'fake_type'}} 37 methods = { 38 'get_console_url': fake_console_data 39 } 40 self.fake_server = compute_fakes.FakeServer.create_one_server( 41 methods=methods) 42 self.servers_mock.get.return_value = self.fake_server 43 44 self.columns = ( 45 'protocol', 46 'type', 47 'url', 48 ) 49 self.data = ( 50 fake_console_data['remote_console']['protocol'], 51 fake_console_data['remote_console']['type'], 52 fake_console_data['remote_console']['url'] 53 ) 54 55 self.cmd = console.ShowConsoleURL(self.app, None) 56 57 def test_console_url_show_by_default(self): 58 arglist = [ 59 'foo_vm', 60 ] 61 verifylist = [ 62 ('url_type', 'novnc'), 63 ('server', 'foo_vm'), 64 ] 65 parsed_args = self.check_parser(self.cmd, arglist, verifylist) 66 columns, data = self.cmd.take_action(parsed_args) 67 self.fake_server.get_console_url.assert_called_once_with('novnc') 68 self.assertEqual(self.columns, columns) 69 self.assertEqual(self.data, data) 70 71 def test_console_url_show_with_novnc(self): 72 arglist = [ 73 '--novnc', 74 'foo_vm', 75 ] 76 verifylist = [ 77 ('url_type', 'novnc'), 78 ('server', 'foo_vm'), 79 ] 80 parsed_args = self.check_parser(self.cmd, arglist, verifylist) 81 columns, data = self.cmd.take_action(parsed_args) 82 self.fake_server.get_console_url.assert_called_once_with('novnc') 83 self.assertEqual(self.columns, columns) 84 self.assertEqual(self.data, data) 85 86 def test_console_url_show_with_xvpvnc(self): 87 arglist = [ 88 '--xvpvnc', 89 'foo_vm', 90 ] 91 verifylist = [ 92 ('url_type', 'xvpvnc'), 93 ('server', 'foo_vm'), 94 ] 95 parsed_args = self.check_parser(self.cmd, arglist, verifylist) 96 columns, data = self.cmd.take_action(parsed_args) 97 self.fake_server.get_console_url.assert_called_once_with('xvpvnc') 98 self.assertEqual(self.columns, columns) 99 self.assertEqual(self.data, data) 100 101 def test_console_url_show_with_spice(self): 102 arglist = [ 103 '--spice', 104 'foo_vm', 105 ] 106 verifylist = [ 107 ('url_type', 'spice-html5'), 108 ('server', 'foo_vm'), 109 ] 110 parsed_args = self.check_parser(self.cmd, arglist, verifylist) 111 columns, data = self.cmd.take_action(parsed_args) 112 self.fake_server.get_console_url.assert_called_once_with( 113 'spice-html5') 114 self.assertEqual(self.columns, columns) 115 self.assertEqual(self.data, data) 116 117 def test_console_url_show_compatible(self): 118 methods = { 119 'get_console_url': {'console': {'url': 'http://localhost', 120 'type': 'fake_type'}}, 121 } 122 old_fake_server = compute_fakes.FakeServer.create_one_server( 123 methods=methods) 124 old_columns = ( 125 'type', 126 'url', 127 ) 128 old_data = ( 129 methods['get_console_url']['console']['type'], 130 methods['get_console_url']['console']['url'] 131 ) 132 arglist = [ 133 'foo_vm', 134 ] 135 verifylist = [ 136 ('url_type', 'novnc'), 137 ('server', 'foo_vm'), 138 ] 139 parsed_args = self.check_parser(self.cmd, arglist, verifylist) 140 with mock.patch.object(self.servers_mock, 'get', 141 return_value=old_fake_server): 142 columns, data = self.cmd.take_action(parsed_args) 143 old_fake_server.get_console_url.assert_called_once_with('novnc') 144 self.assertEqual(old_columns, columns) 145 self.assertEqual(old_data, data) 146 147 def test_console_url_show_with_rdp(self): 148 arglist = [ 149 '--rdp', 150 'foo_vm', 151 ] 152 verifylist = [ 153 ('url_type', 'rdp-html5'), 154 ('server', 'foo_vm'), 155 ] 156 parsed_args = self.check_parser(self.cmd, arglist, verifylist) 157 columns, data = self.cmd.take_action(parsed_args) 158 self.fake_server.get_console_url.assert_called_once_with( 159 'rdp-html5') 160 self.assertEqual(self.columns, columns) 161 self.assertEqual(self.data, data) 162 163 def test_console_url_show_with_serial(self): 164 arglist = [ 165 '--serial', 166 'foo_vm', 167 ] 168 verifylist = [ 169 ('url_type', 'serial'), 170 ('server', 'foo_vm'), 171 ] 172 parsed_args = self.check_parser(self.cmd, arglist, verifylist) 173 columns, data = self.cmd.take_action(parsed_args) 174 self.fake_server.get_console_url.assert_called_once_with( 175 'serial') 176 self.assertEqual(self.columns, columns) 177 self.assertEqual(self.data, data) 178 179 def test_console_url_show_with_mks(self): 180 arglist = [ 181 '--mks', 182 'foo_vm', 183 ] 184 verifylist = [ 185 ('url_type', 'webmks'), 186 ('server', 'foo_vm'), 187 ] 188 parsed_args = self.check_parser(self.cmd, arglist, verifylist) 189 columns, data = self.cmd.take_action(parsed_args) 190 self.fake_server.get_console_url.assert_called_once_with('webmks') 191 self.assertEqual(self.columns, columns) 192 self.assertEqual(self.data, data) 193