summaryrefslogtreecommitdiff
path: root/test/java/net
diff options
context:
space:
mode:
authorMichael Peter Christen <mc@yacy.net>2026-07-05 08:38:08 +0200
committerMichael Peter Christen <mc@yacy.net>2026-07-05 08:38:08 +0200
commite419ceda7c7722801839cefe93c0e049d1ffb199 (patch)
treefc6f424f72f1da849445d1fad664c502e2e74189 /test/java/net
parente5d9efe6539f0f2ae46058da21bc7b810f7661b1 (diff)
IPv6-aware fixes
not a full IPv6 support fix, but changes towards
Diffstat (limited to 'test/java/net')
-rw-r--r--test/java/net/yacy/peers/SeedDBTest.java100
-rw-r--r--test/java/net/yacy/peers/SeedTest.java83
2 files changed, 183 insertions, 0 deletions
diff --git a/test/java/net/yacy/peers/SeedDBTest.java b/test/java/net/yacy/peers/SeedDBTest.java
new file mode 100644
index 000000000..a787ae1ba
--- /dev/null
+++ b/test/java/net/yacy/peers/SeedDBTest.java
@@ -0,0 +1,100 @@
+package net.yacy.peers;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.io.File;
+import java.net.InetAddress;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class SeedDBTest {
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ private SeedDB seedDB;
+
+ @Before
+ public void setUp() throws Exception {
+ final File networkRoot = this.temporaryFolder.newFolder("network");
+ this.seedDB = new SeedDB(
+ networkRoot,
+ "seedActive.db",
+ "seedPassive.db",
+ "seedPotential.db",
+ new File(networkRoot, SeedDB.DBFILE_OWN_SEED),
+ 1,
+ 4,
+ false,
+ false);
+ }
+
+ @After
+ public void tearDown() {
+ if (this.seedDB != null) this.seedDB.close();
+ }
+
+ @Test
+ public void lookupByIPFindsIPv6StoredInConnectedSeedIP6() throws Exception {
+ final Seed seed = seed("AAAAAAAAAAAA", "connected-peer", 8090);
+ seed.setIP("192.0.2.10");
+ seed.setIP("2001:db8::10");
+ this.seedDB.addConnected(seed);
+
+ final Seed found = this.seedDB.lookupByIP(InetAddress.getByName("2001:db8::10"), 8090, true, false, false);
+
+ assertEquals(seed.hash, found.hash);
+ }
+
+ @Test
+ public void lookupByIPFindsIPv6StoredInDisconnectedSeedIP6() throws Exception {
+ final Seed seed = seed("BBBBBBBBBBBB", "disconnected-peer", 8091);
+ seed.setIP("192.0.2.11");
+ seed.setIP("2001:db8::11");
+ this.seedDB.addDisconnected(seed);
+
+ final Seed found = this.seedDB.lookupByIP(InetAddress.getByName("2001:db8::11"), 8091, false, true, false);
+
+ assertEquals(seed.hash, found.hash);
+ }
+
+ @Test
+ public void lookupByIPFindsIPv6StoredInPotentialSeedIP6() throws Exception {
+ final Seed seed = seed("CCCCCCCCCCCC", "potential-peer", 8092);
+ seed.setIP("192.0.2.12");
+ seed.setIP("2001:db8::12");
+ this.seedDB.addPotential(seed);
+
+ final Seed found = this.seedDB.lookupByIP(InetAddress.getByName("2001:db8::12"), 8092, false, false, true);
+
+ assertEquals(seed.hash, found.hash);
+ }
+
+ @Test
+ public void lookupByIPHonorsPortForIPv6FallbackMatches() throws Exception {
+ final Seed seed = seed("DDDDDDDDDDDD", "port-peer", 8093);
+ seed.setIP("192.0.2.13");
+ seed.setIP("2001:db8::13");
+ this.seedDB.addConnected(seed);
+
+ final Seed found = this.seedDB.lookupByIP(InetAddress.getByName("2001:db8::13"), 8094, true, false, false);
+
+ assertNull(found);
+ }
+
+ private static Seed seed(final String hash, final String name, final int port) {
+ final ConcurrentMap<String, String> dna = new ConcurrentHashMap<String, String>();
+ final Seed seed = new Seed(hash, dna);
+ seed.setName(name);
+ seed.setType(Seed.PEERTYPE_SENIOR);
+ seed.setPort(port);
+ return seed;
+ }
+}
diff --git a/test/java/net/yacy/peers/SeedTest.java b/test/java/net/yacy/peers/SeedTest.java
new file mode 100644
index 000000000..6e221d843
--- /dev/null
+++ b/test/java/net/yacy/peers/SeedTest.java
@@ -0,0 +1,83 @@
+package net.yacy.peers;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Set;
+import java.util.HashSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.junit.Test;
+
+public class SeedTest {
+
+ private static Seed seed() {
+ final ConcurrentMap<String, String> dna = new ConcurrentHashMap<String, String>();
+ return new Seed("testseedhash", dna);
+ }
+
+ @Test
+ public void setIPAddsIPv6WithoutReplacingExistingIPv6Entries() {
+ final Seed seed = seed();
+ seed.setIP("192.0.2.10");
+ seed.setIP("2001:db8::1");
+ seed.setIP("2001:db8::2");
+
+ assertEquals("192.0.2.10", seed.get(Seed.IP, ""));
+ assertTrue(seed.getIPs().contains("2001:db8::1"));
+ assertTrue(seed.getIPs().contains("2001:db8::2"));
+ assertEquals(3, seed.countIPs());
+ }
+
+ @Test
+ public void setIPPreservesIPv6OnlyPrimaryWhenIPv4BecomesAvailable() {
+ final Seed seed = seed();
+ seed.setIP("2001:db8::1");
+ seed.setIP("192.0.2.10");
+
+ assertEquals("192.0.2.10", seed.get(Seed.IP, ""));
+ assertTrue(seed.getIPs().contains("2001:db8::1"));
+ assertTrue(seed.getIPs().contains("192.0.2.10"));
+ assertEquals(2, seed.countIPs());
+ }
+
+ @Test
+ public void setIPNormalizesZoneIdsAndAvoidsDuplicateIPv6Entries() {
+ final Seed seed = seed();
+ seed.setIP("192.0.2.10");
+ seed.setIP("fe80::1%en0");
+ seed.setIP("fe80::1%eth0");
+
+ final Set<String> ips = seed.getIPs();
+ assertTrue(ips.contains("fe80::1"));
+ assertFalse(ips.contains("fe80::1%en0"));
+ assertFalse(ips.contains("fe80::1%eth0"));
+ assertEquals(2, seed.countIPs());
+ }
+
+ @Test
+ public void clashMatchesIPv6WithZoneId() {
+ final Seed seed = seed();
+ seed.setIP("192.0.2.10");
+ seed.setIP("fe80::1");
+
+ final Set<String> otherIPs = new HashSet<String>();
+ otherIPs.add("fe80::1%en0");
+
+ assertTrue(seed.clash(otherIPs));
+ }
+
+ @Test
+ public void clashMatchesEquivalentIPv6TextForms() {
+ final Seed seed = seed();
+ seed.setIP("192.0.2.10");
+ seed.setIP("2001:db8::1");
+
+ final Set<String> otherIPs = new HashSet<String>();
+ otherIPs.add("2001:db8:0:0:0:0:0:1");
+
+ assertTrue(seed.clash(otherIPs));
+ }
+}