changeset 1580:3c0f219f340a

Abort gracefully on 'profile-vm show' if no data Reviewed-by: neugens, vanaltj Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2014-November/011739.html
author Omair Majid <omajid@redhat.com>
date Fri, 28 Nov 2014 16:40:46 -0500
parents 783d3874f9ff
children 610cf7f75c49
files vm-profiler/client-cli/src/main/java/com/redhat/thermostat/vm/profiler/client/cli/internal/LocaleResources.java vm-profiler/client-cli/src/main/java/com/redhat/thermostat/vm/profiler/client/cli/internal/ProfileVmCommand.java vm-profiler/client-cli/src/main/resources/com/redhat/thermostat/vm/profiler/client/cli/internal/strings.properties vm-profiler/client-cli/src/test/java/com/redhat/thermostat/vm/profiler/client/cli/internal/ProfileVmCommandTest.java
diffstat 4 files changed, 47 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/vm-profiler/client-cli/src/main/java/com/redhat/thermostat/vm/profiler/client/cli/internal/LocaleResources.java	Fri Nov 28 16:39:08 2014 -0500
+++ b/vm-profiler/client-cli/src/main/java/com/redhat/thermostat/vm/profiler/client/cli/internal/LocaleResources.java	Fri Nov 28 16:40:46 2014 -0500
@@ -53,6 +53,7 @@
     STATUS_CURRENTLY_PROFILING,
     STATUS_CURRENTLY_NOT_PROFILING,
 
+    PROFILING_DATA_NOT_AVAILABLE,
     METHOD_PROFILE_HEADER_PERCENTAGE,
     METHOD_PROFILE_HEADER_TIME,
     METHOD_PROFILE_HEADER_NAME,
--- a/vm-profiler/client-cli/src/main/java/com/redhat/thermostat/vm/profiler/client/cli/internal/ProfileVmCommand.java	Fri Nov 28 16:39:08 2014 -0500
+++ b/vm-profiler/client-cli/src/main/java/com/redhat/thermostat/vm/profiler/client/cli/internal/ProfileVmCommand.java	Fri Nov 28 16:40:46 2014 -0500
@@ -194,6 +194,10 @@
     private void showProfilingResults(Console console, VmRef vm) {
         ProfileDAO dao = getService(ProfileDAO.class);
         InputStream data = dao.loadLatestProfileData(vm);
+        if (data == null) {
+            console.getError().println(translator.localize(LocaleResources.PROFILING_DATA_NOT_AVAILABLE).getContents());
+            return;
+        }
         parseAndDisplayProfilingData(console, data);
     }
 
--- a/vm-profiler/client-cli/src/main/resources/com/redhat/thermostat/vm/profiler/client/cli/internal/strings.properties	Fri Nov 28 16:39:08 2014 -0500
+++ b/vm-profiler/client-cli/src/main/resources/com/redhat/thermostat/vm/profiler/client/cli/internal/strings.properties	Fri Nov 28 16:40:46 2014 -0500
@@ -11,6 +11,7 @@
 STATUS_CURRENTLY_PROFILING = Currently profiling: Yes
 STATUS_CURRENTLY_NOT_PROFILING = Currently profiling: No
 
+PROFILING_DATA_NOT_AVAILABLE = Profiling data not available
 METHOD_PROFILE_HEADER_PERCENTAGE = % Time
 METHOD_PROFILE_HEADER_TIME = Time (ms)
 METHOD_PROFILE_HEADER_NAME = Method Name
--- a/vm-profiler/client-cli/src/test/java/com/redhat/thermostat/vm/profiler/client/cli/internal/ProfileVmCommandTest.java	Fri Nov 28 16:39:08 2014 -0500
+++ b/vm-profiler/client-cli/src/test/java/com/redhat/thermostat/vm/profiler/client/cli/internal/ProfileVmCommandTest.java	Fri Nov 28 16:40:46 2014 -0500
@@ -40,6 +40,9 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.io.ByteArrayInputStream;
+import java.nio.charset.StandardCharsets;
+
 import org.junit.Before;
 import org.junit.Test;
 
@@ -139,4 +142,42 @@
 
         assertEquals("Currently profiling: Yes\n", cmdCtxFactory.getOutput());
     }
+
+    @Test
+    public void showSubCommandFailsWhenNoDataToDisplay() throws Exception {
+        AgentInformation agentInfo = mock(AgentInformation.class);
+        when(agentsDao.getAgentInformation(AGENT)).thenReturn(agentInfo);
+
+        SimpleArguments args = new SimpleArguments();
+        args.addArgument("hostId", AGENT_ID);
+        args.addArgument("vmId", VM_ID);
+        args.addNonOptionArgument("show");
+        CommandContext ctx = cmdCtxFactory.createContext(args);
+
+        cmd.run(ctx);
+
+        assertEquals("Profiling data not available\n", cmdCtxFactory.getError());
+    }
+
+    @Test
+    public void showSubCommandDisplaysData() throws Exception {
+        AgentInformation agentInfo = mock(AgentInformation.class);
+        when(agentsDao.getAgentInformation(AGENT)).thenReturn(agentInfo);
+
+        String data = "1000000 foo\n3000000 bar";
+        ByteArrayInputStream in = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));
+        when(profileDao.loadLatestProfileData(VM)).thenReturn(in);
+
+        SimpleArguments args = new SimpleArguments();
+        args.addArgument("hostId", AGENT_ID);
+        args.addArgument("vmId", VM_ID);
+        args.addNonOptionArgument("show");
+        CommandContext ctx = cmdCtxFactory.createContext(args);
+
+        cmd.run(ctx);
+
+        assertEquals("% Time    Time (ms) Method Name\n" +
+                     "75.000000 3         bar\n" +
+                     "25.000000 1         foo\n", cmdCtxFactory.getOutput());
+    }
 }