Menu

#1 Extended tests for IP parsing

open
nobody
None
5
2015-02-19
2004-05-07
No

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);
}
}
}

Discussion


Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.