perfsonar-dev - [pS-dev] [GEANT/SA2/ps-java-services] r6020 - in trunk/perfsonar_base: . src/main/java/org/perfsonar/base/util/iptrie src/test/java/org/perfsonar/base src/test/java/org/perfsonar/base/util src/test/java/org/perfsonar/base/util/iptrie
Subject: perfsonar development work
List archive
[pS-dev] [GEANT/SA2/ps-java-services] r6020 - in trunk/perfsonar_base: . src/main/java/org/perfsonar/base/util/iptrie src/test/java/org/perfsonar/base src/test/java/org/perfsonar/base/util src/test/java/org/perfsonar/base/util/iptrie
Chronological Thread
- From:
- To:
- Subject: [pS-dev] [GEANT/SA2/ps-java-services] r6020 - in trunk/perfsonar_base: . src/main/java/org/perfsonar/base/util/iptrie src/test/java/org/perfsonar/base src/test/java/org/perfsonar/base/util src/test/java/org/perfsonar/base/util/iptrie
- Date: Fri, 5 Oct 2012 10:22:57 +0100 (BST)
Author: nordunet.behrmann
Date: 2012-10-05 10:22:57 +0100 (Fri, 05 Oct 2012)
New Revision: 6020
Added:
trunk/perfsonar_base/src/test/java/org/perfsonar/base/util/
trunk/perfsonar_base/src/test/java/org/perfsonar/base/util/iptrie/
trunk/perfsonar_base/src/test/java/org/perfsonar/base/util/iptrie/IPAddressConvertorTest.java
Modified:
trunk/perfsonar_base/pom.xml
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/IPAddressConvertor.java
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/InvalidIPAddressException.java
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/Trie.java
Log:
perfsonar_base: Clean up iptrie utilities
Fixes a number of warnings from static analysis tools, a couple of bugs, and
adds unit tests for the converter utility.
Issue: PSSERVICES-597
Modified: trunk/perfsonar_base/pom.xml
===================================================================
--- trunk/perfsonar_base/pom.xml 2012-10-05 09:22:56 UTC (rev 6019)
+++ trunk/perfsonar_base/pom.xml 2012-10-05 09:22:57 UTC (rev 6020)
@@ -127,7 +127,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>4.0</version>
+ <version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -347,7 +347,7 @@
<linkXRef>true</linkXRef>
<sourceEncoding>utf-8</sourceEncoding>
<minimumTokens>100</minimumTokens>
- <targetJdk>1.5</targetJdk>
+ <targetJdk>1.6</targetJdk>
</configuration>
</plugin>
<plugin>
Modified:
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/IPAddressConvertor.java
===================================================================
---
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/IPAddressConvertor.java
2012-10-05 09:22:56 UTC (rev 6019)
+++
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/IPAddressConvertor.java
2012-10-05 09:22:57 UTC (rev 6020)
@@ -7,50 +7,58 @@
*/
public class IPAddressConvertor
{
- private String ipAddress;
- private int subnetMask;
- private String keyMappedToIPAddress;
- static final String message = "Invalid IP address specified";
+ private final String ipAddress;
+ private final int subnetMask;
+ private final String key;
+ private static final String MESSAGE = "Invalid IP address specified";
- public IPAddressConvertor(String ipAddress) throws
InvalidIPAddressException
+ public IPAddressConvertor(String networkAddress) throws
InvalidIPAddressException
{
- this.ipAddress = ipAddress;
- keyMappedToIPAddress = "";
- splitIPAddressOnSubnetMask();
- ipAddressValidityCheck();
- }
-
- public void splitIPAddressOnSubnetMask() throws InvalidIPAddressException
- {
- String[] splitIP = ipAddress.split("/");
- if (splitIP.length == 2) {
+ try {
+ String[] splitIP = networkAddress.split("/");
+ if (splitIP.length != 2) {
+ throw new InvalidIPAddressException(MESSAGE);
+ }
+ ipAddress = splitIP[0];
subnetMask = Integer.parseInt(splitIP[1]);
- ipAddress = splitIP[0];
- } else {
- throw new InvalidIPAddressException(message);
+ if (subnetMask < 0 || subnetMask > 32) {
+ throw new InvalidIPAddressException(MESSAGE);
+ }
+ key = computeKey(ipAddress);
+ } catch (NumberFormatException e) {
+ throw new InvalidIPAddressException(MESSAGE, e);
}
}
- private void ipAddressValidityCheck() throws InvalidIPAddressException
+ private String computeKey(String address) throws
InvalidIPAddressException
{
-
- ipAddress = this.ipAddress.replace(".", ":");
-
- String[] splitAddress = this.ipAddress.split(":");
+ StringBuilder key = new StringBuilder();
+ String[] splitAddress = address.split("\\.");
if (splitAddress.length == 4) {
- for (int i = 0; i <= 3; i++) {
- int addressPart = Integer.parseInt(splitAddress[i]);
+ for (String part : splitAddress) {
+ int addressPart = Integer.parseInt(part);
char ch = (char) addressPart;
- keyMappedToIPAddress += ch;
+ key.append(ch);
if (!((addressPart >= 0) && (addressPart < 256))) {
- throw new InvalidIPAddressException(message);
+ throw new InvalidIPAddressException(MESSAGE);
}
}
}
+ return key.toString();
}
public String getKey()
{
- return keyMappedToIPAddress;
+ return key;
}
+
+ public String getIpAddress()
+ {
+ return ipAddress;
+ }
+
+ public int getSubnetMask()
+ {
+ return subnetMask;
+ }
}
Modified:
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/InvalidIPAddressException.java
===================================================================
---
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/InvalidIPAddressException.java
2012-10-05 09:22:56 UTC (rev 6019)
+++
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/InvalidIPAddressException.java
2012-10-05 09:22:57 UTC (rev 6020)
@@ -9,9 +9,13 @@
@SuppressWarnings("serial")
public class InvalidIPAddressException extends Exception
{
-
- InvalidIPAddressException(final String message)
+ public InvalidIPAddressException(final String message)
{
super(message);
}
+
+ public InvalidIPAddressException(String message, Throwable cause)
+ {
+ super(message, cause);
+ }
}
Modified:
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/Trie.java
===================================================================
---
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/Trie.java
2012-10-05 09:22:56 UTC (rev 6019)
+++
trunk/perfsonar_base/src/main/java/org/perfsonar/base/util/iptrie/Trie.java
2012-10-05 09:22:57 UTC (rev 6020)
@@ -130,18 +130,16 @@
public boolean Equals(Trie trie)
{
- if (trie != null) {
- if (this.getCount() == trie.getCount()) {
- List<Long> list1 = this.GetKeys();
- List<Long> list2 = trie.GetKeys();
+ if (trie != null && this.getCount() == trie.getCount()) {
+ List<Long> list1 = this.GetKeys();
+ List<Long> list2 = trie.GetKeys();
- for (int i = 0; i < this.nodeCount; i++) {
- if (!list1.get(i).equals(list2.get(i))) {
- return false;
- }
+ for (int i = 0; i < this.nodeCount; i++) {
+ if (!list1.get(i).equals(list2.get(i))) {
+ return false;
}
- return true;
}
+ return true;
}
return false;
}
@@ -192,20 +190,18 @@
success = ((child != null) && Remove(child, key, keyLength,
currentKeyLength));
- if (success) {
+ if (success && child.getValueCount() < 0) {
// check if we need to delete nodes as we go back along the path
// the node is safe to be deleted if its valueCount = -1
- if (child.getValueCount() < 0) {
- if (child.getKey() == 1) {
- node.setChildOne(null);
- } else {
- node.setChildZero(null);
- }
+ if (child.getKey() == 1) {
+ node.setChildOne(null);
+ } else {
+ node.setChildZero(null);
+ }
- if (node.getValueCount() == 0 && node.getChildZero() == null
&& node.getChildOne() == null) {
- node.setValueCount(-1);
- }
+ if (node.getValueCount() == 0 && node.getChildZero() == null &&
node.getChildOne() == null) {
+ node.setValueCount(-1);
}
}
return success;
Added:
trunk/perfsonar_base/src/test/java/org/perfsonar/base/util/iptrie/IPAddressConvertorTest.java
===================================================================
---
trunk/perfsonar_base/src/test/java/org/perfsonar/base/util/iptrie/IPAddressConvertorTest.java
(rev 0)
+++
trunk/perfsonar_base/src/test/java/org/perfsonar/base/util/iptrie/IPAddressConvertorTest.java
2012-10-05 09:22:57 UTC (rev 6020)
@@ -0,0 +1,56 @@
+package org.perfsonar.base.util.iptrie;
+
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class IPAddressConvertorTest
+{
+ @Test
+ public void shouldConvertAddressToKey() throws Exception
+ {
+ assertThat(given("1.2.3.4/32").getKey(),
is("\u0001\u0002\u0003\u0004"));
+ }
+
+ @Test
+ public void shouldHandleZero() throws Exception
+ {
+ assertThat(given("1.2.3.0/32").getKey(),
is("\u0001\u0002\u0003\u0000"));
+ }
+
+ @Test(expected = InvalidIPAddressException.class)
+ public void shouldFailOnAbsentNetmask() throws Exception
+ {
+ given("1.2.3.0");
+ }
+
+ @Test(expected = InvalidIPAddressException.class)
+ public void shouldFailOnInvalidNetmask() throws Exception
+ {
+ given("1.2.3.0/40");
+ }
+
+ @Test(expected = InvalidIPAddressException.class)
+ public void shouldFailOnInvalidIpAddressk() throws Exception
+ {
+ given("1.2.3.300/32");
+ }
+
+ @Test(expected = InvalidIPAddressException.class)
+ public void shouldFailOnNonDigitIpAddress() throws Exception
+ {
+ given("1.2.3.foo/32");
+ }
+
+ @Test(expected = InvalidIPAddressException.class)
+ public void shouldFailOnNonDigitNetmask() throws Exception
+ {
+ given("1.2.3.4/foo");
+ }
+
+ private IPAddressConvertor given(String networkAddress) throws
InvalidIPAddressException
+ {
+ return new IPAddressConvertor(networkAddress);
+ }
+}
- [pS-dev] [GEANT/SA2/ps-java-services] r6020 - in trunk/perfsonar_base: . src/main/java/org/perfsonar/base/util/iptrie src/test/java/org/perfsonar/base src/test/java/org/perfsonar/base/util src/test/java/org/perfsonar/base/util/iptrie, svn-noreply, 10/05/2012
Archive powered by MHonArc 2.6.16.