3 from pathlib
import Path
4 from tempfile
import NamedTemporaryFile
6 from juju
.controller
import Controller
7 from juju
.client
import client
12 class TestControllerConnect(asynctest
.TestCase
):
13 @asynctest.patch('juju.client.connector.Connector.connect_controller')
14 async def test_no_args(self
, mock_connect_controller
):
17 mock_connect_controller
.assert_called_once_with(None)
19 @asynctest.patch('juju.client.connector.Connector.connect_controller')
20 async def test_with_controller_name(self
, mock_connect_controller
):
22 await c
.connect(controller_name
='foo')
23 mock_connect_controller
.assert_called_once_with('foo')
25 @asynctest.patch('juju.client.connector.Connector.connect')
26 async def test_with_endpoint_and_no_auth(self
, mock_connect
):
28 with self
.assertRaises(TypeError):
29 await c
.connect(endpoint
='0.1.2.3:4566')
30 self
.assertEqual(mock_connect
.call_count
, 0)
32 @asynctest.patch('juju.client.connector.Connector.connect')
33 async def test_with_endpoint_and_userpass(self
, mock_connect
):
35 with self
.assertRaises(TypeError):
36 await c
.connect(endpoint
='0.1.2.3:4566', username
='dummy')
37 await c
.connect(endpoint
='0.1.2.3:4566',
40 mock_connect
.assert_called_once_with(endpoint
='0.1.2.3:4566',
44 @asynctest.patch('juju.client.connector.Connector.connect')
45 async def test_with_endpoint_and_bakery_client(self
, mock_connect
):
47 await c
.connect(endpoint
='0.1.2.3:4566', bakery_client
='bakery')
48 mock_connect
.assert_called_once_with(endpoint
='0.1.2.3:4566',
49 bakery_client
='bakery')
51 @asynctest.patch('juju.client.connector.Connector.connect')
52 async def test_with_endpoint_and_macaroons(self
, mock_connect
):
54 await c
.connect(endpoint
='0.1.2.3:4566',
55 macaroons
=['macaroon'])
56 mock_connect
.assert_called_with(endpoint
='0.1.2.3:4566',
57 macaroons
=['macaroon'])
58 await c
.connect(endpoint
='0.1.2.3:4566',
59 bakery_client
='bakery',
60 macaroons
=['macaroon'])
61 mock_connect
.assert_called_with(endpoint
='0.1.2.3:4566',
62 bakery_client
='bakery',
63 macaroons
=['macaroon'])
65 @asynctest.patch('juju.client.connector.Connector.connect_controller')
66 @asynctest.patch('juju.client.connector.Connector.connect')
67 async def test_with_posargs(self
, mock_connect
, mock_connect_controller
):
69 await c
.connect('foo')
70 mock_connect_controller
.assert_called_once_with('foo')
71 with self
.assertRaises(TypeError):
72 await c
.connect('endpoint', 'user')
73 await c
.connect('endpoint', 'user', 'pass')
74 mock_connect
.assert_called_once_with(endpoint
='endpoint',
77 await c
.connect('endpoint', 'user', 'pass', 'cacert', 'bakery',
78 'macaroons', 'loop', 'max_frame_size')
79 mock_connect
.assert_called_with(endpoint
='endpoint',
83 bakery_client
='bakery',
84 macaroons
='macaroons',
86 max_frame_size
='max_frame_size')
88 @asynctest.patch('juju.client.client.CloudFacade')
89 async def test_file_cred_v2(self
, mock_cf
):
90 with
NamedTemporaryFile() as tempfile
:
92 temppath
= Path(tempfile
.name
)
93 temppath
.write_text('cred-test')
94 cred
= client
.CloudCredential(auth_type
='jsonfile',
95 attrs
={'file': tempfile
.name
})
96 jujudata
= mock
.MagicMock()
97 c
= Controller(jujudata
=jujudata
)
98 c
._connector
= base
.AsyncMock()
99 up_creds
= base
.AsyncMock()
100 cloud_facade
= mock_cf
.from_connection()
101 cloud_facade
.version
= 2
102 cloud_facade
.UpdateCredentials
= up_creds
103 await c
.add_credential(
109 assert up_creds
.called
110 new_cred
= up_creds
.call_args
[0][0][0].credential
111 assert cred
.attrs
['file'] == tempfile
.name
112 assert new_cred
.attrs
['file'] == 'cred-test'
114 @asynctest.patch('juju.client.client.CloudFacade')
115 async def test_file_cred_v3(self
, mock_cf
):
116 with
NamedTemporaryFile() as tempfile
:
118 temppath
= Path(tempfile
.name
)
119 temppath
.write_text('cred-test')
120 cred
= client
.CloudCredential(auth_type
='jsonfile',
121 attrs
={'file': tempfile
.name
})
122 jujudata
= mock
.MagicMock()
123 c
= Controller(jujudata
=jujudata
)
124 c
._connector
= base
.AsyncMock()
125 up_creds
= base
.AsyncMock()
126 cloud_facade
= mock_cf
.from_connection()
127 cloud_facade
.version
= 3
128 cloud_facade
.UpdateCredentialsCheckModels
= up_creds
129 await c
.add_credential(
136 assert up_creds
.called
137 assert up_creds
.call_args
[1]['force']
138 new_cred
= up_creds
.call_args
[1]['credentials'][0].credential
139 assert cred
.attrs
['file'] == tempfile
.name
140 assert new_cred
.attrs
['file'] == 'cred-test'