Mercurial > hg > thermostat
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()); + } }