1 # Copyright 2021 Canonical Ltd.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
16 from click
.testing
import CliRunner
19 from unittest
.mock
import Mock
, patch
22 from osmclient
.cli_commands
import vca
25 @patch("builtins.print")
26 @patch("osmclient.cli_commands.vca.PrettyTable")
27 @patch("osmclient.scripts.osm.client.Client")
28 @patch("osmclient.cli_commands.utils.check_client_version")
29 @patch("osmclient.cli_commands.vca.utils.get_project")
30 class TestVca(unittest
.TestCase
):
32 self
.runner
= CliRunner()
39 "detailed-status": "status",
40 "operationalState": "state",
47 mock_check_client_version
,
52 mock_client
.return_value
= self
.ctx_obj
53 mock_pretty_table
.return_value
= self
.table
54 mock_get_project
.return_value
= ("5678", "project")
55 self
.ctx_obj
.vca
.list.return_value
= [self
.vca_data
]
59 args
=["--filter", "somefilter"],
61 mock_check_client_version
.assert_called()
62 self
.ctx_obj
.vca
.list.assert_called_with("somefilter")
63 mock_pretty_table
.assert_called_with(["Name", "Id", "Operational State"])
64 self
.table
.add_row
.assert_called_with(["name", "1234", "state"])
65 mock_print
.assert_called_with(self
.table
)
67 def test_vca_list_long(
70 mock_check_client_version
,
75 mock_client
.return_value
= self
.ctx_obj
76 mock_pretty_table
.return_value
= self
.table
77 mock_get_project
.return_value
= ("5678", "project")
78 self
.ctx_obj
.vca
.list.return_value
= [self
.vca_data
]
82 args
=["--filter", "somefilter", "--long"],
84 mock_check_client_version
.assert_called()
85 self
.ctx_obj
.vca
.list.assert_called_with("somefilter")
86 mock_pretty_table
.assert_called_with(
87 ["Name", "Id", "Project", "Operational State", "Detailed Status"]
89 self
.table
.add_row
.assert_called_with(
90 ["name", "1234", "project", "state", "status"]
92 mock_print
.assert_called_with(self
.table
)
94 def test_vca_list_literal(
97 mock_check_client_version
,
102 mock_client
.return_value
= self
.ctx_obj
103 self
.ctx_obj
.vca
.list.return_value
= [self
.vca_data
]
109 mock_check_client_version
.assert_called()
110 self
.ctx_obj
.vca
.list.assert_called()
111 mock_pretty_table
.assert_not_called()
112 self
.table
.add_row
.assert_not_called()
113 mock_print
.assert_called_with(
114 yaml
.safe_dump([self
.vca_data
], indent
=4, default_flow_style
=False)
120 mock_check_client_version
,
125 mock_client
.return_value
= self
.ctx_obj
126 mock_pretty_table
.return_value
= self
.table
127 self
.ctx_obj
.vca
.get
.return_value
= self
.vca_data
133 self
.ctx_obj
.vca
.get
.assert_called_with("name")
134 mock_pretty_table
.assert_called_with(["key", "attribute"])
135 self
.assertEqual(self
.table
.add_row
.call_count
, len(self
.vca_data
))
136 mock_print
.assert_called_with(self
.table
)
138 def test_vca_show_literal(
141 mock_check_client_version
,
146 mock_client
.return_value
= self
.ctx_obj
147 self
.ctx_obj
.vca
.get
.return_value
= self
.vca_data
151 args
=["name", "--literal"],
153 self
.ctx_obj
.vca
.get
.assert_called_with("name")
154 mock_pretty_table
.assert_not_called()
155 self
.table
.add_row
.assert_not_called()
156 mock_print
.assert_called_with(
157 yaml
.safe_dump(self
.vca_data
, indent
=4, default_flow_style
=False)
163 mock_check_client_version
,
168 mock_client
.return_value
= self
.ctx_obj
174 mock_check_client_version
.assert_called()
175 self
.ctx_obj
.vca
.update
.assert_called_with("name", {})
176 mock_pretty_table
.assert_not_called()
177 self
.table
.add_row
.assert_not_called()
178 mock_print
.assert_not_called()
180 def test_vca_update_with_args(
183 mock_check_client_version
,
188 mock_client
.return_value
= self
.ctx_obj
215 json
.dumps({"juju-https-proxy": "http://squid:3128"}),
218 mock_check_client_version
.assert_called()
219 self
.ctx_obj
.vca
.update
.assert_called_with(
223 "endpoints": ["1.2.3.4:17070"],
227 "lxd-cloud": "lxd_cloud",
228 "lxd-credentials": "lxd_credentials",
229 "k8s-cloud": "k8s_cloud",
230 "k8s-credentials": "k8s_credentials",
231 "description": "description",
232 "model-config": {"juju-https-proxy": "http://squid:3128"},
235 mock_pretty_table
.assert_not_called()
236 self
.table
.add_row
.assert_not_called()
237 mock_print
.assert_not_called()
242 mock_check_client_version
,
247 mock_client
.return_value
= self
.ctx_obj
272 json
.dumps({"juju-https-proxy": "http://squid:3128"}),
275 mock_check_client_version
.assert_called()
276 self
.ctx_obj
.vca
.create
.assert_called_with(
280 "endpoints": ["1.2.3.4:17070"],
284 "lxd-cloud": "lxd_cloud",
285 "lxd-credentials": "lxd_credentials",
286 "k8s-cloud": "k8s_cloud",
287 "k8s-credentials": "k8s_credentials",
288 "description": "description",
289 "model-config": {"juju-https-proxy": "http://squid:3128"},
292 mock_pretty_table
.assert_not_called()
293 self
.table
.add_row
.assert_not_called()
294 mock_print
.assert_not_called()
299 mock_check_client_version
,
304 mock_client
.return_value
= self
.ctx_obj
310 mock_check_client_version
.assert_called()
311 self
.ctx_obj
.vca
.delete
.assert_called_with("name", force
=False)
312 mock_pretty_table
.assert_not_called()
313 self
.table
.add_row
.assert_not_called()
314 mock_print
.assert_not_called()
319 mock_check_client_version
,
324 data
= vca
.load(json
.dumps({"juju-https-proxy": "http://squid:3128"}))
325 self
.assertEqual(data
, {"juju-https-proxy": "http://squid:3128"})