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.
18 from unittest
.mock
import Mock
, patch
22 from click
.testing
import CliRunner
23 from osmclient
.scripts
import osm
26 @patch("builtins.print")
27 @patch("osmclient.scripts.osm.PrettyTable")
28 @patch("osmclient.scripts.osm.client.Client")
29 @patch("osmclient.scripts.osm.check_client_version")
30 @patch("osmclient.scripts.osm.get_project")
31 class TestVca(unittest
.TestCase
):
33 self
.runner
= CliRunner()
40 "detailed-status": "status",
41 "operationalState": "state",
48 mock_check_client_version
,
53 mock_client
.return_value
= self
.ctx_obj
54 mock_pretty_table
.return_value
= self
.table
55 mock_get_project
.return_value
= ("5678", "project")
56 self
.ctx_obj
.vca
.list.return_value
= [self
.vca_data
]
59 ["vca-list", "--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
]
81 ["vca-list", "--filter", "somefilter", "--long"],
83 mock_check_client_version
.assert_called()
84 self
.ctx_obj
.vca
.list.assert_called_with("somefilter")
85 mock_pretty_table
.assert_called_with(
86 ["Name", "Id", "Project", "Operational State", "Detailed Status"]
88 self
.table
.add_row
.assert_called_with(
89 ["name", "1234", "project", "state", "status"]
91 mock_print
.assert_called_with(self
.table
)
93 def test_vca_list_literal(
96 mock_check_client_version
,
101 mock_client
.return_value
= self
.ctx_obj
102 self
.ctx_obj
.vca
.list.return_value
= [self
.vca_data
]
105 ["vca-list", "--literal"],
107 mock_check_client_version
.assert_called()
108 self
.ctx_obj
.vca
.list.assert_called()
109 mock_pretty_table
.assert_not_called()
110 self
.table
.add_row
.assert_not_called()
111 mock_print
.assert_called_with(
112 yaml
.safe_dump([self
.vca_data
], indent
=4, default_flow_style
=False)
118 mock_check_client_version
,
123 mock_client
.return_value
= self
.ctx_obj
124 mock_pretty_table
.return_value
= self
.table
125 self
.ctx_obj
.vca
.get
.return_value
= self
.vca_data
128 ["vca-show", "name"],
130 self
.ctx_obj
.vca
.get
.assert_called_with("name")
131 mock_pretty_table
.assert_called_with(["key", "attribute"])
132 self
.assertEqual(self
.table
.add_row
.call_count
, len(self
.vca_data
))
133 mock_print
.assert_called_with(self
.table
)
135 def test_vca_show_literal(
138 mock_check_client_version
,
143 mock_client
.return_value
= self
.ctx_obj
144 self
.ctx_obj
.vca
.get
.return_value
= self
.vca_data
147 ["vca-show", "name", "--literal"],
149 self
.ctx_obj
.vca
.get
.assert_called_with("name")
150 mock_pretty_table
.assert_not_called()
151 self
.table
.add_row
.assert_not_called()
152 mock_print
.assert_called_with(
153 yaml
.safe_dump(self
.vca_data
, indent
=4, default_flow_style
=False)
159 mock_check_client_version
,
164 mock_client
.return_value
= self
.ctx_obj
167 ["vca-update", "name"],
169 mock_check_client_version
.assert_called()
170 self
.ctx_obj
.vca
.update
.assert_called_with("name", {"name": "name"})
171 mock_pretty_table
.assert_not_called()
172 self
.table
.add_row
.assert_not_called()
173 mock_print
.assert_not_called()
175 def test_vca_update_with_args(
178 mock_check_client_version
,
183 mock_client
.return_value
= self
.ctx_obj
208 json
.dumps({"juju-https-proxy": "http://squid:3128"}),
211 mock_check_client_version
.assert_called()
212 self
.ctx_obj
.vca
.update
.assert_called_with(
216 "endpoints": ["1.2.3.4:17070"],
220 "lxd-cloud": "lxd_cloud",
221 "lxd-credentials": "lxd_credentials",
222 "k8s-cloud": "k8s_cloud",
223 "k8s-credentials": "k8s_credentials",
224 "description": "description",
225 "model-config": {"juju-https-proxy": "http://squid:3128"},
228 mock_pretty_table
.assert_not_called()
229 self
.table
.add_row
.assert_not_called()
230 mock_print
.assert_not_called()
235 mock_check_client_version
,
240 mock_client
.return_value
= self
.ctx_obj
265 json
.dumps({"juju-https-proxy": "http://squid:3128"}),
268 mock_check_client_version
.assert_called()
269 self
.ctx_obj
.vca
.create
.assert_called_with(
273 "endpoints": ["1.2.3.4:17070"],
277 "lxd-cloud": "lxd_cloud",
278 "lxd-credentials": "lxd_credentials",
279 "k8s-cloud": "k8s_cloud",
280 "k8s-credentials": "k8s_credentials",
281 "description": "description",
282 "model-config": {"juju-https-proxy": "http://squid:3128"},
285 mock_pretty_table
.assert_not_called()
286 self
.table
.add_row
.assert_not_called()
287 mock_print
.assert_not_called()
292 mock_check_client_version
,
297 mock_client
.return_value
= self
.ctx_obj
300 ["vca-delete", "name"],
302 mock_check_client_version
.assert_called()
303 self
.ctx_obj
.vca
.delete
.assert_called_with("name", force
=False)
304 mock_pretty_table
.assert_not_called()
305 self
.table
.add_row
.assert_not_called()
306 mock_print
.assert_not_called()
311 mock_check_client_version
,
316 data
= osm
.load(json
.dumps({"juju-https-proxy": "http://squid:3128"}))
317 self
.assertEqual(data
, {"juju-https-proxy": "http://squid:3128"})