@@ -185,4 +185,47 @@ TEST(Request, CreateAndParse)
185185 }
186186}
187187
188+ TEST (AnnounceNodes, SetAndTest)
189+ {
190+ Logger *log = logger_new ();
191+ Mono_Time *mono_time = mono_time_new (nullptr , nullptr );
192+ const Random *rng = system_random ();
193+ const Network *ns = system_network ();
194+ Networking_Core *net = new_networking_no_udp (log, ns);
195+ DHT *dht = new_dht (log, rng, ns, mono_time, net, true , true );
196+ ASSERT_NE (dht, nullptr );
197+
198+ uint8_t pk_data[CRYPTO_PUBLIC_KEY_SIZE ];
199+ memcpy (pk_data, dht_get_self_public_key (dht), sizeof (pk_data));
200+ PublicKey self_pk = to_array (pk_data);
201+
202+ PublicKey pk1 = random_pk (rng);
203+ ASSERT_NE (pk1, self_pk);
204+
205+ // Test with maximally close key to self
206+ pk_data[CRYPTO_PUBLIC_KEY_SIZE - 1 ] = ~pk_data[CRYPTO_PUBLIC_KEY_SIZE - 1 ];
207+ PublicKey pk2 = to_array (pk_data);
208+ ASSERT_NE (pk2, pk1);
209+
210+ IP_Port ip_port = {0 };
211+ ip_port.ip .family = net_family_ipv4 ();
212+
213+ set_announce_node (dht, pk1.data ());
214+ set_announce_node (dht, pk2.data ());
215+
216+ EXPECT_TRUE (addto_lists (dht, &ip_port, pk1.data ()));
217+ EXPECT_TRUE (addto_lists (dht, &ip_port, pk2.data ()));
218+
219+ Node_format nodes[MAX_SENT_NODES ];
220+ EXPECT_EQ (0 , get_close_nodes (dht, self_pk.data (), nodes, net_family_unspec (), true , true ));
221+ set_announce_node (dht, pk1.data ());
222+ set_announce_node (dht, pk2.data ());
223+ EXPECT_EQ (2 , get_close_nodes (dht, self_pk.data (), nodes, net_family_unspec (), true , true ));
224+
225+ kill_dht (dht);
226+ kill_networking (net);
227+ mono_time_free (mono_time);
228+ logger_kill (log);
229+ }
230+
188231} // namespace
0 commit comments