class ProvisionerZooKeeperStoreTests(BaseProvisionerStoreTests, ZooKeeperTestMixin): # this runs all of the BaseProvisionerStoreTests tests plus any # ZK-specific ones def setUp(self): self.setup_zookeeper() self.store = ProvisionerZooKeeperStore(self.zk_hosts, self.zk_base_path, use_gevent=self.use_gevent) self.store.initialize() def tearDown(self): if self.store: self.store.shutdown() self.teardown_zookeeper() def test_leader_election(self): leader = FakeLeader() self.store.contend_leader(leader) with leader.condition: if not leader.is_leader: leader.condition.wait(5) self.assertTrue(leader.is_leader) def test_disable(self): self.assertFalse(self.store.is_disabled()) self.assertFalse(self.store.is_disabled_agreed()) self.store.disable_provisioning() # peek into internals with self.store._disabled_condition: if not self.store.is_disabled(): self.store._disabled_condition.wait(5) self.assertTrue(self.store.is_disabled()) self.assertTrue(self.store.is_disabled_agreed()) self.store.enable_provisioning() with self.store._disabled_condition: if self.store.is_disabled(): self.store._disabled_condition.wait(5) self.assertFalse(self.store.is_disabled()) self.assertFalse(self.store.is_disabled_agreed())