def test_create_backend_raises_error_if_etcd_is_unreachable(self) -> None: self._params.endpoint = "dummy:1234" with self.assertRaisesRegex( RendezvousConnectionError, r"^The connection to etcd has failed. See inner exception for details.$", ): create_backend(self._params)
def test_create_backend_raises_error_if_read_timeout_is_invalid( self) -> None: for read_timeout in ["0", "-10"]: with self.subTest(read_timeout=read_timeout): self._params.config["read_timeout"] = read_timeout with self.assertRaisesRegex( ValueError, r"^The read timeout must be a positive integer.$"): create_backend(self._params)
def test_create_backend_returns_backend(self) -> None: backend, store = create_backend(self._params) self.assertEqual(backend.name, "etcd-v2") self.assertIsInstance(store, EtcdStore) etcd_store = cast(EtcdStore, store) self.assertEqual( etcd_store.client.read_timeout, self._expected_read_timeout) # type: ignore[attr-defined] client = self._server.get_client() backend.set_state(b"dummy_state") result = client.get("/torch/elastic/rendezvous/" + self._params.run_id) self.assertEqual(result.value, b64encode(b"dummy_state").decode()) self.assertLessEqual(result.ttl, 7200) store.set("dummy_key", "dummy_value") result = client.get("/torch/elastic/store/" + b64encode(b"dummy_key").decode()) self.assertEqual(result.value, b64encode(b"dummy_value").decode())
def test_create_backend_returns_backend(self) -> None: backend = create_backend(self._params) self.assertEqual(backend.name, "etcd-experimental") self.assertEqual(backend.key, "/torch/elastic/rendezvous/" + self._params.run_id) self.assertEqual(backend.ttl, 7200) self.assertEqual(backend.client.host, self._server.get_host()) self.assertEqual(backend.client.port, self._server.get_port()) self.assertEqual(backend.client.protocol, self._expected_protocol) self.assertEqual(backend.client.read_timeout, self._expected_read_timeout)
def test_create_backend_raises_error_if_protocol_is_invalid(self) -> None: self._params.config["protocol"] = "dummy" with self.assertRaisesRegex(ValueError, r"^The protocol must be HTTP or HTTPS.$"): create_backend(self._params)