From: p.privalov Date: Thu, 28 Jul 2016 16:43:05 +0000 (+0300) Subject: SRADA-972,SRADA-971 StopCommand output contains ErrorCode. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=701b1fb1d9f4b86383c2412a47bc07f24ea069f9;p=sdk%2Ftools%2Fdynamic-analyzer.git SRADA-972,SRADA-971 StopCommand output contains ErrorCode. If error occured during application selection in Cli mode TracingProcess will be stopped and stop command output will contain error description. Changes: * TracingProcess now able to send message to tracingProcessManager in case of error occured during startTrace() execution. New message type introduced. * CliInternals.selectApp now returns ErrorCode. * PackageInfo.getBinaryInformation() now returns ErrorCode. * Imlemented method getErrorCode(int) in ErrorCode - to get error code by it's number. * in stop command now checked case if TracingProcess is already stopped. In case of wrong application "dacli devices -u" will not show specified device. Change-Id: I73b58b411daa5064294eebf92f67a987841ef10e --- diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java index 9746eb9..46aac74 100644 --- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java +++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java @@ -238,30 +238,32 @@ public final class CliInternals { /** * Selects application by its name. * - * @param application name - * @return true on success + * @param application name. + * @return {@link ErrorCode#SUCCESS} if application has been selected + * successfully. Otherwise ErrorCode showing error occurred during + * application selection will be returned. */ - public static boolean selectApp(String appName) { + public static ErrorCode selectApp(String appName) { DeviceInfo devInfo = Global.getCurrentDeviceInfo(); if (devInfo == null) { Logger.warning("DA failed to set device for " + appName + " application"); - return false; + return ErrorCode.ERR_NO_DEVICE; } DACommunicator.updateAppListFromTarget(); PackageInfo pkgInfo = devInfo.getPkgInfoByLabel(appName); if (pkgInfo == null) { Logger.warning("DA failed to set application " + appName); - return false; + return ErrorCode.ERR_NO_APP; } Global.setCurrentApplication(pkgInfo); List binPaths = pkgInfo.getProcessInformation(); - pkgInfo.getBinaryInformation(binPaths); - if (!pkgInfo.isPossibleToTrace()) { + ErrorCode code = pkgInfo.getBinaryInformation(binPaths); + if (code != ErrorCode.SUCCESS) { Logger.warning("DA is not able to trace application " + appName); - return false; + return code; } devInfo.setSelectedPackageLabel(appName); - return true; + return ErrorCode.SUCCESS; } /** @@ -425,9 +427,8 @@ public final class CliInternals { * * @param args tracing arguments * @return {@link ErrorCode#SUCCESS} if tracing started successfully,
- * {@link ErrorCode#ERR_NO_DEVICE} if couldn't select requested device,
- * {@link ErrorCode#ERR_NO_APP} if couldn't select requested application,
- * {@link ErrorCode#ERR_EXCEPTION_OCCURRED} if couldn't select requested template. + * Otherwise ErrorCode showing error occurred during start tracing + * process will be returned. */ public static ErrorCode startTracing(TracingArguments args) { Logger.info("Starting tracing..."); @@ -443,9 +444,10 @@ public final class CliInternals { } Logger.debug("Set current device: " + args.getDevice()); - if (!selectApp(args.getApplication())) { + ErrorCode code; + if ((code = selectApp(args.getApplication())) != ErrorCode.SUCCESS) { Logger.debug("Failed to select application"); - return ErrorCode.ERR_NO_APP; + return code; } Logger.debug("Set current app: " + args.getApplication()); diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/commands/StopCommand.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/commands/StopCommand.java index 1406376..72bbbd5 100644 --- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/commands/StopCommand.java +++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/commands/StopCommand.java @@ -1,15 +1,12 @@ package org.tizen.dynamicanalyzer.cli.commands; -import java.io.File; import java.rmi.ConnectException; import org.tizen.dynamicanalyzer.cli.CliInternals; import org.tizen.dynamicanalyzer.cli.manager.TracingProcessContext; import org.tizen.dynamicanalyzer.cli.utils.HumanReadableTimeFormat; import org.tizen.dynamicanalyzer.common.DAResult; -import org.tizen.dynamicanalyzer.common.path.PathManager; -import org.tizen.dynamicanalyzer.handlers.CommandAction; -import org.tizen.dynamicanalyzer.project.Project; +import org.tizen.dynamicanalyzer.common.DAResult.ErrorCode; public class StopCommand extends Command { @@ -31,6 +28,17 @@ public class StopCommand extends Command { return ExitCode.EX_OPERATION_FAILED; } + if (ctx.isFinished()) { + ErrorCode code = ErrorCode.getErrorCode(ctx.getErrCode()); + if (code != null) + System.out.println("Tracing on device failed due to:\n" + + code.getErrorMessage()); + else + System.out + .println("Tracing on device failed due to unknown reason."); + return ExitCode.EX_OPERATION_FAILED; + } + // if process not finished yet then stop it if (!ctx.isFinished()) { result = CliInternals.stopTracingProcess(device); diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/manager/TracingProcessManager.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/manager/TracingProcessManager.java index 68de458..b8d0b03 100644 --- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/manager/TracingProcessManager.java +++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/manager/TracingProcessManager.java @@ -367,6 +367,9 @@ public class TracingProcessManager { case INFO_TRACING_TIME: tracingTime = Long.parseLong(message.args[0]); break; + case ERROR_OCCURED: + ctx.finishContext(Integer.parseInt(message.args[0])); + break; // Wrong requests case REQUEST_TRACING_TIME: case STOP_TRACING: diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingProcess.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingProcess.java index 57da32b..b90b28d 100644 --- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingProcess.java +++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingProcess.java @@ -85,6 +85,10 @@ public class TracingProcess { */ public synchronized ErrorCode startTrace() { ErrorCode result = CliInternals.startTracing(args); + if (result != ErrorCode.SUCCESS) { + socketConnection.sendMessage(MessageType.ERROR_OCCURED, Integer.toString(result.getErrorNumber())); + return result; + } // Block until StartTraceManager thread starts all needed jobs try { DAState.waitPrepared(); @@ -106,12 +110,8 @@ public class TracingProcess { public synchronized void stopTrace() { tracingTime = System.currentTimeMillis() - startTime; Global.getProject().setTotalStopTime(tracingTime); - try { socketConnection.sendMessage(MessageType.INFO_TRACING_TIME, Long.toString(tracingTime)); - } catch (IOException e) { - Logger.error("Got Exception while sending tracing time to TracingProcessManager"); - } CliInternals.stopTracing(); } @@ -270,9 +270,13 @@ public class TracingProcess { * @param message message to socket * @throws IOException in case of communication error */ - public void sendMessage(Message message) throws IOException{ - oos.writeObject(message); - oos.flush(); + public void sendMessage(Message message) { + try { + oos.writeObject(message); + oos.flush(); + } catch (IOException e) { + Logger.error("Got Exception while sending message to TracingProcessManager"); + } } /** @@ -283,8 +287,7 @@ public class TracingProcess { * @param args message arguments * @throws IOException in case of communication error */ - public void sendMessage(MessageType messageT, String... args) - throws IOException { + public void sendMessage(MessageType messageT, String... args) { sendMessage(new Message(messageT, args)); } /** diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/utils/Message.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/utils/Message.java index 47c7e7a..5345ffc 100644 --- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/utils/Message.java +++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/utils/Message.java @@ -12,7 +12,8 @@ public class Message implements Serializable { STOP_TRACING, STOP_DONE, INFO_TRACING_TIME, - REQUEST_TRACING_TIME + REQUEST_TRACING_TIME, + ERROR_OCCURED } /** diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAResult.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAResult.java index 2013697..9c86d15 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAResult.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/DAResult.java @@ -116,6 +116,14 @@ public class DAResult implements Serializable { public String getErrorMessage() { return this.errMessage; } + + public static ErrorCode getErrorCode(int num) { + for (ErrorCode code : ErrorCode.values()) { + if (code.errNumber == num) + return code; + } + return null; + } } // Do not call public method of SUCCESS instance. @@ -227,4 +235,8 @@ public class DAResult implements Serializable { Logger.debug(str.toString()); } + + public ErrorCode getErrorCode(){ + return errCode; + } } diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java index 937a347..4b8d8a6 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/project/PackageInfo.java @@ -189,7 +189,7 @@ public class PackageInfo { * * @param binPaths list of paths to binaries to be checked */ - public void getBinaryInformation(List binPaths) { + public ErrorCode getBinaryInformation(List binPaths) { if (!binPaths.isEmpty()) { DAResult hr = new DAResult(ErrorCode.ERR_BIN_INFO_GET_FAIL); try { @@ -205,13 +205,17 @@ public class PackageInfo { UserErrorWarningLabels.ERROR_APP_SELECT_BY_SECURITY); Logger.warning("Failed to get binary info by security reason"); setPossibleToTrace(false); + return ErrorCode.ERR_BY_SECURITY; } else if (!hr.isSuccess()) { UIActionHolder.getUIAction().showWarning(hr); Logger.warning("Failed to get binary info : " + hr.getMessage()); setPossibleToTrace(false); + return hr.getErrorCode(); } else { setPossibleToTrace(true); + return ErrorCode.SUCCESS; } } + return ErrorCode.ERR_BIN_INFO_GET_FAIL; } }