Merge "Adding unit test for HalApiEntity" am: dc9f081010
am: 73329bdea1

Change-Id: I58ad1d19021d813e58a824afeb38b9180d872ff6
diff --git a/src/test/java/com/android/vts/api/DataRestServletTest.java b/src/test/java/com/android/vts/api/DataRestServletTest.java
index 7d21707..b01c761 100644
--- a/src/test/java/com/android/vts/api/DataRestServletTest.java
+++ b/src/test/java/com/android/vts/api/DataRestServletTest.java
@@ -16,6 +16,8 @@
 
 package com.android.vts.api;
 
+import com.android.vts.entity.BranchEntity;
+import com.android.vts.entity.BuildTargetEntity;
 import com.android.vts.entity.DeviceInfoEntity;
 import com.android.vts.entity.TestEntity;
 import com.android.vts.entity.TestRunEntity;
@@ -25,6 +27,7 @@
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
+import org.mockito.Spy;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -36,13 +39,14 @@
 
 import static com.googlecode.objectify.ObjectifyService.factory;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.when;
 
 public class DataRestServletTest extends ObjectifyTestBase {
 
     private Gson gson;
 
+    @Spy private DataRestServlet servlet;
+
     @Mock private HttpServletRequest request;
 
     @Mock private HttpServletResponse response;
@@ -54,8 +58,20 @@
 
         factory().register(TestEntity.class);
         factory().register(TestRunEntity.class);
+        factory().register(BranchEntity.class);
+        factory().register(BuildTargetEntity.class);
         factory().register(DeviceInfoEntity.class);
 
+        BranchEntity branchEntity1 = new BranchEntity("master");
+        branchEntity1.save();
+        BranchEntity branchEntity2 = new BranchEntity("pi");
+        branchEntity2.save();
+
+        BuildTargetEntity buildTargetEntity1 = new BuildTargetEntity("aosp_arm64_ab-userdebug");
+        buildTargetEntity1.save();
+        BuildTargetEntity buildTargetEntity2 = new BuildTargetEntity("sailfish-userdebug");
+        buildTargetEntity2.save();
+
         Key testParentKey = Key.create(TestEntity.class, "test1");
         Key testRunParentKey = Key.create(testParentKey, TestRunEntity.class, 1);
         DeviceInfoEntity deviceInfoEntity1 =
@@ -87,14 +103,14 @@
     public void testBranchData() throws IOException, ServletException {
 
         when(request.getPathInfo()).thenReturn("/branch");
+        when(request.getParameter("schKey")).thenReturn("*");
 
         StringWriter sw = new StringWriter();
         PrintWriter pw = new PrintWriter(sw);
 
         when(response.getWriter()).thenReturn(pw);
 
-        DataRestServlet dataRestServlet = new DataRestServlet();
-        dataRestServlet.doGet(request, response);
+        servlet.doGet(request, response);
         String result = sw.getBuffer().toString().trim();
 
         LinkedList resultList = gson.fromJson(result, LinkedList.class);
@@ -108,26 +124,18 @@
     public void testDeviceData() throws IOException, ServletException {
 
         when(request.getPathInfo()).thenReturn("/device");
+        when(request.getParameter("schKey")).thenReturn("*");
 
         StringWriter sw = new StringWriter();
         PrintWriter pw = new PrintWriter(sw);
 
         when(response.getWriter()).thenReturn(pw);
 
-        DataRestServlet dataRestServlet = new DataRestServlet();
-        dataRestServlet.doGet(request, response);
+        servlet.doGet(request, response);
         String result = sw.getBuffer().toString().trim();
 
         LinkedList resultList = gson.fromJson(result, LinkedList.class);
 
-        String value = "1";
-        int charValue = value.charAt(0);
-        String next = String.valueOf((char) (charValue + 1));
-        System.out.println(next);
-
-        String s = "asb";
-        System.out.println(s.replace("[.]$", ""));
-        assertTrue(s.charAt(0) == s.charAt(s.length() - 1));
         assertEquals(resultList.size(), 2);
         assertEquals(resultList.get(0), "aosp_arm64_ab-userdebug");
         assertEquals(resultList.get(1), "sailfish-userdebug");
diff --git a/src/test/java/com/android/vts/api/VtsSpreadSheetSyncServletTest.java b/src/test/java/com/android/vts/api/VtsSpreadSheetSyncServletTest.java
index f6e3694..661ea9e 100644
--- a/src/test/java/com/android/vts/api/VtsSpreadSheetSyncServletTest.java
+++ b/src/test/java/com/android/vts/api/VtsSpreadSheetSyncServletTest.java
@@ -19,57 +19,101 @@
 import com.android.vts.entity.ApiCoverageExcludedEntity;
 import com.android.vts.job.VtsSpreadSheetSyncServlet;
 import com.android.vts.util.ObjectifyTestBase;
+import com.google.api.client.extensions.appengine.datastore.AppEngineDataStoreFactory;
+import com.google.api.services.sheets.v4.SheetsScopes;
 import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
+import org.mockito.Spy;
 
 import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
+import java.io.InputStream;
+import java.util.Collections;
 import java.util.List;
+import java.util.Properties;
 
 import static com.googlecode.objectify.ObjectifyService.factory;
 import static com.googlecode.objectify.ObjectifyService.ofy;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.when;
 
+@Slf4j
 public class VtsSpreadSheetSyncServletTest extends ObjectifyTestBase {
 
     private Gson gson;
 
+    @Spy private VtsSpreadSheetSyncServlet servlet;
+
     @Mock private HttpServletRequest request;
 
     @Mock private HttpServletResponse response;
 
-    @Mock ServletConfig servletConfig;
+    @Mock private ServletContext context;
+
+    @Mock private ServletConfig servletConfig;
+
+    @Mock private ServletOutputStream outputStream;
+
+    private final AppEngineDataStoreFactory DATA_STORE_FACTORY = new AppEngineDataStoreFactory();
+
+    private final List<String> GOOGLE_API_SCOPES =
+            Collections.singletonList(SheetsScopes.SPREADSHEETS_READONLY);
 
     /** It be executed before each @Test method */
     @BeforeEach
     void setUpExtra() {
+
+        factory().register(ApiCoverageExcludedEntity.class);
+
         gson = new Gson();
+
+        Properties systemConfigProp = new Properties();
+
+        InputStream defaultInputStream =
+                VtsSpreadSheetSyncServletTest.class
+                        .getClassLoader()
+                        .getResourceAsStream("config.properties");
+
+        try {
+            systemConfigProp.load(defaultInputStream);
+        } catch (FileNotFoundException e) {
+            log.error(e.getMessage());
+        } catch (IOException e) {
+            log.error(e.getMessage());
+        }
+
+        when(request.getServletContext()).thenReturn(context);
+        when(request.getServletContext().getAttribute("dataStoreFactory"))
+                .thenReturn(DATA_STORE_FACTORY);
+        when(request.getServletContext().getAttribute("googleApiScopes"))
+                .thenReturn(GOOGLE_API_SCOPES);
+
+        when(servletConfig.getServletContext()).thenReturn(context);
+        when(servletConfig.getServletContext().getAttribute("systemConfigProp"))
+                .thenReturn(systemConfigProp);
+
     }
 
     @Test
     public void testSyncServletJob() throws IOException, ServletException {
 
-        factory().register(ApiCoverageExcludedEntity.class);
-
         when(request.getPathInfo()).thenReturn("/cron/vts_spreadsheet_sync_job");
 
-        StringWriter sw = new StringWriter();
-        PrintWriter pw = new PrintWriter(sw);
+        when(servlet.getServletConfig()).thenReturn(servletConfig);
+        when(response.getOutputStream()).thenReturn(outputStream);
 
-        when(response.getWriter()).thenReturn(pw);
-
-        VtsSpreadSheetSyncServlet vtsSpreadSheetSyncServlet = new VtsSpreadSheetSyncServlet();
-        vtsSpreadSheetSyncServlet.init(servletConfig);
-        vtsSpreadSheetSyncServlet.doGet(request, response);
-        String result = sw.getBuffer().toString().trim();
+        servlet.init(servletConfig);
+        servlet.doGet(request, response);
+        String result = outputStream.toString().trim();
 
         List<ApiCoverageExcludedEntity> apiCoverageExcludedEntityList =
                 ofy().load().type(ApiCoverageExcludedEntity.class).list();
diff --git a/src/test/java/com/android/vts/entity/ApiCoverageExcludedEntityTest.java b/src/test/java/com/android/vts/entity/ApiCoverageExcludedEntityTest.java
index 4fa9b2a..40d3af9 100644
--- a/src/test/java/com/android/vts/entity/ApiCoverageExcludedEntityTest.java
+++ b/src/test/java/com/android/vts/entity/ApiCoverageExcludedEntityTest.java
@@ -46,6 +46,7 @@
 
     @Test
     public void getUrlSafeKeyTest() {
+        factory().register(CodeCoverageEntity.class);
         factory().register(ApiCoverageExcludedEntity.class);
 
         Key testParentKey = Key.create(TestEntity.class, "test1");
diff --git a/src/test/java/com/android/vts/entity/TestAcknowledgmentEntityTest.java b/src/test/java/com/android/vts/entity/TestAcknowledgmentEntityTest.java
index cf9c322..8ed68b6 100644
--- a/src/test/java/com/android/vts/entity/TestAcknowledgmentEntityTest.java
+++ b/src/test/java/com/android/vts/entity/TestAcknowledgmentEntityTest.java
@@ -68,7 +68,7 @@
 
         Assert.assertNotNull(e);
         Assert.assertEquals(key, e.getProperty(TestAcknowledgmentEntity.TEST_KEY));
-        Assert.assertEquals(user, e.getProperty(TestAcknowledgmentEntity.USER));
+        Assert.assertEquals(user, e.getProperty(TestAcknowledgmentEntity.USER_OBJ));
         Assert.assertTrue(
                 ((List<String>) e.getProperty(TestAcknowledgmentEntity.BRANCHES))
                         .containsAll(branches));
@@ -83,11 +83,11 @@
         TestAcknowledgmentEntity deserialized = TestAcknowledgmentEntity.fromEntity(e);
         Assert.assertNotNull(deserialized);
         Assert.assertEquals(key, deserialized.test);
-        Assert.assertEquals(user, deserialized.user);
-        Assert.assertTrue(deserialized.branches.containsAll(branches));
-        Assert.assertTrue(deserialized.devices.containsAll(devices));
-        Assert.assertTrue(deserialized.testCaseNames.containsAll(testCaseNames));
-        Assert.assertEquals(note.getValue(), deserialized.note);
+        Assert.assertEquals(user, deserialized.getUserObj());
+        Assert.assertTrue(deserialized.getBranches().containsAll(branches));
+        Assert.assertTrue(deserialized.getDevices().containsAll(devices));
+        Assert.assertTrue(deserialized.getTestCaseNames().containsAll(testCaseNames));
+        Assert.assertEquals(note.getValue(), deserialized.getNote());
     }
 
     /** Test serialization to/from Entity objects when optional parameters are null. */
@@ -101,7 +101,7 @@
 
         Assert.assertNotNull(e);
         Assert.assertEquals(key, e.getProperty(TestAcknowledgmentEntity.TEST_KEY));
-        Assert.assertEquals(user, e.getProperty(TestAcknowledgmentEntity.USER));
+        Assert.assertEquals(user, e.getProperty(TestAcknowledgmentEntity.USER_OBJ));
         Assert.assertFalse(e.hasProperty(TestAcknowledgmentEntity.BRANCHES));
         Assert.assertFalse(e.hasProperty(TestAcknowledgmentEntity.DEVICES));
         Assert.assertFalse(e.hasProperty(TestAcknowledgmentEntity.TEST_CASE_NAMES));
@@ -110,11 +110,11 @@
         TestAcknowledgmentEntity deserialized = TestAcknowledgmentEntity.fromEntity(e);
         Assert.assertNotNull(deserialized);
         Assert.assertEquals(key, deserialized.test);
-        Assert.assertEquals(user, deserialized.user);
-        Assert.assertEquals(0, deserialized.branches.size());
-        Assert.assertEquals(0, deserialized.devices.size());
-        Assert.assertEquals(0, deserialized.testCaseNames.size());
-        Assert.assertNull(deserialized.note);
+        Assert.assertEquals(user, deserialized.getUserObj());
+        Assert.assertEquals(0, deserialized.getBranches().size());
+        Assert.assertEquals(0, deserialized.getDevices().size());
+        Assert.assertEquals(0, deserialized.getTestCaseNames().size());
+        Assert.assertNull(deserialized.getNote());
     }
 
     /** Test serialization to/from Json objects. */
@@ -138,11 +138,11 @@
         TestAcknowledgmentEntity deserialized = TestAcknowledgmentEntity.fromJson(user, json);
         Assert.assertNotNull(deserialized);
         Assert.assertEquals(key, deserialized.test);
-        Assert.assertEquals(user, deserialized.user);
-        Assert.assertTrue(deserialized.branches.containsAll(branches));
-        Assert.assertTrue(deserialized.devices.containsAll(devices));
-        Assert.assertTrue(deserialized.testCaseNames.containsAll(testCaseNames));
-        Assert.assertEquals(note.getValue(), deserialized.note);
+        Assert.assertEquals(user, deserialized.getUserObj());
+        Assert.assertTrue(deserialized.getBranches().containsAll(branches));
+        Assert.assertTrue(deserialized.getDevices().containsAll(devices));
+        Assert.assertTrue(deserialized.getTestCaseNames().containsAll(testCaseNames));
+        Assert.assertEquals(note.getValue(), deserialized.getNote());
     }
 
     /** Test serialization to/from Json objects when optional properties are null. */
@@ -159,10 +159,10 @@
         TestAcknowledgmentEntity deserialized = TestAcknowledgmentEntity.fromJson(user, json);
         Assert.assertNotNull(deserialized);
         Assert.assertEquals(key, deserialized.test);
-        Assert.assertEquals(user, deserialized.user);
-        Assert.assertEquals(0, deserialized.branches.size());
-        Assert.assertEquals(0, deserialized.devices.size());
-        Assert.assertEquals(0, deserialized.testCaseNames.size());
-        Assert.assertEquals("", deserialized.note);
+        Assert.assertEquals(user, deserialized.getUserObj());
+        Assert.assertEquals(0, deserialized.getBranches().size());
+        Assert.assertEquals(0, deserialized.getDevices().size());
+        Assert.assertEquals(0, deserialized.getTestCaseNames().size());
+        Assert.assertEquals("", deserialized.getNote());
     }
 }
diff --git a/src/test/java/com/android/vts/job/VtsAlertJobServletTest.java b/src/test/java/com/android/vts/job/VtsAlertJobServletTest.java
index 7f88af8..9c24c65 100644
--- a/src/test/java/com/android/vts/job/VtsAlertJobServletTest.java
+++ b/src/test/java/com/android/vts/job/VtsAlertJobServletTest.java
@@ -16,11 +16,13 @@
 
 package com.android.vts.job;
 
+import static com.googlecode.objectify.ObjectifyService.factory;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import com.android.vts.entity.DeviceInfoEntity;
 import com.android.vts.entity.TestAcknowledgmentEntity;
+import com.android.vts.util.ObjectifyTestBase;
 import com.google.appengine.api.datastore.Key;
 import com.google.appengine.api.datastore.KeyFactory;
 import com.google.appengine.api.users.User;
@@ -31,11 +33,12 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
 
-public class VtsAlertJobServletTest {
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.BeforeEach;
+
+public class VtsAlertJobServletTest extends ObjectifyTestBase {
     private final LocalServiceTestHelper userHelper =
             new LocalServiceTestHelper(new LocalUserServiceTestConfig())
                     .setEnvIsAdmin(true)
@@ -48,8 +51,11 @@
     private Set<String> allTestCases;
     private List<DeviceInfoEntity> allDevices;
 
-    @Before
-    public void setUp() {
+    @BeforeEach
+    void setUpExtra() {
+        factory().register(DeviceInfoEntity.class);
+        factory().register(TestAcknowledgmentEntity.class);
+
         userHelper.setUp();
         user = UserServiceFactory.getUserService().getCurrentUser();
 
@@ -71,7 +77,7 @@
         allDevices.add(device2);
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         userHelper.tearDown();
     }
@@ -79,6 +85,7 @@
     /** Test that acknowledge-all works correctly. */
     @Test
     public void testSeparateAcknowledgedAll() {
+
         Set<String> testCases = new HashSet<>(allTestCases);
         List<TestAcknowledgmentEntity> acks = new ArrayList<>();
         TestAcknowledgmentEntity ack =
@@ -95,6 +102,7 @@
     /** Test that specific branch/device/test case acknowledgement works correctly. */
     @Test
     public void testSeparateAcknowledgedSpecific() {
+
         Set<String> testCases = new HashSet<>(allTestCases);
         List<TestAcknowledgmentEntity> acks = new ArrayList<>();
         List<String> branches = new ArrayList<>();
@@ -120,6 +128,7 @@
     /** Test that specific branch/device/test case acknowledgement skips device mismatches. */
     @Test
     public void testSeparateAcknowledgedSpecificMismatch() {
+
         Set<String> testCases = new HashSet<>(allTestCases);
         List<TestAcknowledgmentEntity> acks = new ArrayList<>();
         List<String> branches = new ArrayList<>();
diff --git a/src/test/java/com/android/vts/job/VtsPerformanceJobServletTest.java b/src/test/java/com/android/vts/job/VtsPerformanceJobServletTest.java
index ba73453..814ab3a 100644
--- a/src/test/java/com/android/vts/job/VtsPerformanceJobServletTest.java
+++ b/src/test/java/com/android/vts/job/VtsPerformanceJobServletTest.java
@@ -21,6 +21,7 @@
 import com.android.vts.entity.ProfilingPointEntity;
 import com.android.vts.entity.ProfilingPointSummaryEntity;
 import com.android.vts.proto.VtsReportMessage.VtsProfilingRegressionMode;
+import com.android.vts.util.ObjectifyTestBase;
 import com.android.vts.util.PerformanceSummary;
 import com.android.vts.util.ProfilingPointSummary;
 import com.android.vts.util.StatSummary;
@@ -36,11 +37,11 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 
-public class VtsPerformanceJobServletTest {
+public class VtsPerformanceJobServletTest extends ObjectifyTestBase {
     private final LocalServiceTestHelper helper =
             new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());
 
@@ -101,12 +102,12 @@
         assertEquals(baseline, text);
     }
 
-    @Before
+    @BeforeEach
     public void setUp() {
         helper.setUp();
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         helper.tearDown();
     }
diff --git a/src/test/java/com/android/vts/job/VtsProfilingStatsJobServletTest.java b/src/test/java/com/android/vts/job/VtsProfilingStatsJobServletTest.java
index 5ed748e..36637a3 100644
--- a/src/test/java/com/android/vts/job/VtsProfilingStatsJobServletTest.java
+++ b/src/test/java/com/android/vts/job/VtsProfilingStatsJobServletTest.java
@@ -28,6 +28,7 @@
 import com.android.vts.entity.TestEntity;
 import com.android.vts.entity.TestRunEntity;
 import com.android.vts.proto.VtsReportMessage;
+import com.android.vts.util.ObjectifyTestBase;
 import com.android.vts.util.StatSummary;
 import com.android.vts.util.TimeUtil;
 import com.google.appengine.api.datastore.DatastoreService;
@@ -55,11 +56,11 @@
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import org.apache.commons.math3.stat.descriptive.moment.Mean;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 
-public class VtsProfilingStatsJobServletTest {
+public class VtsProfilingStatsJobServletTest extends ObjectifyTestBase {
     private final LocalServiceTestHelper helper =
             new LocalServiceTestHelper(
                     new LocalDatastoreServiceTestConfig(),
@@ -67,12 +68,12 @@
                             .setQueueXmlPath("src/main/webapp/WEB-INF/queue.xml"));
     private static final double THRESHOLD = 1e-10;
 
-    @Before
+    @BeforeEach
     public void setUp() {
         helper.setUp();
     }
 
-    @After
+    @AfterEach
     public void tearDown() {
         helper.tearDown();
     }