@@ -34,14 +34,59 @@ impl NameServer {
34
34
35
35
Ok ( NameServer { zones } )
36
36
}
37
+
38
+ /// Searches for a zone by its domain name
39
+ ///
40
+ /// # Examples
41
+ ///
42
+ /// ```
43
+ /// let name_server = NameServer::new("masterfile.txt").unwrap();
44
+ /// let domain = DomainName::new_from_str("example.com.".to_string());
45
+ /// let zone = name_server.search_zone(&domain);
46
+ ///
47
+ /// assert!(zone.is_some());
48
+ /// ```
49
+ pub fn search_zone ( & self , domain : & DomainName ) -> Option < & DnsZone > {
50
+ self . zones . get ( & domain. to_string ( ) )
51
+ }
52
+
37
53
/// Adds a new zone to the NameServer
54
+ ///
55
+ /// # Examples
56
+ ///
57
+ /// ```
58
+ /// let mut name_server = NameServer::new("masterfile.txt").unwrap();
59
+ /// let domain = DomainName::new_from_str("example.com.".to_string());
60
+ /// let zone = DnsZone::new("example.com.", 3600, SoaRdata::new());
61
+ /// name_server.add_zone(zone);
62
+ ///
63
+ /// assert!(name_server.zones.contains_key(&domain));
64
+ /// ```
38
65
pub fn add_zone ( & mut self , zone : Zone ) {
39
66
self . zones . insert ( zone. domain . clone ( ) , zone) ;
40
67
}
41
68
/// Removes a zone by its domain name
69
+ ///
70
+ /// # Examples
71
+ ///
72
+ /// ```
73
+ /// let mut name_server = NameServer::new("masterfile.txt").unwrap();
74
+ /// let domain = DomainName::new_from_str("example.com.".to_string());
75
+ /// let zone = DnsZone::new("example.com.", 3600, SoaRdata::new());
76
+ /// name_server.add_zone(zone);
77
+ ///
78
+ /// let removed = name_server.remove_zone("example.com.");
79
+ /// assert!(removed);
80
+ ///
81
+ /// assert!(!name_server.get_zones().contains_key(&domain));
82
+ /// ```
42
83
pub fn remove_zone ( & mut self , domain : & str ) -> bool {
43
84
self . zones . remove ( domain) . is_some ( )
44
85
}
86
+ }
87
+
88
+ /// Getters
89
+ impl NameServer {
45
90
/// Lists the domains managed by this server
46
91
pub fn get_list_zones ( & self ) -> Vec < String > {
47
92
self . zones . keys ( ) . cloned ( ) . collect ( )
@@ -75,6 +120,39 @@ mod test_name_server {
75
120
assert ! ( name_server. zones. contains_key( & domain_name) ) ;
76
121
}
77
122
123
+ #[ test]
124
+ fn test_search_zone ( ) {
125
+ let mut name_server = NameServer {
126
+ zones : HashMap :: new ( ) ,
127
+ } ;
128
+
129
+ // Create the SOA RData for the zone
130
+ let mut soa_data = SoaRdata :: new ( ) ;
131
+ soa_data. set_name_server ( DomainName :: new_from_str ( "ns1.example.com." . to_string ( ) ) ) ;
132
+ soa_data. set_responsible_person ( DomainName :: new_from_str ( "admin.example.com." . to_string ( ) ) ) ;
133
+ soa_data. set_serial ( 20240101 ) ;
134
+ soa_data. set_refresh ( 3600 ) ;
135
+ soa_data. set_retry ( 1800 ) ;
136
+ soa_data. set_expire ( 1209600 ) ;
137
+ soa_data. set_minimum ( 3600 ) ;
138
+
139
+ // Create and add a zone
140
+ let zone = DnsZone :: new (
141
+ "example.com." ,
142
+ 3600 ,
143
+ soa_data,
144
+ ) ;
145
+
146
+ name_server. add_zone ( zone) ;
147
+
148
+ // Search for the zone by its domain name
149
+ let domain = DomainName :: new_from_str ( "example.com." . to_string ( ) ) ;
150
+ let found_zone = name_server. search_zone ( & domain) ;
151
+
152
+ // Validate that the zone was found
153
+ assert ! ( found_zone. is_some( ) ) ;
154
+ }
155
+
78
156
#[ test]
79
157
fn test_add_zone ( ) {
80
158
let mut name_server = NameServer {
0 commit comments