Skip to main content

Mountain/Binary/Build/
DnsCommands.rs

1
2//! # DNS commands
3//!
4//! Tauri commands that surface the Mist-managed DNS server
5//! (Hickory) to the webview - server state, zone snapshot,
6//! forward allowlist, manual resolution. The DTOs and command
7//! handlers live in sibling files; the wire-bound names match
8//! the file names so the `invoke_handler!` registration in
9//! `Binary/Main/Entry.rs` is a 1:1 mapping.
10
11pub mod DnsHealthStatus;
12
13pub mod DnsResolutionResult;
14
15pub mod DnsServerInfo;
16
17pub mod ForwardAllowList;
18
19pub mod StartupTime;
20
21pub mod ZoneInfo;
22
23pub mod ZoneRecord;
24
25pub mod dns_get_forward_allowlist;
26
27pub mod dns_get_health_status;
28
29pub mod dns_get_server_info;
30
31pub mod dns_get_zone_info;
32
33pub mod dns_health_check;
34
35pub mod dns_resolve;
36
37pub mod dns_test_resolution;
38
39#[cfg(test)]
40mod tests {
41
42	use super::{
43		DnsHealthStatus::DnsHealthStatus,
44		DnsResolutionResult::DnsResolutionResult,
45		DnsServerInfo::DnsServerInfo,
46		ForwardAllowList::ForwardAllowList,
47		ZoneRecord::ZoneRecord,
48	};
49
50	#[test]
51	fn DnsServerInfoSerialization() {
52		let info = DnsServerInfo { port:5380, is_running:true, startup_time:"2024-01-01T00:00:00Z".to_string() };
53
54		let json = serde_json::to_string(&info).unwrap();
55
56		let deserialized:DnsServerInfo = serde_json::from_str(&json).unwrap();
57
58		assert_eq!(deserialized.port, 5380);
59
60		assert_eq!(deserialized.is_running, true);
61
62		assert_eq!(deserialized.startup_time, "2024-01-01T00:00:00Z");
63	}
64
65	#[test]
66	fn ZoneRecordSerialization() {
67		let record = ZoneRecord {
68			name:"code.land.playform.cloud.".to_string(),
69
70			record_type:"A".to_string(),
71
72			ttl:3600,
73
74			data:"127.0.0.1".to_string(),
75		};
76
77		let json = serde_json::to_string(&record).unwrap();
78
79		let deserialized:ZoneRecord = serde_json::from_str(&json).unwrap();
80
81		assert_eq!(deserialized.name, "code.land.playform.cloud.");
82
83		assert_eq!(deserialized.record_type, "A");
84
85		assert_eq!(deserialized.ttl, 3600);
86
87		assert_eq!(deserialized.data, "127.0.0.1");
88	}
89
90	#[test]
91	fn ForwardAllowListSerialization() {
92		let allowlist = ForwardAllowList { domains:vec!["update.land.playform.cloud.".to_string()] };
93
94		let json = serde_json::to_string(&allowlist).unwrap();
95
96		let deserialized:ForwardAllowList = serde_json::from_str(&json).unwrap();
97
98		assert_eq!(deserialized.domains.len(), 1);
99
100		assert_eq!(deserialized.domains[0], "update.land.playform.cloud.");
101	}
102
103	#[test]
104	fn DnsHealthStatusSerialization() {
105		let health = DnsHealthStatus {
106			server_status:"running".to_string(),
107
108			zone_status:"active".to_string(),
109
110			forward_status:"active".to_string(),
111
112			last_error:None,
113		};
114
115		let json = serde_json::to_string(&health).unwrap();
116
117		let deserialized:DnsHealthStatus = serde_json::from_str(&json).unwrap();
118
119		assert_eq!(deserialized.server_status, "running");
120
121		assert_eq!(deserialized.zone_status, "active");
122
123		assert_eq!(deserialized.forward_status, "active");
124
125		assert!(deserialized.last_error.is_none());
126	}
127
128	#[test]
129	fn DnsResolutionResultSerialization() {
130		let result = DnsResolutionResult {
131			domain:"code.land.playform.cloud.".to_string(),
132
133			record_type:"A".to_string(),
134
135			addresses:vec!["127.0.0.1".to_string()],
136
137			ttl:3600,
138
139			succeeded:true,
140
141			error:None,
142		};
143
144		let json = serde_json::to_string(&result).unwrap();
145
146		let deserialized:DnsResolutionResult = serde_json::from_str(&json).unwrap();
147
148		assert_eq!(deserialized.domain, "code.land.playform.cloud.");
149
150		assert_eq!(deserialized.record_type, "A");
151
152		assert_eq!(deserialized.addresses.len(), 1);
153
154		assert_eq!(deserialized.addresses[0], "127.0.0.1");
155
156		assert_eq!(deserialized.ttl, 3600);
157
158		assert!(deserialized.succeeded);
159
160		assert!(deserialized.error.is_none());
161	}
162}