Nothing to see here, move along meow
0

Configure Feed

Select the types of activity you want to include in your feed.

at main 6.2 kB View raw
1use lancer_core::net_config::NetConfig; 2use proptest::prelude::*; 3 4#[test] 5fn empty_is_all_zero_unconfigured() { 6 let cfg = NetConfig::empty(); 7 assert_eq!(cfg.ipv4, [0; 4]); 8 assert_eq!(cfg.prefix_len, 0); 9 assert_eq!(cfg.gateway, [0; 4]); 10 assert_eq!(cfg.dns_count, 0); 11 assert_eq!(cfg.mac, [0; 6]); 12 assert!(!cfg.configured); 13 assert_eq!(cfg.ipv6_link_local, [0; 16]); 14 assert_eq!(cfg.ipv6_global, [0; 16]); 15 assert_eq!(cfg.ipv6_global_prefix_len, 0); 16} 17 18#[test] 19fn set_ipv4_marks_configured() { 20 let mut cfg = NetConfig::empty(); 21 cfg.set_ipv4([10, 0, 0, 1], 24); 22 assert!(cfg.configured); 23 assert_eq!(cfg.ipv4, [10, 0, 0, 1]); 24 assert_eq!(cfg.prefix_len, 24); 25} 26 27#[test] 28fn set_gateway_stores_correctly() { 29 let mut cfg = NetConfig::empty(); 30 cfg.set_gateway([192, 168, 1, 1]); 31 assert_eq!(cfg.gateway, [192, 168, 1, 1]); 32} 33 34#[test] 35fn set_dns_stores_up_to_three() { 36 let mut cfg = NetConfig::empty(); 37 let servers = [[8, 8, 8, 8], [8, 8, 4, 4], [1, 1, 1, 1]]; 38 cfg.set_dns(&servers, 3); 39 assert_eq!(cfg.dns_count, 3); 40 assert_eq!(cfg.dns[0], [8, 8, 8, 8]); 41 assert_eq!(cfg.dns[1], [8, 8, 4, 4]); 42 assert_eq!(cfg.dns[2], [1, 1, 1, 1]); 43} 44 45#[test] 46fn set_mac_stores_correctly() { 47 let mut cfg = NetConfig::empty(); 48 cfg.set_mac([0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF]); 49 assert_eq!(cfg.mac, [0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF]); 50} 51 52#[test] 53fn set_ipv6_link_local_stores() { 54 let mut cfg = NetConfig::empty(); 55 let addr = [0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]; 56 cfg.set_ipv6_link_local(addr); 57 assert_eq!(cfg.ipv6_link_local, addr); 58} 59 60#[test] 61fn set_ipv6_global_stores() { 62 let mut cfg = NetConfig::empty(); 63 let addr = [0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]; 64 cfg.set_ipv6_global(addr, 64); 65 assert_eq!(cfg.ipv6_global, addr); 66 assert_eq!(cfg.ipv6_global_prefix_len, 64); 67} 68 69#[test] 70fn clear_ipv4_resets_to_unconfigured() { 71 let mut cfg = NetConfig::empty(); 72 cfg.set_ipv4([10, 0, 0, 1], 24); 73 cfg.set_gateway([10, 0, 0, 254]); 74 cfg.set_dns(&[[8, 8, 8, 8]], 1); 75 cfg.clear_ipv4(); 76 assert!(!cfg.configured); 77 assert_eq!(cfg.ipv4, [0; 4]); 78 assert_eq!(cfg.prefix_len, 0); 79 assert_eq!(cfg.gateway, [0; 4]); 80 assert_eq!(cfg.dns_count, 0); 81} 82 83#[test] 84fn serialize_deserialize_empty() { 85 let cfg = NetConfig::empty(); 86 let mut buf = [0u8; 128]; 87 let len = cfg.serialize(&mut buf); 88 assert!(len > 0); 89 let restored = NetConfig::deserialize(&buf[..len]).unwrap(); 90 assert!(!restored.configured); 91 assert_eq!(restored.ipv4, [0; 4]); 92} 93 94#[test] 95fn serialize_deserialize_fully_populated() { 96 let mut cfg = NetConfig::empty(); 97 cfg.set_ipv4([192, 168, 1, 100], 24); 98 cfg.set_gateway([192, 168, 1, 1]); 99 cfg.set_dns(&[[8, 8, 8, 8], [8, 8, 4, 4], [1, 1, 1, 1]], 3); 100 cfg.set_mac([0x02, 0x00, 0x00, 0x00, 0x00, 0x01]); 101 cfg.set_ipv6_link_local([0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]); 102 cfg.set_ipv6_global( 103 [0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 104 64, 105 ); 106 107 let mut buf = [0u8; 128]; 108 let len = cfg.serialize(&mut buf); 109 let restored = NetConfig::deserialize(&buf[..len]).unwrap(); 110 111 assert!(restored.configured); 112 assert_eq!(restored.ipv4, [192, 168, 1, 100]); 113 assert_eq!(restored.prefix_len, 24); 114 assert_eq!(restored.gateway, [192, 168, 1, 1]); 115 assert_eq!(restored.dns_count, 3); 116 assert_eq!(restored.dns[0], [8, 8, 8, 8]); 117 assert_eq!(restored.dns[1], [8, 8, 4, 4]); 118 assert_eq!(restored.dns[2], [1, 1, 1, 1]); 119 assert_eq!(restored.mac, [0x02, 0x00, 0x00, 0x00, 0x00, 0x01]); 120 assert_eq!( 121 restored.ipv6_link_local, 122 [0xfe, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] 123 ); 124 assert_eq!( 125 restored.ipv6_global, 126 [0x20, 0x01, 0x0d, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] 127 ); 128 assert_eq!(restored.ipv6_global_prefix_len, 64); 129} 130 131proptest! { 132 #[test] 133 fn serialize_deserialize_round_trip( 134 ipv4 in proptest::array::uniform4(any::<u8>()), 135 prefix in any::<u8>(), 136 gateway in proptest::array::uniform4(any::<u8>()), 137 dns0 in proptest::array::uniform4(any::<u8>()), 138 dns1 in proptest::array::uniform4(any::<u8>()), 139 dns2 in proptest::array::uniform4(any::<u8>()), 140 dns_count in 0u8..=3, 141 mac in proptest::array::uniform6(any::<u8>()), 142 ipv6_ll in proptest::collection::vec(any::<u8>(), 16..=16), 143 ipv6_gl in proptest::collection::vec(any::<u8>(), 16..=16), 144 ipv6_prefix in any::<u8>(), 145 ) { 146 let mut cfg = NetConfig::empty(); 147 cfg.set_ipv4(ipv4, prefix); 148 cfg.set_gateway(gateway); 149 cfg.set_dns(&[dns0, dns1, dns2], dns_count); 150 cfg.set_mac(mac); 151 152 let mut ll = [0u8; 16]; 153 ll.copy_from_slice(&ipv6_ll); 154 cfg.set_ipv6_link_local(ll); 155 156 let mut gl = [0u8; 16]; 157 gl.copy_from_slice(&ipv6_gl); 158 cfg.set_ipv6_global(gl, ipv6_prefix); 159 160 let mut buf = [0u8; 128]; 161 let len = cfg.serialize(&mut buf); 162 prop_assert!(len > 0); 163 let restored = NetConfig::deserialize(&buf[..len]).unwrap(); 164 165 prop_assert!(restored.configured); 166 prop_assert_eq!(restored.ipv4, ipv4); 167 prop_assert_eq!(restored.prefix_len, prefix); 168 prop_assert_eq!(restored.gateway, gateway); 169 let effective_dns = (dns_count as usize).min(3); 170 prop_assert_eq!(restored.dns_count, effective_dns as u8); 171 let expected_dns = [dns0, dns1, dns2]; 172 (0..effective_dns).for_each(|i| { 173 assert_eq!(restored.dns[i], expected_dns[i]); 174 }); 175 prop_assert_eq!(restored.mac, mac); 176 prop_assert_eq!(restored.ipv6_link_local, ll); 177 prop_assert_eq!(restored.ipv6_global, gl); 178 prop_assert_eq!(restored.ipv6_global_prefix_len, ipv6_prefix); 179 } 180 181 #[test] 182 fn truncated_buffer_returns_none(len in 0usize..61) { 183 let buf = [0u8; 60]; 184 let actual_len = len.min(buf.len()); 185 prop_assert!(NetConfig::deserialize(&buf[..actual_len]).is_none()); 186 } 187}