From 3a879098fe36a747ba884c02f6f3daf4eac9059f Mon Sep 17 00:00:00 2001
From: Netta Peterbursky <nettap@google.com>
Date: Tue, 1 Aug 2017 15:46:06 -0700
Subject: [PATCH] Fix LogAnalysis App Versions dump. (cherry-picked from
 unsubmitted change in oc-dev ag/2549006 and updated)

Test: DumpsysPackageStatsItemTest, manual: java -classpath out/host/linux-x86/tradefed/loganalysis.jar com.android.loganalysis.LogAnalyzer --bugreport bugreport.txt
Bug: b/38415015
Change-Id: I6bce38a18441712d2f182a0d3c60b7851f87470e
---
 .../item/DumpsysPackageStatsItem.java         |  8 ++-
 .../item/DumpsysPackageStatsItemTest.java     | 52 +++++++++++++++++++
 .../parser/DumpsysPackageStatsParserTest.java |  2 +-
 3 files changed, 60 insertions(+), 2 deletions(-)
 create mode 100644 tests/src/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java

diff --git a/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java b/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java
index 14c4073..b10f055 100644
--- a/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java
+++ b/src/com/android/loganalysis/item/DumpsysPackageStatsItem.java
@@ -19,6 +19,8 @@ package com.android.loganalysis.item;
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.util.Map;
+
 /** An {@link IItem} used to store apps and their version codes and names. */
 public class DumpsysPackageStatsItem extends GenericMapItem<AppVersionItem> {
     private static final long serialVersionUID = 1L;
@@ -31,7 +33,11 @@ public class DumpsysPackageStatsItem extends GenericMapItem<AppVersionItem> {
     public JSONObject toJson() {
         JSONObject object = new JSONObject();
         try {
-            object.put(APP_VERSIONS, super.toJson());
+            JSONObject appVersions = new JSONObject();
+            for (Map.Entry<String, AppVersionItem> entry : entrySet()) {
+                appVersions.put(entry.getKey(), entry.getValue().toJson());
+            }
+            object.put(APP_VERSIONS, appVersions);
         } catch (JSONException e) {
             // Ignore
         }
diff --git a/tests/src/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java b/tests/src/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java
new file mode 100644
index 0000000..dd60500
--- /dev/null
+++ b/tests/src/com/android/loganalysis/item/DumpsysPackageStatsItemTest.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.loganalysis.item;
+
+import junit.framework.TestCase;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+/** Unit test for {@link DumpsysPackageStatsItem}. */
+public class DumpsysPackageStatsItemTest extends TestCase {
+
+    /** Test that {@link DumpsysPackageStatsItem#toJson()} returns correctly. */
+    public void testToJson() throws JSONException {
+        DumpsysPackageStatsItem item = new DumpsysPackageStatsItem();
+
+        item.put("com.google.android.calculator", new AppVersionItem(73000302, "7.3 (3821978)"));
+        item.put(
+                "com.google.android.googlequicksearchbox",
+                new AppVersionItem(300734793, "6.16.35.26.arm64"));
+
+        // Convert to JSON string and back again
+        JSONObject output = new JSONObject(item.toJson().toString());
+
+        assertTrue(output.has(DumpsysPackageStatsItem.APP_VERSIONS));
+
+        JSONObject appVersionsJson = output.getJSONObject(DumpsysPackageStatsItem.APP_VERSIONS);
+
+        assertEquals(2, appVersionsJson.length());
+        final JSONObject calcAppVersionJson =
+                appVersionsJson.getJSONObject("com.google.android.calculator");
+        assertEquals(73000302, calcAppVersionJson.getInt(AppVersionItem.VERSION_CODE));
+        assertEquals("7.3 (3821978)", calcAppVersionJson.getString(AppVersionItem.VERSION_NAME));
+        final JSONObject gsaAppVersionJson =
+                appVersionsJson.getJSONObject("com.google.android.googlequicksearchbox");
+        assertEquals(300734793, gsaAppVersionJson.getInt(AppVersionItem.VERSION_CODE));
+        assertEquals("6.16.35.26.arm64", gsaAppVersionJson.getString(AppVersionItem.VERSION_NAME));
+    }
+}
diff --git a/tests/src/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java b/tests/src/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java
index faa51b2..ee15b78 100644
--- a/tests/src/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/DumpsysPackageStatsParserTest.java
@@ -15,8 +15,8 @@
  */
 package com.android.loganalysis.parser;
 
-import com.android.loganalysis.item.DumpsysPackageStatsItem;
 import com.android.loganalysis.item.AppVersionItem;
+import com.android.loganalysis.item.DumpsysPackageStatsItem;
 
 import junit.framework.TestCase;
 
-- 
GitLab