SRADA-920 Features provided by cli enabled in da.
authorp.privalov <p.privalov@partner.samsung.com>
Mon, 18 Jul 2016 12:40:29 +0000 (15:40 +0300)
committerMaria Guseva <m.guseva@samsung.com>
Tue, 19 Jul 2016 08:19:32 +0000 (17:19 +0900)
Changes:
 * Required Pages and Charts added to trace with CliInternals.selectFeatures().
 * InTracingArguments featuresList replaced with featuresSet,
   method getFeaturesList(...) replaced with getFeatures(...)
 * Implemented tests for TracingFeatureArguments, containing few possible
   combinations of selected features.
 * Implemented tests for TracingArguments.isValid for different combinations of
   specified features.

Change-Id: Ie4e3c847f5275c05b849def44a298790c5bc4032

org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/CliInternals.java
org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArguments.java
org.tizen.dynamicanalyzer.cli/src/org/tizen/dynamicanalyzer/cli/tracing/TracingFeatureArgument.java
org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsParserTest.java
org.tizen.dynamicanalyzer.cli/test/src/org/tizen/dynamicanalyzer/cli/tracing/TracingArgumentsTest.java

index 68ff35d..57c79b3 100644 (file)
@@ -2,9 +2,12 @@ package org.tizen.dynamicanalyzer.cli;
 
 import java.io.File;
 import java.rmi.ConnectException;
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -26,7 +29,9 @@ import org.tizen.dynamicanalyzer.handlers.UIActionHolder;
 import org.tizen.dynamicanalyzer.project.PackageInfo;
 import org.tizen.dynamicanalyzer.setting.PrimitiveFeature;
 import org.tizen.dynamicanalyzer.setting.SettingDataManager;
+import org.tizen.dynamicanalyzer.setting.TargetData;
 import org.tizen.dynamicanalyzer.setting.Template;
+import org.tizen.dynamicanalyzer.setting.UILayoutDataManager;
 import org.tizen.dynamicanalyzer.util.InternalLogger;
 import org.tizen.dynamicanalyzer.util.Logger;
 import org.tizen.dynamicanalyzer.utils.AnalyzerUtil;
@@ -266,34 +271,22 @@ public final class CliInternals {
        }
 
        /**
-        * Selects features to be used for tracing by given list of
-        * {@link PrimitiveFeature}
+        * Enables all selected features.
         *
-        * @param template
-        *            Template instance
-        * @return <code>true</code> on success
+        * @param features set of features to be enabled.
+        * @return was operation successful or not.
         */
