Skip to content
Snippets Groups Projects
Commit 7df21a91 authored by Gregor Maier's avatar Gregor Maier
Browse files

Fix bug in HexString. Increase test coverage for it

parent 3b804383
No related branches found
No related tags found
No related merge requests found
......@@ -17,6 +17,8 @@
package org.openflow.util;
import java.math.BigInteger;
public class HexString {
/**
* Convert a string of bytes to a ':' separated hex string
......@@ -76,7 +78,11 @@ public class HexString {
}
public static long toLong(String values) throws NumberFormatException {
return Long.parseLong(values.replaceAll(":", ""),16);
// Long.parseLong() can't handle HexStrings with MSB set. Sigh.
BigInteger bi = new BigInteger(values.replaceAll(":", ""),16);
if (bi.bitLength() > 64)
throw new NumberFormatException("Input string too big to fit in long: " + values);
return bi.longValue();
}
}
......@@ -17,6 +17,8 @@
package org.openflow.util;
import org.junit.Test;
import junit.framework.TestCase;
/**
......@@ -27,18 +29,60 @@ import junit.framework.TestCase;
*/
public class HexStringTest extends TestCase {
@Test
public void testMarshalling() throws Exception {
String dpidStr = "00:00:00:23:20:2d:16:71";
long dpid = HexString.toLong(dpidStr);
String testStr = HexString.toHexString(dpid);
TestCase.assertEquals(dpidStr, testStr);
}
@Test
public void testToLong() {
String dpidStr = "3e:1f:01:fc:72:8c:63:31";
long valid = 0x3e1f01fc728c6331L;
long testLong = HexString.toLong(dpidStr);
TestCase.assertEquals(valid, testLong);
}
@Test
public void testToLongMSB() {
String dpidStr = "ca:7c:5e:d1:64:7a:95:9b";
long valid = -3856102927509056101L;
long testLong = HexString.toLong(dpidStr);
TestCase.assertEquals(valid, testLong);
}
@Test
public void testToLongError() {
String dpidStr = "09:08:07:06:05:04:03:02:01";
try {
HexString.toLong(dpidStr);
fail("HexString.toLong() should have thrown a NumberFormatException");
}
catch (NumberFormatException expected) {
// do nothing
}
}
@Test
public void testToStringBytes() {
byte[] dpid = { 0, 0, 0, 0, 0, 0, 0, -1 };
String valid = "00:00:00:00:00:00:00:ff";
String testString = HexString.toHexString(dpid);
TestCase.assertEquals(valid, testString);
}
@Test
public void testFromHexStringError() {
String invalidStr = "00:00:00:00:00:00:ffff";
try {
HexString.fromHexString(invalidStr);
fail("HexString.fromHexString() should have thrown a NumberFormatException");
}
catch (NumberFormatException expected) {
// do nothing
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment