23
23
self.environment = {
24
24
"JUJU_ENV_UUID": str(uuid4()),
25
25
"JUJU_API_ADRESSES": "juju.example.com:12345"}
28
def log(self, message):
29
self.logs.append(message)
27
31
def _run_juju_tool(self, command):
28
32
"""Override _run_juju_tool not not execute any commands."""
29
33
return self.commands[command]
32
class FakeLandscapeBroker(LandscapeBroker):
33
"""A LandscapeBroker taht can be use in unittests."""
36
class FakeLandscapeBroker(common.LandscapeBroker):
37
"""A LandscapeBroker that can be use in unittests."""
35
39
def try_to_register(self):
36
40
"""Don't check system files or try to actually register the client."""
171
175
self.hook(self.juju_broker, self.landscape_broker)
173
177
self.assertEqual([True], registration_attempts)
180
class CephClientRelationJoinedTest(TestCase):
181
"""Test for the ceph-client-relation-changed hook."""
184
data_path = mkdtemp(prefix=self.__class__.__name__)
185
self.addCleanup(rmtree, data_path)
186
self.landscape_broker = FakeLandscapeBroker()
187
self.landscape_broker.config.data_path = data_path
188
self.landscape_broker.config.config = os.path.join(
189
data_path, "landscape.conf")
190
# self.landscape_broker.config.account_name = "account1"
191
self.landscape_broker.config.write()
192
self.juju_broker = FakeJujuBroker()
193
self.chowned_files = []
195
def stub_chown(filepath):
196
self.chowned_files.append(filepath)
197
hooks.chown = stub_chown
198
# self.juju_broker.environment["JUJU_REMOTE_UNIT"] = "remote/0"
199
self.hook = hooks.HOOKS["ceph-client-relation-changed"]
201
def test_nothing_to_do_with_no_key(self):
203
If there's no key in the relation information provided by ceph,
206
self.assertEqual(0, self.hook(self.juju_broker, self.landscape_broker))
208
[log] = self.juju_broker.logs
210
"Ceph key not reported in relation config, nothing to do.", log)
212
def test_ceph_client_path_made(self):
214
If the ceph client path doesn't exist already it's created and chowned.
216
self.juju_broker.commands["relation-get"] = {
217
"key": "foo", "auth": "bar", "private-address": "home"}
219
def stub_ceph_write(*args):
221
hooks.write_ceph_client_keyring = stub_ceph_write
222
hooks.write_ceph_client_config = stub_ceph_write
224
self.assertEqual(0, self.hook(self.juju_broker, self.landscape_broker))
226
ceph_client_dir = os.path.join(
227
self.landscape_broker.config.data_path, "ceph-client")
228
self.assertTrue(os.path.exists(ceph_client_dir))
229
self.assertEqual([ceph_client_dir], self.chowned_files)
231
def test_write_ceph_client_keyring_called(self):
233
write_ceph_client_keyring is called with the key from the Juju
236
self.juju_broker.commands["relation-get"] = {
237
"key": "foo", "auth": "bar", "private-address": "home"}
241
def stub_write_ceph_client_keyring(*args):
242
called_args.append(args)
244
hooks.write_ceph_client_keyring = stub_write_ceph_client_keyring
246
def stub_ceph_write(*args):
248
hooks.write_ceph_client_config = stub_ceph_write
250
self.assertEqual(0, self.hook(self.juju_broker, self.landscape_broker))
253
(self.landscape_broker, "landscape-client", "foo"), args)
255
def test_write_ceph_client_config_called(self):
257
write_ceph_client_config is called with the auth and
258
private-address from the Juju relation config.
260
self.juju_broker.commands["relation-get"] = {
261
"key": "foo", "auth": "bar", "private-address": "home"}
264
keyring_file = object()
266
def stub_ceph_write(*args):
269
hooks.write_ceph_client_keyring = stub_ceph_write
271
def stub_write_ceph_client_config(*args):
272
called_args.append(args)
273
hooks.write_ceph_client_config = stub_write_ceph_client_config
275
self.assertEqual(0, self.hook(self.juju_broker, self.landscape_broker))
278
(self.landscape_broker, "bar", keyring_file, "home"), args)
280
def test_confirmation_logged(self):
281
self.juju_broker.commands["relation-get"] = {
282
"key": "foo", "auth": "bar", "private-address": "home"}
284
def stub_ceph_write(*args):
286
hooks.write_ceph_client_keyring = stub_ceph_write
287
hooks.write_ceph_client_config = stub_ceph_write
289
self.assertEqual(0, self.hook(self.juju_broker, self.landscape_broker))
291
[log] = self.juju_broker.logs
292
self.assertEqual("Ceph configuration written to file.", log)