From 3df3f6f0965615e15a4e6a608e990d7e79839b62 Mon Sep 17 00:00:00 2001
From: "p.privalov"
Date: Fri, 22 Jul 2016 12:22:23 +0300
Subject: [PATCH] SRADA-884 Check for application existance added to
startTracing().
Changes:
* New method CliInternals.isApplicationInstalled(..).
* added check to ProcessManager.startTracing(..) for application existance.
* added test for uninstalled application to TracingProcessManagerTest.
setup for other tests updated to pass check in
ProcessManager.startTracing(..).
Change-Id: I70eb82129054c080c9b02e2cda2b7b0ac2d4a18f
---
.../tizen/dynamicanalyzer/cli/CliInternals.java | 24 +++++++++++++++++
.../cli/manager/ProcessManager.java | 10 +++++--
.../cli/manager/ProcessManagerTest.java | 31 +++++++++++++++++++++-
3 files changed, 62 insertions(+), 3 deletions(-)
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 9966899..286f98d 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
@@ -26,6 +26,7 @@ import org.tizen.dynamicanalyzer.communicator.DeviceInfo;
import org.tizen.dynamicanalyzer.communicator.DeviceManager;
import org.tizen.dynamicanalyzer.handlers.CommandAction;
import org.tizen.dynamicanalyzer.handlers.UIActionHolder;
+import org.tizen.dynamicanalyzer.project.AppInfo;
import org.tizen.dynamicanalyzer.project.PackageInfo;
import org.tizen.dynamicanalyzer.setting.PrimitiveFeature;
import org.tizen.dynamicanalyzer.setting.SettingDataManager;
@@ -431,4 +432,27 @@ public final class CliInternals {
return CommandAction.saveToZip(filename);
}
+
+ /**
+ * Checks if application installed on device.
+ *
+ * @param application The application identifier.
+ * @param device The device identifier or serial.
+ * @return true
if application installed and false
+ * otherwise.
+ */
+ public static boolean isApllicationInstalled(String application, String device) {
+ IDevice dev = isIp(device)
+ ? getDeviceByIp(device)
+ : getDeviceBySerial(device);
+ Map packages = getPackageList(dev);
+ if (packages == null)
+ return false;
+ for (Map.Entry entry : packages.entrySet())
+ // Applications in package
+ for (AppInfo info : entry.getValue().getAppInfos())
+ if (info.getLabel().equals(application))
+ return true;
+ return false;
+ }
}
diff --git a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/manager/ProcessManager.java b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/manager/ProcessManager.java
index 9bc9f3b..f428a48 100644
--- a/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/manager/ProcessManager.java
+++ b/org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/manager/ProcessManager.java
@@ -77,8 +77,14 @@ public class ProcessManager implements ProcessManagerMBean {
if (!CliInternals.isDeviceExist(device)) {
Logger.error("Device '%s' does not exist.", device);
- return new DAResult(ErrorCode.ERR_NO_DEVICE, "Device " + device
- + " does not exist.");
+ return new DAResult(ErrorCode.ERR_NO_DEVICE, "Device '" + device
+ + "' does not exist.");
+ }
+
+ if (!CliInternals.isApllicationInstalled(args.getApplication(), device)) {
+ Logger.error("Application '%s' is not installed.", args.getApplication());
+ return new DAResult(ErrorCode.ERR_NO_APP, "Application '"
+ + args.getApplication() + "' is not installed.");
}
if (!isDeviceReady(device)) {
diff --git a/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/manager/ProcessManagerTest.java b/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/manager/ProcessManagerTest.java
index 2dff96f..ccdd564 100644
--- a/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/manager/ProcessManagerTest.java
+++ b/org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/manager/ProcessManagerTest.java
@@ -46,7 +46,7 @@ import org.tizen.sdblib.IDevice;
@SuppressStaticInitializationFor("org.tizen.dynamicanalyzer.cli.CliInternals")
public class ProcessManagerTest {
- private TracingArguments args1, args2, args3;
+ private TracingArguments args1, args2, args3, args4;
private ProcessManager pm;
@@ -87,6 +87,12 @@ public class ProcessManagerTest {
addFeature(PrimitiveFeature.CPU_USAGE).
setDuration(0);
+ args4 = new TracingArguments().
+ setDevice("DEV_4").
+ setApplication("APP_4").
+ addFeature(PrimitiveFeature.CPU_USAGE).
+ setDuration(0);
+
ctx1 = new TracingProcessContext(args1);
ctx2 = new TracingProcessContext(args2);
@@ -123,6 +129,17 @@ public class ProcessManagerTest {
PowerMockito.when(CliInternals.isDeviceExist(args3.getDevice()))
.thenReturn(false);
+ PowerMockito.when(CliInternals.isDeviceExist(args4.getDevice()))
+ .thenReturn(true);
+
+ PowerMockito.when(CliInternals.isApllicationInstalled(args2.getApplication(), args2.getDevice()))
+ .thenReturn(true);
+
+ PowerMockito.when(CliInternals.isApllicationInstalled(args1.getApplication(), args1.getDevice()))
+ .thenReturn(true);
+
+ PowerMockito.when(CliInternals.isApllicationInstalled(args4.getApplication(), args4.getDevice()))
+ .thenReturn(false);
}
/**
@@ -169,6 +186,18 @@ public class ProcessManagerTest {
}
/**
+ * Check manager doesn't start tracing process if application does not exist.
+ */
+ @Test
+ public void startTracing_applicationNotInstalled() throws Exception {
+ setupManagers();
+ DAResult result = pm.startTracing(args4);
+
+ assertEquals(ErrorCode.ERR_NO_APP.getErrorNumber(),
+ result.getErrorNumber());
+ }
+
+ /**
* Check manager correctly responds with list of currently traced devices.
* Test one device present.
*/
--
2.7.4