#![cfg(feature = "discovery-etcd")]
use rs_zero::discovery::{Discovery, InstanceEndpoint, Registry, ServiceInstance};
use rs_zero::discovery_etcd::{
EtcdDiscoveryConfig, EtcdRegistry, decode_instance, encode_instance, instance_key,
};
#[tokio::test]
async fn etcd_codec_and_registry_facade_work_without_external_service() {
let instance = ServiceInstance::new(
"api",
"api-1",
InstanceEndpoint::new("127.0.0.1", 8080).expect("endpoint"),
);
let encoded = encode_instance(&instance).expect("encode");
assert_eq!(decode_instance(&encoded).expect("decode"), instance);
assert_eq!(
instance_key(&EtcdDiscoveryConfig::default(), "api", "api-1"),
"/rs-zero/api/api-1"
);
let registry = EtcdRegistry::new(EtcdDiscoveryConfig::default());
registry.register(instance).await.expect("register");
assert_eq!(registry.discover("api").await.expect("discover").len(), 1);
registry
.deregister("api", "api-1")
.await
.expect("deregister");
}