Hi,
because I saw that we have similar code in our project
(verification of IP addresses) I just wanted to give
you some extended tests for your IP parser. You only
have to replace Ip.assureValidIPv4Format resp.
Ip.assureValidIPv6Format if the according method from
your package.
(This is probably not a bug but just an easy
enhancement that you may use - just could not find a
better way to send it to you ;-)
Best regards from sunny Black Forest, Germany,
Martin Heitz
extended JUnit test for package org.ipdr.test.TestUtil:
/**
* tests {@link Ip}
*/
public class IpTestCase
extends TestCase
{
//~ Constructors
---------------------------------------------------------------------------------------------------
/\*\* \* Constructor for IpTestCase. \* \* @param name the name of the test \*/ public IpTestCase\(final String name\) \{ super\(name\); \} //~ Methods
--------------------------------------------------------------------------------------------------------
/\*\* \* tests \{@link Ip\#assureValidIPv4Format\(String\)\} \*/ public final void testAssureValidIPv4Format\(\) \{ assertInvalidV4\(null\); assertInvalidV4\(""\); assertInvalidV4\("a"\); // too short assertInvalidV4\("10"\); assertInvalidV4\("10.10"\); assertInvalidV4\("10.10.10"\); assertInvalidV4\("a.10.10.10"\); // too long assertInvalidV4\("10.10.10.10.10"\); // leading or trailing separator assertInvalidV4\(".10.10.10.10"\); assertInvalidV4\("10.10.10.10."\); // duplicate separator assertInvalidV4\("10..10.10.10"\); assertInvalidV4\("10.10..10.10"\); assertInvalidV4\("10.10.10..10"\); assertInvalidV4\("10..10.10"\); assertInvalidV4\("10.10..10"\); // spaces assertInvalidV4\(" 10.10.10.10"\); assertInvalidV4\("10 .10.10.10"\); assertInvalidV4\("10. 10.10.10"\); assertInvalidV4\("10.10 .10.10"\); assertInvalidV4\("10.10. 10.10"\); assertInvalidV4\("10.10.10 .10"\); assertInvalidV4\("10.10.10. 10"\); assertInvalidV4\("10.10.10.10 "\); // values out of range assertInvalidV4\("256.10.10.10"\); assertInvalidV4\("10.256.1.1"\); assertInvalidV4\("10.10.256.1"\); assertInvalidV4\("10.10.10.256"\); assertInvalidV4\("-1.10.10.10"\); assertInvalidV4\("1.-1.10.10"\); assertInvalidV4\("1.10.-1.10"\); assertInvalidV4\("1.10.10.-1"\); // wrong format \(too long tokens\) assertInvalidV4\("0000.000.000.000"\); assertInvalidV4\("000.0000.000.000"\); assertInvalidV4\("000.000.0000.000"\); assertInvalidV4\("000.000.000.0000"\); assertValidV4\("0.0.0.0"\); assertValidV4\("000.000.000.000"\); assertValidV4\("255.0.0.0"\); assertValidV4\("0.255.0.0"\); assertValidV4\("0.0.255.0"\); assertValidV4\("0.0.0.255"\); assertValidV4\("255.255.255.255"\); \} private void assertInvalidV4\(final String candidate\) \{ try \{ Ip.assureValidIPv4Format\(candidate\); fail\("candidate '" + candidate + "' is reported to
be valid IPv4");
} catch (Ip.IPFormatException ipfex) {
// expected behaviour
}
}
private void assertValidV4\(final String candidate\) \{ try \{ Ip.assureValidIPv4Format\(candidate\); \} catch \(Ip.IPFormatException ipfex\) \{ ipfex.printStackTrace\(\); fail\("candidate '" + candidate + "' is reported to
be invalid IPv4: " + ipfex);
}
}
/\*\* \* tests \{@link Ip\#assureValidIPv6Format\(String\)\} \*/ public final void testAssureValidIPv6Format\(\) \{ assertInvalidV6\(null\); assertInvalidV6\(""\); assertInvalidV6\("a"\); assertInvalidV6\("G:10:10:10:10:10:10:10"\); assertInvalidV6\("10:G:10:10:10:10:10:10"\); assertInvalidV6\("10:10:G:10:10:10:10:10"\); assertInvalidV6\("10:10:10:G:10:10:10:10"\); assertInvalidV6\("10:10:10:10:G:10:10:10"\); assertInvalidV6\("10:10:10:10:10:G:10:10"\); assertInvalidV6\("10:10:10:10:10:10:G:10"\); assertInvalidV6\("10:10:10:10:10:10:10:G"\); // too short assertInvalidV6\("10"\); assertInvalidV6\("10.10"\); assertInvalidV6\("10.10.10"\); assertInvalidV6\("10.10.10.10"\); assertInvalidV6\("10:10:10:10:10"\); assertInvalidV6\("10:10:10:10:10:10"\); assertInvalidV6\("10:10:10:10:10:10:10"\); // too long assertInvalidV6\("10:10:10:10:10:10:10:10:10"\); // leading or trailing separator assertInvalidV6\(":10:10:10:10:10:10:10:10"\); assertInvalidV6\("10:10:10:10:10:10:10:10:"\); // duplicate separator assertInvalidV6\("10::10:10:10:10:10:10:10"\); assertInvalidV6\("10:10::10:10:10:10:10:10"\); assertInvalidV6\("10:10:10::10:10:10:10:10"\); assertInvalidV6\("10:10:10:10::10:10:10:10"\); assertInvalidV6\("10:10:10:10:10::10:10:10"\); assertInvalidV6\("10:10:10:10:10:10::10:10"\); assertInvalidV6\("10:10:10:10:10:10:10::10"\); assertInvalidV6\("10::10:10:10:10:10:10"\); assertInvalidV6\("10:10::10:10:10:10:10"\); assertInvalidV6\("10:10:10::10:10:10:10"\); assertInvalidV6\("10:10:10:10::10:10:10"\); assertInvalidV6\("10:10:10:10:10::10:10"\); assertInvalidV6\("10:10:10:10:10:10::10"\); // spaces assertInvalidV6\(" 10:10:10:10:10:10:10:10"\); assertInvalidV6\("10 :10:10:10:10:10:10:10"\); assertInvalidV6\("10: 10:10:10:10:10:10:10"\); assertInvalidV6\("10:10 :10:10:10:10:10:10"\); assertInvalidV6\("10:10: 10:10:10:10:10:10"\); assertInvalidV6\("10:10:10 :10:10:10:10:10"\); assertInvalidV6\("10:10:10 :10:10:10:10:10"\); assertInvalidV6\("10:10:10: 10:10:10:10:10"\); assertInvalidV6\("10:10:10:10 :10:10:10:10"\); assertInvalidV6\("10:10:10:10: 10:10:10:10"\); assertInvalidV6\("10:10:10:10:10 :10:10:10"\); assertInvalidV6\("10:10:10:10:10: 10:10:10"\); assertInvalidV6\("10:10:10:10:10:10 :10:10"\); assertInvalidV6\("10:10:10:10:10:10: 10:10"\); assertInvalidV6\("10:10:10:10:10:10:10 :10"\); assertInvalidV6\("10:10:10:10:10:10:10: 10"\); assertInvalidV6\("10:10:10:10:10:10:10:10 "\); // values out of range assertInvalidV6\("FFFF0:10:10:10:10:10:10:10"\); assertInvalidV6\("10:FFFF0:10:10:10:10:10:10"\); assertInvalidV6\("10:10:FFFF0:10:10:10:10:10"\); assertInvalidV6\("10:10:10:FFFF0:10:10:10:10"\); assertInvalidV6\("10:10:10:10:FFFF0:10:10:10"\); assertInvalidV6\("10:10:10:10:10:FFFF0:10:10"\); assertInvalidV6\("10:10:10:10:10:10:FFFF0:10"\); assertInvalidV6\("10:10:10:10:10:10:10:FFFF0"\); assertInvalidV6\("-1:10:10:10:10:10:10:10"\); assertInvalidV6\("10:-1:10:10:10:10:10:10"\); assertInvalidV6\("10:10:-1:10:10:10:10:10"\); assertInvalidV6\("10:10:10:-1:10:10:10:10"\); assertInvalidV6\("10:10:10:10:-1:10:10:10"\); assertInvalidV6\("10:10:10:10:10:-1:10:10"\); assertInvalidV6\("10:10:10:10:10:10:-1:10"\); assertInvalidV6\("10:10:10:10:10:10:10:-1"\); // wrong format \(too long tokens\)
assertInvalidV6("00000:0000:0000:0000:0000:0000:0000:0000");
assertInvalidV6("0000:00000:0000:0000:0000:0000:0000:0000");
assertInvalidV6("0000:0000:00000:0000:0000:0000:0000:0000");
assertInvalidV6("0000:0000:0000:00000:0000:0000:0000:0000");
assertInvalidV6("0000:0000:0000:0000:00000:0000:0000:0000");
assertInvalidV6("0000:0000:0000:0000:0000:00000:0000:0000");
assertInvalidV6("0000:0000:0000:0000:0000:0000:00000:0000");
assertInvalidV6("0000:0000:0000:0000:0000:0000:0000:00000");
// wrong format \(not hex\) \(== too long...\)
assertInvalidV6("65536:0000:0000:0000:0000:0000:0000:0000");
assertValidV6\("10:10:10:10:10:10:10:10"\); assertValidV6\("0:0:0:0:0:0:0:0"\); assertValidV6\("0000:0000:0000:0000:0000:0000:0000:0000"\); assertValidV6\("ffff:0:0:0:0:0:0:0"\); assertValidV6\("0:ffff:0:0:0:0:0:0"\); assertValidV6\("0:0:ffff:0:0:0:0:0"\); assertValidV6\("0:0:0:ffff:0:0:0:0"\); assertValidV6\("0:0:0:0:ffff:0:0:0"\); assertValidV6\("0:0:0:0:0:ffff:0:0"\); assertValidV6\("0:0:0:0:0:0:ffff:0"\); assertValidV6\("0:0:0:0:0:0:0:ffff"\); assertValidV6\("fFff:0:0:0:0:0:0:0"\); assertValidV6\("0:fFff:0:0:0:0:0:0"\); assertValidV6\("0:0:fFff:0:0:0:0:0"\); assertValidV6\("0:0:0:fFff:0:0:0:0"\); assertValidV6\("0:0:0:0:fFff:0:0:0"\); assertValidV6\("0:0:0:0:0:fFff:0:0"\); assertValidV6\("0:0:0:0:0:0:fFff:0"\); assertValidV6\("0:0:0:0:0:0:0:fFff"\); assertValidV6\("FFFF:0:0:0:0:0:0:0"\); assertValidV6\("0:FFFF:0:0:0:0:0:0"\); assertValidV6\("0:0:FFFF:0:0:0:0:0"\); assertValidV6\("0:0:0:FFFF:0:0:0:0"\); assertValidV6\("0:0:0:0:FFFF:0:0:0"\); assertValidV6\("0:0:0:0:0:FFFF:0:0"\); assertValidV6\("0:0:0:0:0:0:FFFF:0"\); assertValidV6\("0:0:0:0:0:0:0:FFFF"\); assertValidV6\("FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF"\); \} private void assertInvalidV6\(final String candidate\) \{ try \{ Ip.assureValidIPv6Format\(candidate\); fail\("candidate '" + candidate + "' is reported to
be valid IPv6");
} catch (Ip.IPFormatException ipfex) {
// expected behaviour
}
}
private void assertValidV6\(final String candidate\) \{ try \{ Ip.assureValidIPv6Format\(candidate\); \} catch \(Ip.IPFormatException ipfex\) \{ ipfex.printStackTrace\(\); fail\("candidate '" + candidate + "' is reported to
be invalid IPv6: " + ipfex);
}
}
}