@@ -96,16 +96,27 @@ void TestExtNetInfo(const TestVectors& vals)
9696 for (const auto & [input, _, expected_ret] : vals) {
9797 const auto & [purpose, addr] = input;
9898 ExtNetInfo netInfo;
99+ if (purpose != Purpose::CORE_P2P) {
100+ // Entries could get rejected because a CORE_P2P entry wasn't added first, we'll do it for them
101+ BOOST_CHECK_EQUAL (netInfo.AddEntry (Purpose::CORE_P2P, strprintf (" 1.1.1.1:%u" , Params ().GetDefaultPort ())), NetInfoStatus::Success);
102+ }
99103 BOOST_CHECK_EQUAL (netInfo.AddEntry (purpose, addr), expected_ret);
100104 if (expected_ret != NetInfoStatus::Success) {
101- // An empty ExtNetInfo is considered malformed
102- BOOST_CHECK_EQUAL (netInfo.Validate (), NetInfoStatus::Malformed);
103- BOOST_CHECK (!netInfo.HasEntries (purpose));
104- BOOST_CHECK (netInfo.GetEntries ().empty ());
105+ if (purpose != Purpose::CORE_P2P) {
106+ // The dummy entry makes the constructed ExtNetInfo valid
107+ BOOST_CHECK_EQUAL (netInfo.Validate (), NetInfoStatus::Success);
108+ BOOST_CHECK (!netInfo.HasEntries (purpose));
109+ ValidateGetEntries (netInfo.GetEntries (), /* expected_size=*/ 1 );
110+ } else {
111+ // An empty ExtNetInfo is considered malformed
112+ BOOST_CHECK_EQUAL (netInfo.Validate (), NetInfoStatus::Malformed);
113+ BOOST_CHECK (!netInfo.HasEntries (purpose));
114+ BOOST_CHECK (netInfo.GetEntries ().empty ());
115+ }
105116 } else {
106117 BOOST_CHECK_EQUAL (netInfo.Validate (), NetInfoStatus::Success);
107118 BOOST_CHECK (netInfo.HasEntries (purpose));
108- ValidateGetEntries (netInfo.GetEntries (), /* expected_size=*/ 1 );
119+ ValidateGetEntries (netInfo.GetEntries (), /* expected_size=*/ purpose == Purpose::CORE_P2P ? 1 : 2 );
109120 }
110121 }
111122}
@@ -124,7 +135,29 @@ BOOST_AUTO_TEST_CASE(mnnetinfo_rules_main)
124135 }
125136}
126137
127- BOOST_AUTO_TEST_CASE (extnetinfo_rules_main) { TestExtNetInfo (vals_main); }
138+ BOOST_AUTO_TEST_CASE (extnetinfo_rules_main)
139+ {
140+ TestExtNetInfo (vals_main);
141+
142+ {
143+ // ExtNetInfo requires adding a CORE_P2P entry before adding an entry for any other purpose
144+ ExtNetInfo netInfo;
145+ BOOST_CHECK_EQUAL (netInfo.AddEntry (Purpose::PLATFORM_HTTPS, " 1.1.1.1:443" ), NetInfoStatus::MissingData);
146+ BOOST_CHECK_EQUAL (netInfo.AddEntry (Purpose::PLATFORM_P2P, " 1.1.1.1:26656" ), NetInfoStatus::MissingData);
147+
148+ // Emptiness checks
149+ BOOST_CHECK_EQUAL (netInfo.Validate (), NetInfoStatus::Malformed);
150+ BOOST_CHECK (netInfo.IsEmpty () && netInfo.GetEntries ().empty ());
151+
152+ BOOST_CHECK_EQUAL (netInfo.AddEntry (Purpose::CORE_P2P, " 1.1.1.1:9999" ), NetInfoStatus::Success);
153+ BOOST_CHECK_EQUAL (netInfo.AddEntry (Purpose::PLATFORM_HTTPS, " 1.1.1.1:443" ), NetInfoStatus::Success);
154+ BOOST_CHECK_EQUAL (netInfo.AddEntry (Purpose::PLATFORM_P2P, " 1.1.1.1:26656" ), NetInfoStatus::Success);
155+
156+ // Presence checks
157+ BOOST_CHECK_EQUAL (netInfo.Validate (), NetInfoStatus::Success);
158+ ValidateGetEntries (netInfo.GetEntries (), /* expected_size=*/ 3 );
159+ }
160+ }
128161
129162static const TestVectors vals_reg{
130163 // - MnNetInfo doesn't mind using port 0
0 commit comments