summaryrefslogtreecommitdiffstats
path: root/tests/server_setup.rs
diff options
context:
space:
mode:
authorsalmonik <salmonik@tuta.io>2026-10-28 22:55:51 +0100
committersalmonik <salmonik@tuta.io>2026-10-28 22:55:51 +0100
commit87440d5a23f0fd894d949295a7c1ff85043550fc (patch)
tree53b2bada6872b6e565bb79982213616a50419b1c /tests/server_setup.rs
parentv0.3.1: clean up dependencies, stale tests and document verification (diff)
downloadzagan-bet-87440d5a23f0fd894d949295a7c1ff85043550fc.tar.gz
zagan-bet-87440d5a23f0fd894d949295a7c1ff85043550fc.zip
v0.4.0: add first-time TLS setup and server help
Diffstat (limited to '')
-rw-r--r--tests/server_setup.rs38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/server_setup.rs b/tests/server_setup.rs
new file mode 100644
index 0000000..d527cd9
--- /dev/null
+++ b/tests/server_setup.rs
@@ -0,0 +1,38 @@
1use std::path::PathBuf;
2
3use zagan_bet::server::setup::init_identity;
4
5#[test]
6fn creates_a_usable_pkcs12_identity_and_refuses_to_overwrite() {
7 let dir = PathBuf::from(env!("CARGO_TARGET_TMPDIR")).join("server-setup");
8 let _ = std::fs::remove_dir_all(&dir);
9 std::fs::create_dir_all(&dir).unwrap();
10
11 init_identity(&dir, "localhost").expect("openssl must be available for this test");
12
13 for name in ["identity.p12", "key.pem", "cert.pem"] {
14 let path = dir.join(name);
15 assert!(path.exists(), "{name} was not created");
16 assert!(
17 std::fs::metadata(&path).unwrap().len() > 0,
18 "{name} is empty"
19 );
20 }
21
22 let p12 = std::fs::read(dir.join("identity.p12")).unwrap();
23 native_tls::Identity::from_pkcs12(&p12, "").expect("generated identity must load");
24
25 let second = init_identity(&dir, "localhost");
26 assert!(second.is_err(), "setup must not overwrite existing keys");
27
28 #[cfg(unix)]
29 {
30 use std::os::unix::fs::PermissionsExt;
31 let mode = std::fs::metadata(dir.join("key.pem"))
32 .unwrap()
33 .permissions()
34 .mode()
35 & 0o777;
36 assert_eq!(mode, 0o600, "private key should not be world-readable");
37 }
38}