in crates/zbus/src/address/mod.rs [204:327]
fn parse_dbus_addresses() {
match Address::from_str("").unwrap_err() {
Error::Address(e) => assert_eq!(e, "address has no colon"),
_ => panic!(),
}
match Address::from_str("foo").unwrap_err() {
Error::Address(e) => assert_eq!(e, "address has no colon"),
_ => panic!(),
}
match Address::from_str("foo:opt").unwrap_err() {
Error::Address(e) => assert_eq!(e, "missing = when parsing key/value"),
_ => panic!(),
}
match Address::from_str("foo:opt=1,opt=2").unwrap_err() {
Error::Address(e) => assert_eq!(e, "Key `opt` specified multiple times"),
_ => panic!(),
}
match Address::from_str("tcp:host=localhost").unwrap_err() {
Error::Address(e) => assert_eq!(e, "tcp address is missing `port`"),
_ => panic!(),
}
match Address::from_str("tcp:host=localhost,port=32f").unwrap_err() {
Error::Address(e) => assert_eq!(e, "invalid tcp `port`"),
_ => panic!(),
}
match Address::from_str("tcp:host=localhost,port=123,family=ipv7").unwrap_err() {
Error::Address(e) => assert_eq!(e, "invalid tcp address `family`: ipv7"),
_ => panic!(),
}
match Address::from_str("unix:foo=blah").unwrap_err() {
Error::Address(e) => assert_eq!(e, "unix: address is invalid"),
_ => panic!(),
}
#[cfg(target_os = "linux")]
match Address::from_str("unix:path=/tmp,abstract=foo").unwrap_err() {
Error::Address(e) => {
assert_eq!(e, "unix: address is invalid");
},
_ => panic!(),
}
assert_eq!(
Address::from_str("unix:path=/tmp/dbus-foo").unwrap(),
Transport::Unix(Unix::new(UnixSocket::File("/tmp/dbus-foo".into()))).into(),
);
#[cfg(target_os = "linux")]
assert_eq!(
Address::from_str("unix:abstract=/tmp/dbus-foo").unwrap(),
Transport::Unix(Unix::new(UnixSocket::Abstract("/tmp/dbus-foo".into()))).into(),
);
let guid = crate::Guid::generate();
assert_eq!(
Address::from_str(&format!("unix:path=/tmp/dbus-foo,guid={guid}")).unwrap(),
Address::from(Transport::Unix(Unix::new(UnixSocket::File("/tmp/dbus-foo".into()))))
.set_guid(guid.clone())
.unwrap(),
);
assert_eq!(
Address::from_str("tcp:host=localhost,port=4142").unwrap(),
Transport::Tcp(Tcp::new("localhost", 4142)).into(),
);
assert_eq!(
Address::from_str("tcp:host=localhost,port=4142,family=ipv4").unwrap(),
Transport::Tcp(Tcp::new("localhost", 4142).set_family(Some(TcpTransportFamily::Ipv4))).into(),
);
assert_eq!(
Address::from_str("tcp:host=localhost,port=4142,family=ipv6").unwrap(),
Transport::Tcp(Tcp::new("localhost", 4142).set_family(Some(TcpTransportFamily::Ipv6))).into(),
);
assert_eq!(
Address::from_str("tcp:host=localhost,port=4142,family=ipv6,noncefile=/a/file/path").unwrap(),
Transport::Tcp(
Tcp::new("localhost", 4142)
.set_family(Some(TcpTransportFamily::Ipv6))
.set_nonce_file(Some(b"/a/file/path".to_vec()))
)
.into(),
);
assert_eq!(
Address::from_str(
"nonce-tcp:host=localhost,port=4142,family=ipv6,noncefile=/a/file/path%20to%20file%201234"
)
.unwrap(),
Transport::Tcp(
Tcp::new("localhost", 4142)
.set_family(Some(TcpTransportFamily::Ipv6))
.set_nonce_file(Some(b"/a/file/path to file 1234".to_vec()))
)
.into()
);
#[cfg(windows)]
assert_eq!(
Address::from_str("autolaunch:").unwrap(),
Transport::Autolaunch(Autolaunch::new()).into(),
);
#[cfg(windows)]
assert_eq!(
Address::from_str("autolaunch:scope=*my_cool_scope*").unwrap(),
Transport::Autolaunch(
Autolaunch::new().set_scope(Some(AutolaunchScope::Other("*my_cool_scope*".to_string())))
)
.into(),
);
#[cfg(target_os = "macos")]
assert_eq!(
Address::from_str("launchd:env=my_cool_env_key").unwrap(),
Transport::Launchd(Launchd::new("my_cool_env_key")).into(),
);
#[cfg(all(feature = "vsock", not(feature = "tokio")))]
assert_eq!(
Address::from_str(&format!("vsock:cid=98,port=2934,guid={guid}")).unwrap(),
Address::from(Transport::Vsock(super::transport::Vsock::new(98, 2934)))
.set_guid(guid)
.unwrap(),
);
assert_eq!(
Address::from_str("unix:dir=/some/dir").unwrap(),
Transport::Unix(Unix::new(UnixSocket::Dir("/some/dir".into()))).into(),
);
assert_eq!(
Address::from_str("unix:tmpdir=/some/dir").unwrap(),
Transport::Unix(Unix::new(UnixSocket::TmpDir("/some/dir".into()))).into(),
);
}