changeset 2425:47c53031d2bc

Avoid IOOBE in VmSocketIdentifier. Reviewed-by: neugens Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2016-August/020653.html
author Severin Gehwolf <sgehwolf@redhat.com>
date Tue, 23 Aug 2016 19:16:09 +0200
parents d3945e6e5b8b
children ec9be9806a79
files vm-byteman/agent/src/main/java/com/redhat/thermostat/vm/byteman/agent/internal/VmSocketIdentifier.java vm-byteman/agent/src/test/java/com/redhat/thermostat/vm/byteman/agent/internal/VmSocketIdentifierTest.java
diffstat 2 files changed, 33 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/vm-byteman/agent/src/main/java/com/redhat/thermostat/vm/byteman/agent/internal/VmSocketIdentifier.java	Mon Aug 22 13:22:35 2016 -0400
+++ b/vm-byteman/agent/src/main/java/com/redhat/thermostat/vm/byteman/agent/internal/VmSocketIdentifier.java	Tue Aug 23 19:16:09 2016 +0200
@@ -54,8 +54,10 @@
     }
     
     String getName() {
-        String agentIdPart = agentId.substring(0, AGENT_ID_PART_LENGTH);
-        String vmIdPart = vmId.substring(0, VM_ID_PART_LENGTH);
+        int agentIdLength = Math.min(agentId.length(), AGENT_ID_PART_LENGTH);
+        int vmIdLength = Math.min(vmId.length(), VM_ID_PART_LENGTH);
+        String agentIdPart = agentId.substring(0, agentIdLength);
+        String vmIdPart = vmId.substring(0, vmIdLength);
         return String.format(SOCKET_FORMAT, agentIdPart, vmIdPart, vmPid);
     }
 
--- a/vm-byteman/agent/src/test/java/com/redhat/thermostat/vm/byteman/agent/internal/VmSocketIdentifierTest.java	Mon Aug 22 13:22:35 2016 -0400
+++ b/vm-byteman/agent/src/test/java/com/redhat/thermostat/vm/byteman/agent/internal/VmSocketIdentifierTest.java	Tue Aug 23 19:16:09 2016 +0200
@@ -47,6 +47,10 @@
 
 public class VmSocketIdentifierTest {
 
+    private static final String SOME_VM_ID = "some-vm-id"; // longer than 4 chars
+    private static final String SOME_AGENT_ID = "some-agent-id"; // longer than 8 chars
+    private static final int SOME_PID = 9999;
+    
     @Test(expected = NullPointerException.class)
     public void testNullNotAcceptedAgentId() {
         new VmSocketIdentifier("foo", 30, null);
@@ -70,12 +74,17 @@
     }
     
     @Test
+    public void getNameIsFixedAtXCharsKnownIDs() {
+        VmSocketIdentifier id = new VmSocketIdentifier(SOME_VM_ID, 20, SOME_AGENT_ID);
+        String actual = id.getName();
+        assertEquals("8 chars agentId + 4 chars vmId + 6 chars pid + 2 underscores", 20, actual.length());
+        assertEquals("some-age_some_000020", actual);
+    }
+    
+    @Test
     public void testEqualsHashCode() {
-        String vmId = "some-vm-id";
-        String agentId = "some-agent-id";
-        int vmPid = 9999;
-        VmSocketIdentifier id1 = new VmSocketIdentifier(vmId, vmPid, agentId);
-        VmSocketIdentifier id2 = new VmSocketIdentifier(vmId, vmPid, agentId);
+        VmSocketIdentifier id1 = new VmSocketIdentifier(SOME_VM_ID, SOME_PID, SOME_AGENT_ID);
+        VmSocketIdentifier id2 = new VmSocketIdentifier(SOME_VM_ID, SOME_PID, SOME_AGENT_ID);
         assertFalse(id1.equals(null));
         assertFalse(id2.equals(null));
         assertFalse(id2.equals(null)); // multiple invocation
@@ -90,4 +99,19 @@
         assertEquals(id2.hashCode(), id1.hashCode());
         assertEquals(id2.hashCode(), id1.hashCode()); // multiple invocation
     }
+    
+    
+    @Test
+    public void shortAgentIdGetName() {
+        String agentId = "bar"; // less than agent part length of 8
+        String id = new VmSocketIdentifier(SOME_VM_ID, SOME_PID, agentId).getName();
+        assertEquals("bar_some_009999", id);
+    }
+    
+    @Test
+    public void shortVmIdGetName() {
+        String vmId = "foo"; // less than vmId part length of 4
+        String id = new VmSocketIdentifier(vmId, SOME_PID, SOME_AGENT_ID).getName();
+        assertEquals("some-age_foo_009999", id);
+    }
 }