-       private static boolean selectFeatureList(List<PrimitiveFeature> features) {
-               if (features.isEmpty())
-                       return false;
+       private static boolean selectFeatures(Set<PrimitiveFeature> features) {
+               TargetData target = SettingDataManager.INSTANCE.getTarget(null);
+               Set<String> selectedChartSet = new HashSet<String>();
+
+               for (PrimitiveFeature feature : features) {
+                       target.addSelectedFlatFeature(feature.getName());
+                       selectedChartSet.add(feature.getChart());
+               }
 
-               /*
-                * TODO Implement selected features usage in DACLI
-                * 
-                * TargetData target = SettingDataManager.INSTANCE.getTarget(null);
-                * target.setSelectedTemplate(template);
-                * target.changeSelectedFeatureList(template);
-                * 
-                * Set<String> selectedChartSet = new HashSet<String>();
-                * 
-                * for (FeatureValueData feature : template.getData().getFeatureList())
-                * { if (feature.getKey().getData().getChartList().size() > 0) {
-                * selectedChartSet.addAll(feature.getKey().getData() .getChartList());
-                * } } Logger.debug(selectedChartSet);
-                * 
-                * UILayoutDataManager.INSTANCE.setSelectedChartSet(selectedChartSet);
-                */
-               return false; // true;
+               UILayoutDataManager.INSTANCE.setSelectedChartSet(selectedChartSet);
+               return true;
        }
 
        /**
@@ -354,7 +347,6 @@ public final class CliInternals {
         */
        public static TracingProcessContext getContext(String device) throws ConnectException {
                ProcessManagerMBean pmProxy = getPMProxyInstance();
-
                return pmProxy.getContext(device);
        }
 
@@ -414,10 +406,12 @@ public final class CliInternals {
                }
                Logger.debug("Set current app: " + args.getApplication());
 
-               if (!selectFeatureList(args.getFeaturesList())) {
+               if (!selectFeatures(args.getFeatures())) {
                        Logger.debug("Failed to select features");
                        return ErrorCode.ERR_EXCEPTION_OCCURRED;
                }
+               Logger.debug("Set features: "
+                               + Arrays.asList(args.getFeatures().toArray()));
 
                // Create all needed data managers before
                UIActionHolder.getUIAction().setUIElementsBySetting();
index 72aff7f..ec1e74b 100644 (file)
@@ -2,11 +2,10 @@ package org.tizen.dynamicanalyzer.cli.tracing;
 
 import java.io.File;
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.tizen.dynamicanalyzer.setting.PrimitiveFeature;
-import org.tizen.dynamicanalyzer.setting.Template;
 
 /**
  * Context class storing all necessary information for tracing start.
@@ -20,7 +19,7 @@ public class TracingArguments implements Cloneable, Serializable {
 
        private String device;       // device serial number or IP address
        private String application;  // application name
-       private List<PrimitiveFeature> featuresList; // list of features for analysis
+       private Set<PrimitiveFeature> featuresSet; // list of features for analysis
        private File output;         // file with tracing output
        // TODO duration actually is not supported yet by CLI, always set to 0
        private long durationSec;    // tracing duration in seconds (0 is for unlimited duration)
@@ -28,7 +27,7 @@ public class TracingArguments implements Cloneable, Serializable {
        private String errMessage;   // contains message about all found errors during validation ( isValid() )
 
        public TracingArguments() {
-               featuresList = new ArrayList<PrimitiveFeature>();
+               featuresSet = new HashSet<PrimitiveFeature>();
                durationSec = 0;
                errMessage = "";
        }
@@ -73,7 +72,7 @@ public class TracingArguments implements Cloneable, Serializable {
                }
 
                // Features check
-               if (featuresList.isEmpty()) {
+               if (featuresSet.isEmpty()) {
                        result = false;
                        msg += " * At least one feature for tracing must be selected%n";
                }
@@ -154,16 +153,16 @@ public class TracingArguments implements Cloneable, Serializable {
        /**
         * @return the featuresList list of features selected for tracing
         */
-       public List<PrimitiveFeature> getFeaturesList() {
-               return featuresList;
+       public Set<PrimitiveFeature> getFeatures() {
+               return featuresSet;
        }
 
        /**
-        * @param featuresList the feature to be added to list of selected
+        * @param featuresSet the feature to be added to list of selected
         * @return this object to allow chained methods execution
         */
        public TracingArguments addFeature(PrimitiveFeature feature) {
-               featuresList.add(feature);
+               featuresSet.add(feature);
                return this;
        }
 }
index 3434c54..8336947 100644 (file)
@@ -4,6 +4,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
@@ -26,30 +27,26 @@ public enum TracingFeatureArgument {
        SYNC("Y", "synchronization"),
 
        // Options for single features selection
-       UIEVENT("U", PrimitiveFeature.UI_EVENT), PERIPHERAL("P",
-                       PrimitiveFeature.PERIPHERAL_STATUS), POWER("E",
-                                       PrimitiveFeature.POWER_ESTIMATION);
+       UIEVENT("U", PrimitiveFeature.UI_EVENT),
+       PERIPHERAL("P", PrimitiveFeature.PERIPHERAL_STATUS),
+       POWER("E", PrimitiveFeature.POWER_ESTIMATION);
 
        static {
                CPU.addDefaultFeatureValue("usage", PrimitiveFeature.CPU_USAGE);
                CPU.addDefaultFeatureValue("core", PrimitiveFeature.CPU_USAGE_PER_CORE);
-               CPU.addDefaultFeatureValue("frequency",
-                               PrimitiveFeature.CPU_FREQ_PER_CORE);
+               CPU.addDefaultFeatureValue("frequency", PrimitiveFeature.CPU_FREQ_PER_CORE);
 
                MEMORY.addDefaultFeatureValue("system", PrimitiveFeature.SYSTEM_MEMORY);
-               MEMORY.addDefaultFeatureValue("process",
-                               PrimitiveFeature.PROCESS_MEMORY);
+               MEMORY.addDefaultFeatureValue("process", PrimitiveFeature.PROCESS_MEMORY);
                MEMORY.addFeatureValue("heap", PrimitiveFeature.MEMORY_ALLOC);
 
                FILE.addDefaultFeatureValue("io", PrimitiveFeature.DISK_IO);
                FILE.addDefaultFeatureValue("analysis", PrimitiveFeature.FILE_ANALYSIS);
 
-               GRAPHICS.addDefaultFeatureValue("opengl",
-                               PrimitiveFeature.OPENGLES_ANALYSIS);
+               GRAPHICS.addDefaultFeatureValue("opengl", PrimitiveFeature.OPENGLES_ANALYSIS);
 
                NETWORK.addDefaultFeatureValue("io", PrimitiveFeature.NETWORK_IO);
-               NETWORK.addDefaultFeatureValue("analysis",
-                               PrimitiveFeature.NETWORK_ANALYSIS);
+               NETWORK.addDefaultFeatureValue("analysis", PrimitiveFeature.NETWORK_ANALYSIS);
 
                SYNC.addDefaultFeatureValue("thread", PrimitiveFeature.THREAD_ANALYSIS);
                SYNC.addDefaultFeatureValue("sync", PrimitiveFeature.SYNC_ANALYSIS);
@@ -156,7 +153,7 @@ public enum TracingFeatureArgument {
                        opt.parseFeatureOption(result, cmdline);
                }
 
-               if (result.getFeaturesList().isEmpty())
+               if (result.getFeatures().isEmpty())
                        throw new ParseException("No tracing features seleted: at least one feature is required.");
        }
 
@@ -169,7 +166,7 @@ public enum TracingFeatureArgument {
         */
        public static ArrayList<String> toStringArrayList(TracingArguments args) {
                ArrayList<String> result = new ArrayList<String>();
-               List<PrimitiveFeature> features = args.getFeaturesList();
+               Set<PrimitiveFeature> features = args.getFeatures();
                if (features.isEmpty())
                        return result;
 
index 3820085..7f3bd8e 100644 (file)
@@ -26,8 +26,16 @@ public class TracingArgumentsParserTest {
        private final static String             device = "device";
        private final static String             application = "application";
        private final static String             applicationOpt = "-a";
-       private final static PrimitiveFeature   feature = PrimitiveFeature.CPU_USAGE;
-       private final static String             featureOpt = "-C=usage";
+       private final static PrimitiveFeature   cpu = PrimitiveFeature.CPU_USAGE;
+       private final static String             featureOptCPU = "-C=usage";
+       private final static PrimitiveFeature   memory1 = PrimitiveFeature.SYSTEM_MEMORY;
+       private final static PrimitiveFeature   memory2 = PrimitiveFeature.PROCESS_MEMORY;
+       private final static String             featureOptMEMORY = "-M";
+       private final static PrimitiveFeature   file1 = PrimitiveFeature.DISK_IO;
+       private final static PrimitiveFeature   file2 = PrimitiveFeature.FILE_ANALYSIS;
+       private final static String             featureOptFILE = "-F=all";
+       private final static PrimitiveFeature   power = PrimitiveFeature.POWER_ESTIMATION;
+       private final static String             featureOptPOWER = "-E";
        private final static File               output = new File("output.out");
        private final static String             outputOpt = "-o";
        private final static long               duration = 12345;
@@ -47,7 +55,7 @@ public class TracingArgumentsParserTest {
                                device,
                                applicationOpt, application,
                                outputOpt, output.getPath(),
-                               featureOpt
+                               featureOptCPU
                                // TODO duration option is not supported yet
                                // durationOpt, Long.toString(duration)
                                });
@@ -57,8 +65,8 @@ public class TracingArgumentsParserTest {
                assertEquals(device, result.getDevice());
                assertEquals(application, result.getApplication());
                assertEquals(output, result.getOutput());
-               assertEquals(1, result.getFeaturesList().size());
-               assertEquals(feature, result.getFeaturesList().get(0));
+               assertEquals(1, result.getFeatures().size());
+               assertTrue(result.getFeatures().contains(cpu));
                // TODO duration option is not supported yet
                // assertEquals(duration, result.getDuration());
        }
@@ -91,7 +99,7 @@ public class TracingArgumentsParserTest {
                TracingArguments result = TracingArgumentsParser.parse(new String[] {
                                device,
                                applicationOpt, application,
-                               featureOpt });
+                               featureOptCPU });
                assertNotNull(result);
                assertTrue(result.isValid());
                assertNull(result.getOutput());
@@ -103,7 +111,7 @@ public class TracingArgumentsParserTest {
                TracingArguments result = TracingArgumentsParser.parse(new String[] {
                                applicationOpt, application,
                                device,
-                               featureOpt });
+                               featureOptCPU });
                assertNull(result);
        }
 
@@ -112,7 +120,7 @@ public class TracingArgumentsParserTest {
                TracingArguments result = TracingArgumentsParser.parse(new String[] {
                                device,
                                application, applicationOpt,
-                               featureOpt });
+                               featureOptCPU });
                assertNull(result);
        }
 
