2 # Copyright 2021 Canonical Ltd.
4 # Licensed under the Apache License, Version 2.0 (the "License"); you may
5 # not use this file except in compliance with the License. You may obtain
6 # a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 # License for the specific language governing permissions and limitations
16 # For those usages not covered by the Apache License, Version 2.0 please
17 # contact: legal@canonical.com
19 # To get in touch with the maintainers, please contact:
20 # osm-charmers@lists.launchpad.net
24 import zaza
.model
as model
25 from kazoo
.client
import KazooClient
28 def get_zookeeper_uri():
30 zookeeper_units
= model
.get_status().applications
["zookeeper-k8s"]["units"]
31 for i
, unit_name
in enumerate(zookeeper_units
.keys()):
34 unit_ip
= zookeeper_units
[unit_name
]["address"]
36 zookeeper_uri
+= "{}:{}".format(unit_ip
, unit_port
)
41 class BasicDeployment(unittest
.TestCase
):
42 def test_get_zookeeper_uri(self
):
45 def test_zookeeper_connection(self
):
46 zookeeper_uri
= get_zookeeper_uri()
47 zk
= KazooClient(zookeeper_uri
)
48 self
.assertEqual(zk
.state
, "LOST")
50 self
.assertEqual(zk
.state
, "CONNECTED")
52 self
.assertEqual(zk
.state
, "LOST")
54 def test_zookeeper_create_node(self
):
55 zookeeper_uri
= get_zookeeper_uri()
56 zk
= KazooClient(hosts
=zookeeper_uri
, read_only
=True)
59 zk
.ensure_path("/create/new")
60 self
.assertTrue(zk
.exists("/create/new"))
62 zk
.create("/create/new/node", b
"a value")
63 self
.assertTrue(zk
.exists("/create/new/node"))
67 def test_zookeeper_reading_data(self
):
68 zookeeper_uri
= get_zookeeper_uri()
69 zk
= KazooClient(hosts
=zookeeper_uri
, read_only
=True)
72 zk
.ensure_path("/reading/data")
73 zk
.create("/reading/data/node", b
"a value")
75 data
, stat
= zk
.get("/reading/data")
76 self
.assertEqual(data
.decode("utf-8"), "")
78 children
= zk
.get_children("/reading/data")
79 self
.assertEqual(len(children
), 1)
80 self
.assertEqual("node", children
[0])
82 data
, stat
= zk
.get("/reading/data/node")
83 self
.assertEqual(data
.decode("utf-8"), "a value")
86 def test_zookeeper_updating_data(self
):
87 zookeeper_uri
= get_zookeeper_uri()
88 zk
= KazooClient(hosts
=zookeeper_uri
, read_only
=True)
91 zk
.ensure_path("/updating/data")
92 zk
.create("/updating/data/node", b
"a value")
94 data
, stat
= zk
.get("/updating/data/node")
95 self
.assertEqual(data
.decode("utf-8"), "a value")
97 zk
.set("/updating/data/node", b
"b value")
98 data
, stat
= zk
.get("/updating/data/node")
99 self
.assertEqual(data
.decode("utf-8"), "b value")
102 def test_zookeeper_deleting_data(self
):
103 zookeeper_uri
= get_zookeeper_uri()
104 zk
= KazooClient(hosts
=zookeeper_uri
, read_only
=True)
107 zk
.ensure_path("/deleting/data")
108 zk
.create("/deleting/data/node", b
"a value")
110 zk
.delete("/deleting/data/node", recursive
=True)
112 self
.assertFalse(zk
.exists("/deleting/data/node"))
113 self
.assertTrue(zk
.exists("/deleting/data"))
114 data
, stat
= zk
.get("/deleting/data")
115 self
.assertEqual(stat
.numChildren
, 0)
116 zk
.delete("/deleting", recursive
=True)
117 self
.assertFalse(zk
.exists("/deleting"))