Skip to content

Commit d28f018

Browse files
test: facade and adapter snapshot tests
Adds insta snapshot tests for uselesskey facade, rustls adapter, and tonic adapter crates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent bdfabd0 commit d28f018

25 files changed

+702
-0
lines changed

Cargo.lock

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/uselesskey-rustls/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,5 @@ rustls-aws-lc-rs = ["rustls?/aws_lc_rs"]
4343
uselesskey-core = { path = "../uselesskey-core", version = "0.3.0" }
4444
uselesskey-x509 = { path = "../uselesskey-x509", version = "0.3.0" }
4545
rustls = { version = "0.23", features = ["ring"] }
46+
serde.workspace = true
47+
insta.workspace = true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
source: crates/uselesskey-rustls/tests/snapshots_rustls.rs
3+
expression: result
4+
---
5+
leaf_cert_der_len: 803
6+
intermediate_cert_der_len: 802
7+
root_cert_der_len: 794
8+
chain_count: 2
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
source: crates/uselesskey-rustls/tests/snapshots_rustls.rs
3+
expression: result
4+
---
5+
label: chain-leaf
6+
key_type: PKCS8
7+
key_der_len: "[REDACTED]"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
source: crates/uselesskey-rustls/tests/snapshots_rustls.rs
3+
expression: result
4+
---
5+
label: self-signed
6+
cert_der_len: 758
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
source: crates/uselesskey-rustls/tests/snapshots_rustls.rs
3+
expression: result
4+
---
5+
label: self-signed
6+
key_type: PKCS8
7+
key_der_len: "[REDACTED]"
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
//! Insta snapshot tests for uselesskey-rustls adapter.
2+
//!
3+
//! These tests snapshot certificate and key shapes produced by the rustls adapter
4+
//! to detect unintended changes in adapter output.
5+
6+
mod testutil;
7+
8+
use serde::Serialize;
9+
use testutil::fx;
10+
use uselesskey_rustls::{RustlsCertExt, RustlsChainExt, RustlsPrivateKeyExt};
11+
use uselesskey_x509::{ChainSpec, X509FactoryExt, X509Spec};
12+
13+
#[derive(Serialize)]
14+
struct CertDerSnapshot {
15+
label: &'static str,
16+
cert_der_len: usize,
17+
}
18+
19+
#[derive(Serialize)]
20+
struct PrivateKeySnapshot {
21+
label: &'static str,
22+
key_type: &'static str,
23+
key_der_len: usize,
24+
}
25+
26+
#[test]
27+
fn snapshot_rustls_self_signed_cert_der_len() {
28+
let fx = fx();
29+
let cert = fx.x509_self_signed("snapshot-ss", X509Spec::self_signed("test.example.com"));
30+
31+
let cert_der = cert.certificate_der_rustls();
32+
33+
let result = CertDerSnapshot {
34+
label: "self-signed",
35+
cert_der_len: cert_der.as_ref().len(),
36+
};
37+
38+
insta::assert_yaml_snapshot!("rustls_self_signed_cert_der_len", result);
39+
}
40+
41+
#[test]
42+
fn snapshot_rustls_chain_cert_der_lengths() {
43+
let fx = fx();
44+
let chain = fx.x509_chain("snapshot-chain", ChainSpec::new("test.example.com"));
45+
46+
let chain_certs = chain.chain_der_rustls();
47+
let root = chain.root_certificate_der_rustls();
48+
49+
#[derive(Serialize)]
50+
struct ChainDerLengths {
51+
leaf_cert_der_len: usize,
52+
intermediate_cert_der_len: usize,
53+
root_cert_der_len: usize,
54+
chain_count: usize,
55+
}
56+
57+
let result = ChainDerLengths {
58+
leaf_cert_der_len: chain_certs[0].as_ref().len(),
59+
intermediate_cert_der_len: chain_certs[1].as_ref().len(),
60+
root_cert_der_len: root.as_ref().len(),
61+
chain_count: chain_certs.len(),
62+
};
63+
64+
insta::assert_yaml_snapshot!("rustls_chain_cert_der_lengths", result);
65+
}
66+
67+
#[test]
68+
fn snapshot_rustls_self_signed_private_key_type() {
69+
let fx = fx();
70+
let cert = fx.x509_self_signed("snapshot-ss-key", X509Spec::self_signed("test.example.com"));
71+
72+
let key = cert.private_key_der_rustls();
73+
let key_type = match &key {
74+
rustls_pki_types::PrivateKeyDer::Pkcs1(_) => "PKCS1",
75+
rustls_pki_types::PrivateKeyDer::Pkcs8(_) => "PKCS8",
76+
rustls_pki_types::PrivateKeyDer::Sec1(_) => "SEC1",
77+
_ => "Unknown",
78+
};
79+
80+
let result = PrivateKeySnapshot {
81+
label: "self-signed",
82+
key_type,
83+
key_der_len: key.secret_der().len(),
84+
};
85+
86+
insta::assert_yaml_snapshot!("rustls_self_signed_private_key_type", result, {
87+
".key_der_len" => "[REDACTED]",
88+
});
89+
}
90+
91+
#[test]
92+
fn snapshot_rustls_chain_private_key_type() {
93+
let fx = fx();
94+
let chain = fx.x509_chain("snapshot-chain-key", ChainSpec::new("test.example.com"));
95+
96+
let key = chain.private_key_der_rustls();
97+
let key_type = match &key {
98+
rustls_pki_types::PrivateKeyDer::Pkcs1(_) => "PKCS1",
99+
rustls_pki_types::PrivateKeyDer::Pkcs8(_) => "PKCS8",
100+
rustls_pki_types::PrivateKeyDer::Sec1(_) => "SEC1",
101+
_ => "Unknown",
102+
};
103+
104+
let result = PrivateKeySnapshot {
105+
label: "chain-leaf",
106+
key_type,
107+
key_der_len: key.secret_der().len(),
108+
};
109+
110+
insta::assert_yaml_snapshot!("rustls_chain_private_key_type", result, {
111+
".key_der_len" => "[REDACTED]",
112+
});
113+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#![allow(unused)]
2+
3+
use std::sync::OnceLock;
4+
5+
use uselesskey_core::{Factory, Seed};
6+
7+
static FX: OnceLock<Factory> = OnceLock::new();
8+
9+
pub(crate) fn fx() -> Factory {
10+
FX.get_or_init(|| {
11+
let seed = Seed::from_env_value("uselesskey-rustls-snapshot-seed-v1")
12+
.expect("test seed should always parse");
13+
Factory::deterministic(seed)
14+
})
15+
.clone()
16+
}

crates/uselesskey-tonic/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,5 @@ x509 = ["dep:uselesskey-x509"]
2828
uselesskey-core = { path = "../uselesskey-core", version = "0.3.0" }
2929
uselesskey-x509 = { path = "../uselesskey-x509", version = "0.3.0" }
3030
proptest.workspace = true
31+
serde.workspace = true
32+
insta.workspace = true
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
source: crates/uselesskey-tonic/tests/snapshots_tonic.rs
3+
expression: result
4+
---
5+
identity_from_self_signed: true
6+
identity_from_chain: true
7+
server_tls_from_self_signed: true
8+
server_tls_from_chain: true
9+
client_tls_from_self_signed: true
10+
client_tls_from_chain: true
11+
mtls_server_from_chain: true
12+
mtls_client_from_chain: true

0 commit comments

Comments
 (0)