def test_as_app(self): """The agent class can be accessed as an application.""" app = BaseAgent().as_app() multi_service = IService(app, None) self.assertTrue(IServiceCollection.providedBy(multi_service)) services = list(multi_service) self.assertEqual(len(services), 1)
def test_stop_service_stub_ignores_disconnected_agent(self): """The base class agent, stopService will the stop method. If the client is not connected then no attempt is made to close it. """ mock_agent = self.mocker.patch(BaseAgent) mock_client = self.mocker.mock(ZookeeperClient) # connection is closed after agent.stop invoked. with self.mocker.order(): mock_agent.stop() # client existence check mock_agent.client self.mocker.result(mock_client) # client connected check mock_agent.client self.mocker.result(mock_client) mock_client.connected self.mocker.result(False) self.mocker.replay() agent = BaseAgent() return agent.stopService()
def test_stop_service_stub_closes_agent(self): """The base class agent, stopService will the stop method. Additionally it will close the agent's zookeeper client if the client is still connected. """ mock_agent = self.mocker.patch(BaseAgent) mock_client = self.mocker.mock(ZookeeperClient) # connection is closed after agent.stop invoked. with self.mocker.order(): mock_agent.stop() self.mocker.passthrough() # client existence check mock_agent.client self.mocker.result(mock_client) # client connected check mock_agent.client self.mocker.result(mock_client) mock_client.connected self.mocker.result(True) # client close mock_agent.client self.mocker.result(mock_client) mock_client.close() self.mocker.replay() agent = BaseAgent() return agent.stopService()
def test_non_existant_directory(self): """If the juju directory does not exist an error should be raised. """ juju_directory = self.makeDir() os.rmdir(juju_directory) data = { "zookeeper_servers": get_test_zookeeper_address(), "juju_directory": juju_directory } agent = BaseAgent() self.assertRaises(JujuError, agent.configure, data)
def test_directory_cli_option(self): """The juju directory can be configured on the cli.""" juju_directory = self.makeDir() self.change_args("es-agent", "--zookeeper-servers", get_test_zookeeper_address(), "--juju-directory", juju_directory) agent = BaseAgent() parser = argparse.ArgumentParser() agent.setup_options(parser) options = parser.parse_args(namespace=TwistedOptionNamespace()) agent.configure(options) self.assertEqual(agent.config["juju_directory"], juju_directory)
def test_directory_env(self): """The juju directory passed via environment.""" self.change_args("es-agent") juju_directory = self.makeDir() self.change_environment(JUJU_HOME=juju_directory, JUJU_ZOOKEEPER=get_test_zookeeper_address()) agent = BaseAgent() parser = argparse.ArgumentParser() agent.setup_options(parser) options = parser.parse_args(namespace=TwistedOptionNamespace()) agent.configure(options) self.assertEqual(agent.config["juju_directory"], juju_directory)
def test_connect_cli_option(self): """The zookeeper server can be passed via cli argument.""" mock_client = self.mocker.mock() client = self.mocker.patch(ZookeeperClient) client.connect("x2.example.com") self.mocker.result(succeed(mock_client)) self.mocker.replay() agent = BaseAgent() agent.configure({ "zookeeper_servers": "x2.example.com", "juju_directory": self.makeDir() }) result = agent.connect() self.assertEqual(result.result, mock_client) self.assertEqual(agent.client, mock_client)
def test_run_base_raises_error(self): """The base class agent, raises a notimplemented error when started.""" client = self.mocker.patch(ZookeeperClient) client.connect(get_test_zookeeper_address()) client_mock = self.mocker.mock() self.mocker.result(succeed(client_mock)) self.mocker.replay() agent = BaseAgent() agent.configure({ "zookeeper_servers": get_test_zookeeper_address(), "juju_directory": self.makeDir() }) d = agent.startService() self.failUnlessFailure(d, NotImplementedError) return d
def test_connect_env(self): """Zookeeper connection information can be passed via environment.""" self.change_args("es-agent") self.change_environment(JUJU_HOME=self.makeDir(), JUJU_ZOOKEEPER="x1.example.com", JUJU_PRINCIPALS="admin:abc agent:xyz") client = self.mocker.patch(ZookeeperClient) client.connect("x1.example.com") self.mocker.result(succeed(client)) client.add_auth("digest", "admin:abc") client.add_auth("digest", "agent:xyz") client.exists("/") self.mocker.replay() agent = BaseAgent() parser = argparse.ArgumentParser() agent.setup_options(parser) options = parser.parse_args(namespace=TwistedOptionNamespace()) agent.configure(options) d = agent.startService() self.failUnlessFailure(d, NotImplementedError) return d
def test_watch_enabled_accessors(self): agent = BaseAgent() self.assertTrue(agent.get_watch_enabled()) agent.set_watch_enabled(False) self.assertFalse(agent.get_watch_enabled())
def test_zookeeper_hosts_not_configured(self): """a NoConnection error is raised if no zookeeper host is specified.""" agent = BaseAgent() self.assertRaises(NoConnection, agent.configure, {"zookeeper_servers": None})