use super::*;
use rustls::pki_types::CertificateDer;
#[test]
fn an_uncertificated_peer_is_refused_by_tls() {
let tmp = TempDir::new().expect("tmp");
mint(tmp.path());
let asked = Arc::new(AtomicUsize::new(0));
let listener = Listener::bind(
&material(
tmp.path(),
Role::Server,
crate::test_support::wire::EPHEMERAL,
),
Arc::new(Echo {
asked: Arc::clone(&asked),
chunks: 1,
}),
Presence::default(),
)
.expect("bind");
let mut plain = std::net::TcpStream::connect(listener.address()).expect("connect");
let _ = crate::wire::frame::write_value(&mut plain, &json!({"op": "workspaces"}));
plain
.set_read_timeout(Some(Duration::from_secs(5)))
.expect("timeout");
let mut buf = [0u8; 1];
let _ = std::io::Read::read(&mut plain, &mut buf);
assert_eq!(asked.load(Ordering::Relaxed), 0);
}
#[test]
fn a_foreign_certificate_is_refused() {
let tmp = TempDir::new().expect("tmp");
mint(tmp.path());
let stranger = TempDir::new().expect("tmp");
mint(stranger.path());
let asked = Arc::new(AtomicUsize::new(0));
let listener = Listener::bind(
&material(
tmp.path(),
Role::Server,
crate::test_support::wire::EPHEMERAL,
),
Arc::new(Echo {
asked: Arc::clone(&asked),
chunks: 1,
}),
Presence::default(),
)
.expect("bind");
std::fs::copy(tmp.path().join("ca.pem"), stranger.path().join("ca.pem")).expect("copy");
let seat = Seat::open(&material(
stranger.path(),
Role::Client,
&listener.address(),
))
.expect("seat");
seat.ask(&json!({"op": "workspaces"})).expect_err("refused");
assert_eq!(asked.load(Ordering::Relaxed), 0);
}
#[test]
fn the_answerer_is_handed_the_certificates_leaf_name() {
let (_tmp, _listener, seat, _asked) = wired(1);
let stream = seat.ask(&json!({"op": "workspaces"})).expect("answered");
assert_eq!(stream[0]["client"], "yog-client");
}
#[test]
fn a_chain_naming_no_usable_identity_is_nobody() {
assert!(peer_client(None).is_none());
assert!(peer_client(Some(&[])).is_none());
let nameless = CertificateDer::from(vec![0x30, 0x00]);
assert!(peer_client(Some(&[nameless])).is_none());
}