@@ -121,7 +129,7 @@ public class TracingArgumentsParserTest {
                TracingArguments result = TracingArgumentsParser.parse(new String[] {
                                device,
                                applicationOpt,
-                               featureOpt });
+                               featureOptCPU });
                assertNull(result);
        }
 
@@ -130,7 +138,7 @@ public class TracingArgumentsParserTest {
                TracingArguments result = TracingArgumentsParser.parse(new String[] {
                                device,
                                applicationOpt, application,
-                               featureOpt,
+                               featureOptCPU,
                                "--option", "value" });
                assertNull(result);
        }
@@ -152,7 +160,7 @@ public class TracingArgumentsParserTest {
                TracingArguments result = TracingArgumentsParser.parse(new String[] {
                                device,
                                applicationOpt, application,
-                               featureOpt,
+                               featureOptCPU,
                                outputOpt, output.getPath(),
                                durationOpt, Long.toString(duration),
                                "--", "value"});
@@ -192,7 +200,7 @@ public class TracingArgumentsParserTest {
                TracingArguments args = new TracingArguments()
                                .setDevice(device)
                                .setApplication(application)
-                               .addFeature(feature);
+                               .addFeature(cpu);
                String[] result = TracingArgumentsParser.toStringArray(args);
                assertNotNull(result);
                assertEquals(5, result.length);
@@ -206,7 +214,7 @@ public class TracingArgumentsParserTest {
                TracingArguments args = new TracingArguments()
                                .setDevice(device)
                                .setApplication(application)
-                               .addFeature(feature)
+                               .addFeature(cpu)
                                .setDuration(-10);
                String[] result = TracingArgumentsParser.toStringArray(args);
                assertNull(result);
@@ -217,7 +225,7 @@ public class TracingArgumentsParserTest {
                TracingArguments args = new TracingArguments()
                                .setDevice(device)
                                .setApplication(application)
-                               .addFeature(feature)
+                               .addFeature(cpu)
                                .setOutput(output);
                String[] result = TracingArgumentsParser.toStringArray(args);
                assertNotNull(result);
@@ -236,4 +244,118 @@ public class TracingArgumentsParserTest {
                String[] result = TracingArgumentsParser.toStringArray(null);
                assertNull(result);
        }
+
+       @Test
+       public void parse_AllFeaturesfromGroup() throws Exception {
+               TracingArguments result = TracingArgumentsParser.parse(new String[] {
+                               device,
+                               applicationOpt, application,
+                               outputOpt, output.getPath(),
+                               featureOptFILE
+                               // TODO duration option is not supported yet
+                               // durationOpt, Long.toString(duration)
+                               });
+
+               assertNotNull(result);
+               assertTrue(result.isValid());
+               assertEquals(device, result.getDevice());
+               assertEquals(application, result.getApplication());
+               assertEquals(output, result.getOutput());
+               assertEquals(2, result.getFeatures().size());
+               assertTrue(result.getFeatures().contains(file1));
+               assertTrue(result.getFeatures().contains(file2));
+       }
+
+       @Test
+       public void parse_DefaultFeaturesfromGroup() throws Exception {
+               TracingArguments result = TracingArgumentsParser.parse(new String[] {
+                               device,
+                               applicationOpt, application,
+                               outputOpt, output.getPath(),
+                               featureOptMEMORY
+                               // TODO duration option is not supported yet
+                               // durationOpt, Long.toString(duration)
+                               });
+
+               assertNotNull(result);
+               assertTrue(result.isValid());
+               assertEquals(device, result.getDevice());
+               assertEquals(application, result.getApplication());
+               assertEquals(output, result.getOutput());
+               assertEquals(2, result.getFeatures().size());
+               assertTrue(result.getFeatures().contains(memory1));
+               assertTrue(result.getFeatures().contains(memory2));
+       }
+
+       @Test
+       public void parse_OneFeaturenotFromGroup() throws Exception {
+               TracingArguments result = TracingArgumentsParser.parse(new String[] {
+                               device,
+                               applicationOpt, application,
+                               outputOpt, output.getPath(),
+                               featureOptPOWER
+                               // TODO duration option is not supported yet
+                               // durationOpt, Long.toString(duration)
+                               });
+
+               assertNotNull(result);
+               assertTrue(result.isValid());
+               assertEquals(device, result.getDevice());
+               assertEquals(application, result.getApplication());
+               assertEquals(output, result.getOutput());
+               assertEquals(1, result.getFeatures().size());
+               assertTrue(result.getFeatures().contains(power));
+       }
+
+       @Test
+       public void parse_LotsOfFeatures() throws Exception {
+               TracingArguments result = TracingArgumentsParser.parse(new String[] {
+                               device,
+                               applicationOpt, application,
+                               outputOpt, output.getPath(),
+                               featureOptPOWER,
+                               featureOptCPU,
+                               featureOptFILE,
+                               featureOptMEMORY
+                               // TODO duration option is not supported yet
+                               // durationOpt, Long.toString(duration)
+                               });
+
+               assertNotNull(result);
+               assertTrue(result.isValid());
+               assertEquals(device, result.getDevice());
+               assertEquals(application, result.getApplication());
+               assertEquals(output, result.getOutput());
+               assertEquals(6, result.getFeatures().size());
+       }
+
+       @Test
+       public void toStringArray_TwoFeatures() {
+               TracingArguments args = new TracingArguments()
+                               .setDevice(device)
+                               .setApplication(application)
+                               .addFeature(cpu)
+                               .addFeature(file2);
+               String[] result = TracingArgumentsParser.toStringArray(args);
+               assertNotNull(result);
+               assertEquals(7, result.length);
+       }
+
+       @Test
+       public void toStringArray_ThreeFeatures() {
+               TracingArguments args = new TracingArguments()
+                               .setDevice(device)
+                               .setApplication(application)
+                               .addFeature(cpu)
+                               .addFeature(file1)
+                               .addFeature(file2);
+               String[] result = TracingArgumentsParser.toStringArray(args);
+               assertNotNull(result);
+               assertEquals(8, result.length);
+               assertEquals("-C", result[3]);
+               assertEquals("usage", result[4]);
+               assertEquals("-F", result[5]);
+               assertEquals("analysis", result[6]);
+               assertEquals("io", result[7]);
+       }
 }
index adc05b4..dc05c8c 100644 (file)
@@ -21,6 +21,7 @@ public class TracingArgumentsTest {
        private final static String   application = "application";
        private final static File     output = new File("output.out");
        private final static PrimitiveFeature feature = PrimitiveFeature.CPU_USAGE;
+       private final static PrimitiveFeature feature2 = PrimitiveFeature.POWER_ESTIMATION;
 
        @Before
        public void setUp() {
@@ -84,6 +85,28 @@ public class TracingArgumentsTest {
        }
 
        @Test
+       public void isValid_TwoFeatures() {
+               TracingArguments args = new TracingArguments()
+                                                               .setDevice(device)
+                                                               .setApplication(application)
+                                                               .addFeature(feature)
+                                                               .addFeature(feature2);
+               assertTrue(args.isValid());
+               assertTrue(args.getFeatures().size()==2);
+       }
+
+       @Test
+       public void isValid_TwoSameFeatures() {
+               TracingArguments args = new TracingArguments()
+                                                               .setDevice(device)
+                                                               .setApplication(application)
+                                                               .addFeature(feature)
+                                                               .addFeature(feature);
+               assertTrue(args.isValid());
+               assertFalse(args.getFeatures().size() == 2);
+       }
+
+       @Test
        public void isValid_NoOpts() {
                TracingArguments args = new TracingArguments();
                assertFalse(args.isValid());