summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2019-04-03 17:03:35 -0400
committerJoey Grover <joeygrover@gmail.com>2019-04-03 17:03:35 -0400
commit925e7250b7eac563ba0a06efc09ea7a009afa1f6 (patch)
tree795ad499bd982f9074ea8cd8a2409fc4e131e7d2
parent4a6b6444696d938331c2652f78567a85df3363ef (diff)
downloadsdl_android-925e7250b7eac563ba0a06efc09ea7a009afa1f6.tar.gz
Add unit tests for AS updated and SCM notificationbugfix/listen_for_sc_updates
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Test.java14
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java193
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServiceCapabilityTest.java51
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java57
-rw-r--r--android/sdl_android/src/androidTest/java/com/smartdevicelink/test/utl/AppServiceFactory.java75
5 files changed, 383 insertions, 7 deletions
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Test.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Test.java
index 2fa72e73e..62176744f 100644
--- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Test.java
+++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/Test.java
@@ -3,8 +3,12 @@ package com.smartdevicelink.test;
import android.graphics.Color;
import android.util.Log;
+import com.smartdevicelink.R;
+import com.smartdevicelink.SdlConnection.SdlSession2;
import com.smartdevicelink.managers.lockscreen.LockScreenConfig;
+import com.smartdevicelink.protocol.SdlProtocol;
import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.SdlProxyBase;
import com.smartdevicelink.proxy.TTSChunkFactory;
import com.smartdevicelink.proxy.rpc.AppServiceCapability;
import com.smartdevicelink.proxy.rpc.AppServiceData;
@@ -195,6 +199,14 @@ import java.util.Vector;
public class Test {
+ //Versions
+ public static final Version MAX_RPC_VERSION_SUPPORTED = SdlProxyBase.MAX_SUPPORTED_RPC_VERSION;
+ /**
+ * @see SdlProtocol
+ */
+ public static final Version MAX_PROTOCOL_VERSION_SUPPORTED = new Version(5, 2, 0);
+
+
// Test Failure Messages
public static final String NULL = "Value should be null.";
public static final String MATCH = "Values should match.";
@@ -330,7 +342,7 @@ public class Test {
public static final CloudAppProperties GENERAL_CLOUDAPPPROPERTIES = new CloudAppProperties();
public static final AppServiceType GENERAL_APP_SERVICE_TYPE = AppServiceType.MEDIA;
public static final List<Integer> GENERAL_FUNCTION_ID_LIST = Arrays.asList(FunctionID.GET_VEHICLE_DATA.getId(), FunctionID.SEND_HAPTIC_DATA.getId());
- public static final AppServiceManifest GENERAL_APPSERVICEMANIFEST = new AppServiceManifest();
+ public static final AppServiceManifest GENERAL_APPSERVICEMANIFEST = new AppServiceManifest(AppServiceType.MEDIA.name());
public static final MediaServiceManifest GENERAL_MEDIA_SERVICE_MANIFEST = new MediaServiceManifest();
public static final WeatherServiceManifest GENERAL_WEATHER_SERVICE_MANIFEST = new WeatherServiceManifest();
public static final NavigationServiceManifest GENERAL_NAVIGATION_SERVICE_MANIFEST = new NavigationServiceManifest();
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java
index 6dd039211..80eed05e3 100644
--- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java
+++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/proxy/SystemCapabilityManagerTests.java
@@ -1,5 +1,7 @@
package com.smartdevicelink.test.proxy;
+import android.util.SparseArray;
+
import com.smartdevicelink.AndroidTestCase2;
import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.protocol.enums.SessionType;
@@ -11,17 +13,22 @@ import com.smartdevicelink.proxy.interfaces.ISdl;
import com.smartdevicelink.proxy.interfaces.ISdlServiceListener;
import com.smartdevicelink.proxy.interfaces.IVideoStreamListener;
import com.smartdevicelink.proxy.interfaces.OnSystemCapabilityListener;
+import com.smartdevicelink.proxy.rpc.AppServiceCapability;
+import com.smartdevicelink.proxy.rpc.AppServicesCapabilities;
import com.smartdevicelink.proxy.rpc.AudioPassThruCapabilities;
import com.smartdevicelink.proxy.rpc.ButtonCapabilities;
import com.smartdevicelink.proxy.rpc.DisplayCapabilities;
import com.smartdevicelink.proxy.rpc.GetSystemCapabilityResponse;
import com.smartdevicelink.proxy.rpc.HMICapabilities;
+import com.smartdevicelink.proxy.rpc.OnSystemCapabilityUpdated;
+import com.smartdevicelink.proxy.rpc.PhoneCapability;
import com.smartdevicelink.proxy.rpc.PresetBankCapabilities;
import com.smartdevicelink.proxy.rpc.RegisterAppInterfaceResponse;
import com.smartdevicelink.proxy.rpc.SdlMsgVersion;
import com.smartdevicelink.proxy.rpc.SoftButtonCapabilities;
import com.smartdevicelink.proxy.rpc.SystemCapability;
import com.smartdevicelink.proxy.rpc.VideoStreamingCapability;
+import com.smartdevicelink.proxy.rpc.enums.AppServiceType;
import com.smartdevicelink.proxy.rpc.enums.HmiZoneCapabilities;
import com.smartdevicelink.proxy.rpc.enums.SpeechCapabilities;
import com.smartdevicelink.proxy.rpc.enums.SystemCapabilityType;
@@ -29,15 +36,19 @@ import com.smartdevicelink.proxy.rpc.listeners.OnMultipleRequestListener;
import com.smartdevicelink.proxy.rpc.listeners.OnRPCListener;
import com.smartdevicelink.proxy.rpc.listeners.OnRPCNotificationListener;
import com.smartdevicelink.proxy.rpc.listeners.OnRPCRequestListener;
+import com.smartdevicelink.proxy.rpc.listeners.OnRPCResponseListener;
import com.smartdevicelink.streaming.audio.AudioStreamingCodec;
import com.smartdevicelink.streaming.audio.AudioStreamingParams;
import com.smartdevicelink.streaming.video.VideoStreamingParameters;
import com.smartdevicelink.test.Test;
import com.smartdevicelink.test.Validator;
+import com.smartdevicelink.test.utl.AppServiceFactory;
import com.smartdevicelink.util.CorrelationIdGenerator;
import com.smartdevicelink.util.Version;
+import java.util.Collections;
import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
public class SystemCapabilityManagerTests extends AndroidTestCase2 {
public static final String TAG = "SystemCapabilityManagerTests";
@@ -54,7 +65,11 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 {
}
public SystemCapabilityManager createSampleManager(){
- SystemCapabilityManager systemCapabilityManager = new SystemCapabilityManager(new InternalSDLInterface());
+ return createSampleManager(new InternalSDLInterface());
+ }
+
+ public SystemCapabilityManager createSampleManager(InternalSDLInterface iSdl){
+ SystemCapabilityManager systemCapabilityManager = new SystemCapabilityManager(iSdl);
RegisterAppInterfaceResponse raiResponse = new RegisterAppInterfaceResponse();
@@ -146,7 +161,154 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 {
assertFalse(systemCapabilityManager.isCapabilitySupported(SystemCapabilityType.AUDIO_PASSTHROUGH));
}
+ public void testOnSystemCapabilityUpdateWithNoExistingCap(){
+ InternalSDLInterface iSDL = new InternalSDLInterface();
+ SystemCapabilityManager systemCapabilityManager = createSampleManager(iSDL);
+ OnRPCListener scmRpcListener = iSDL.rpcListeners.get(FunctionID.ON_SYSTEM_CAPABILITY_UPDATED.getId()).get(0);
+ assertNotNull(scmRpcListener);
+
+ assertNull(systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES));
+
+ /* PERFORM A NOTIFICATION SEND THROUGH THE SCM */
+ AppServiceCapability addServiceID = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, "test", "3453", true, null);
+ AppServicesCapabilities serviceIdASC = new AppServicesCapabilities();
+ serviceIdASC.setAppServices(Collections.singletonList(addServiceID));
+
+ SystemCapability systemCapability = new SystemCapability();
+ systemCapability.setSystemCapabilityType(SystemCapabilityType.APP_SERVICES);
+ systemCapability.setCapabilityForType(SystemCapabilityType.APP_SERVICES, serviceIdASC);
+
+ OnSystemCapabilityUpdated onSystemCapabilityUpdated = new OnSystemCapabilityUpdated();
+ onSystemCapabilityUpdated.setSystemCapability(systemCapability);
+
+ scmRpcListener.onReceived(onSystemCapabilityUpdated);
+
+ assertNotNull(systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES));
+
+ }
+
+ public void testOnSystemCapabilityUpdated(){
+
+ InternalSDLInterface iSDL = new InternalSDLInterface();
+ String baseName = "NavTest", baseID = "37F98053AE";
+ AppServiceCapability capability1 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, baseName, null, true, null);
+
+ AppServicesCapabilities appServicesCapabilities = new AppServicesCapabilities();
+ appServicesCapabilities.setAppServices(Collections.singletonList(capability1));
+
+ SystemCapabilityManager systemCapabilityManager = createSampleManager(iSDL);
+ assertNotNull(iSDL.rpcListeners.get(FunctionID.ON_SYSTEM_CAPABILITY_UPDATED.getId()));
+ OnRPCListener scmRpcListener = iSDL.rpcListeners.get(FunctionID.ON_SYSTEM_CAPABILITY_UPDATED.getId()).get(0);
+ assertNotNull(scmRpcListener);
+
+ /* CONFIRM THE CAP DOESN'T EXIST IN SCM */
+ AppServicesCapabilities cachedCap = (AppServicesCapabilities)systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES);
+ assertNull(cachedCap);
+
+ /* ADD THE CAP IN SCM */
+ systemCapabilityManager.setCapability(SystemCapabilityType.APP_SERVICES, appServicesCapabilities);
+ /* CONFIRM THE CAP DOES EXIST IN SCM */
+ cachedCap = (AppServicesCapabilities)systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES);
+ assertNotNull(cachedCap);
+ /* CONFIRM THE CAP IN SCM EQUALS ORIGINAL*/
+ assertEquals(cachedCap, appServicesCapabilities);
+ assertNull(cachedCap.getAppServices().get(0).getUpdatedAppServiceRecord().getServiceID());
+
+ /* PERFORM A NOTIFICATION SEND THROUGH THE SCM */
+ AppServiceCapability addServiceID = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, baseName, baseID, true, null);
+ AppServicesCapabilities serviceIdASC = new AppServicesCapabilities();
+ serviceIdASC.setAppServices(Collections.singletonList(addServiceID));
+
+ SystemCapability systemCapability = new SystemCapability();
+ systemCapability.setSystemCapabilityType(SystemCapabilityType.APP_SERVICES);
+ systemCapability.setCapabilityForType(SystemCapabilityType.APP_SERVICES, serviceIdASC);
+
+ OnSystemCapabilityUpdated onSystemCapabilityUpdated = new OnSystemCapabilityUpdated();
+ onSystemCapabilityUpdated.setSystemCapability(systemCapability);
+
+ scmRpcListener.onReceived(onSystemCapabilityUpdated);
+
+ cachedCap = (AppServicesCapabilities)systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES);
+ assertNotNull(cachedCap);
+
+ assertTrue(cachedCap.getAppServices().get(0).getUpdatedAppServiceRecord().getServiceID().equals(baseID));
+
+ appServicesCapabilities.updateAppServices(Collections.singletonList(addServiceID));
+ assertTrue(serviceIdASC.getAppServices().get(0).getUpdatedAppServiceRecord().getServiceID().equalsIgnoreCase(appServicesCapabilities.getAppServices().get(0).getUpdatedAppServiceRecord().getServiceID()));
+
+ assertEquals(cachedCap, appServicesCapabilities);
+
+
+ /* PERFORM A NOTIFICATION SEND THROUGH AN UPDATED SERVICE NAME */
+ AppServiceCapability newServiceName = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, "TestNav", baseID, true, null);
+ AppServicesCapabilities newServiceNameASC = new AppServicesCapabilities();
+ newServiceNameASC.setAppServices(Collections.singletonList(newServiceName));
+
+ systemCapability = new SystemCapability();
+ systemCapability.setSystemCapabilityType(SystemCapabilityType.APP_SERVICES);
+ systemCapability.setCapabilityForType(SystemCapabilityType.APP_SERVICES, newServiceNameASC);
+
+ onSystemCapabilityUpdated = new OnSystemCapabilityUpdated();
+ onSystemCapabilityUpdated.setSystemCapability(systemCapability);
+
+ scmRpcListener.onReceived(onSystemCapabilityUpdated);
+
+ cachedCap = (AppServicesCapabilities)systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES);
+ assertNotNull(cachedCap);
+ assertEquals(cachedCap.getAppServices().size(), 1);
+
+
+ /* PERFORM A NOTIFICATION SEND THROUGH THE SCM WITH DIFFERENT SERVICE */
+ AppServiceCapability newService = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, "NewNav", "eeeeeeeee", false, null);
+ AppServicesCapabilities newServiceASC = new AppServicesCapabilities();
+ newServiceASC.setAppServices(Collections.singletonList(newService));
+
+ systemCapability = new SystemCapability();
+ systemCapability.setSystemCapabilityType(SystemCapabilityType.APP_SERVICES);
+ systemCapability.setCapabilityForType(SystemCapabilityType.APP_SERVICES, newServiceASC);
+
+ onSystemCapabilityUpdated = new OnSystemCapabilityUpdated();
+ onSystemCapabilityUpdated.setSystemCapability(systemCapability);
+
+ scmRpcListener.onReceived(onSystemCapabilityUpdated);
+
+ cachedCap = (AppServicesCapabilities)systemCapabilityManager.getCapability(SystemCapabilityType.APP_SERVICES);
+ assertNotNull(cachedCap);
+ assertEquals(cachedCap.getAppServices().size(), 2);
+
+ }
+
+
+ public void testOnSystemCapabilityUpdatedOverwrite(){
+ InternalSDLInterface iSDL = new InternalSDLInterface();
+ SystemCapabilityManager systemCapabilityManager = createSampleManager(iSDL);
+ OnRPCListener scmRpcListener = iSDL.rpcListeners.get(FunctionID.ON_SYSTEM_CAPABILITY_UPDATED.getId()).get(0);
+ assertNotNull(scmRpcListener);
+ systemCapabilityManager.setCapability(SystemCapabilityType.PHONE_CALL, Test.GENERAL_PHONECAPABILITY);
+
+ PhoneCapability phoneCapability = (PhoneCapability)systemCapabilityManager.getCapability(SystemCapabilityType.PHONE_CALL);
+ assertNotNull(phoneCapability);
+ assertEquals(phoneCapability, Test.GENERAL_PHONECAPABILITY);
+
+ phoneCapability.setDialNumberEnabled(!Test.GENERAL_PHONECAPABILITY.getDialNumberEnabled()); //Flip it
+ SystemCapability systemCapability = new SystemCapability();
+ systemCapability.setSystemCapabilityType(SystemCapabilityType.PHONE_CALL);
+ systemCapability.setCapabilityForType(SystemCapabilityType.PHONE_CALL, phoneCapability);
+ OnSystemCapabilityUpdated onSystemCapabilityUpdated = new OnSystemCapabilityUpdated();
+ onSystemCapabilityUpdated.setSystemCapability(systemCapability);
+
+ scmRpcListener.onReceived(onSystemCapabilityUpdated);
+
+ PhoneCapability phoneCapabilityUpdated = (PhoneCapability)systemCapabilityManager.getCapability(SystemCapabilityType.PHONE_CALL);
+ assertNotNull(phoneCapabilityUpdated);
+ assertFalse(phoneCapabilityUpdated.getDialNumberEnabled());
+ assertEquals(phoneCapability, phoneCapabilityUpdated);
+ }
+
private class InternalSDLInterface implements ISdl{
+ private final Object RPC_LISTENER_LOCK = new Object();
+ SparseArray<CopyOnWriteArrayList<OnRPCListener>> rpcListeners = new SparseArray<>();
+
@Override
public void start(){}
@@ -188,7 +350,9 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 {
}
@Override
- public void addOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) {}
+ public void addOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) {
+
+ }
@Override
public boolean removeOnRPCNotificationListener(FunctionID notificationId, OnRPCNotificationListener listener) {return false;}
@@ -202,12 +366,29 @@ public class SystemCapabilityManagerTests extends AndroidTestCase2 {
public boolean removeOnRPCRequestListener(FunctionID functionID, OnRPCRequestListener listener) {
return false;
}
-
@Override
- public void addOnRPCListener(FunctionID responseId, OnRPCListener listener) { }
-
+ public void addOnRPCListener(FunctionID messageId, OnRPCListener listener){
+ synchronized(RPC_LISTENER_LOCK){
+ if(messageId != null && listener != null){
+ if(rpcListeners.indexOfKey(messageId.getId()) < 0 ){
+ rpcListeners.put(messageId.getId(),new CopyOnWriteArrayList<OnRPCListener>());
+ }
+ rpcListeners.get(messageId.getId()).add(listener);
+ }
+ }
+ }
@Override
- public boolean removeOnRPCListener(FunctionID responseId, OnRPCListener listener) { return false; }
+ public boolean removeOnRPCListener(FunctionID messageId, OnRPCListener listener){
+ synchronized(RPC_LISTENER_LOCK){
+ if(rpcListeners!= null
+ && messageId != null
+ && listener != null
+ && rpcListeners.indexOfKey(messageId.getId()) >= 0){
+ return rpcListeners.get(messageId.getId()).remove(listener);
+ }
+ }
+ return false;
+ }
@Override
public Object getCapability(SystemCapabilityType systemCapabilityType){return null;}
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServiceCapabilityTest.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServiceCapabilityTest.java
index 4459b17f3..ca03861cd 100644
--- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServiceCapabilityTest.java
+++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServiceCapabilityTest.java
@@ -1,20 +1,29 @@
package com.smartdevicelink.test.rpc.datatypes;
import com.smartdevicelink.marshal.JsonRPCMarshaller;
+import com.smartdevicelink.protocol.enums.FunctionID;
import com.smartdevicelink.proxy.rpc.AppServiceCapability;
+import com.smartdevicelink.proxy.rpc.AppServiceManifest;
import com.smartdevicelink.proxy.rpc.AppServiceRecord;
+import com.smartdevicelink.proxy.rpc.MediaServiceManifest;
+import com.smartdevicelink.proxy.rpc.NavigationServiceManifest;
+import com.smartdevicelink.proxy.rpc.SdlMsgVersion;
+import com.smartdevicelink.proxy.rpc.enums.AppServiceType;
import com.smartdevicelink.proxy.rpc.enums.ServiceUpdateReason;
import com.smartdevicelink.test.JsonUtils;
import com.smartdevicelink.test.Test;
import com.smartdevicelink.test.Validator;
+import com.smartdevicelink.test.utl.AppServiceFactory;
import junit.framework.TestCase;
import org.json.JSONException;
import org.json.JSONObject;
+import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
+import java.util.List;
/**
* This is a unit test class for the SmartDeviceLink library project class :
@@ -83,4 +92,46 @@ public class AppServiceCapabilityTest extends TestCase {
fail(Test.JSON_FAIL);
}
}
+
+ public void testMatchesAppService(){
+
+ String baseName = "NavTest", baseID = "37F98053AE";
+
+ AppServiceCapability capability1 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, baseName, baseID, true, null);
+ AppServiceCapability capability2 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, baseName, baseID, true, null);
+
+ assertTrue(capability1.matchesAppService(capability2));
+
+ //Remove the service id from record 2
+ capability2.getUpdatedAppServiceRecord().setServiceID(null);
+ assertNull(capability2.getUpdatedAppServiceRecord().getServiceID());
+ assertTrue(capability1.matchesAppService(capability2));
+
+ /* UPDATE WITH NEW SERVICE MANIFEST CHANGES */
+
+ AppServiceManifest appServiceManifest2 = capability2.getUpdatedAppServiceRecord().getServiceManifest();
+
+ List<FunctionID> handledRPCs2 = new ArrayList<>();
+ handledRPCs2.add(FunctionID.SEND_LOCATION);
+ handledRPCs2.add(FunctionID.GET_WAY_POINTS);
+ appServiceManifest2.setHandledRpcsUsingFunctionIDs(handledRPCs2);
+ capability2.getUpdatedAppServiceRecord().setServiceManifest(appServiceManifest2);
+
+ assertTrue(capability1.matchesAppService(capability2));
+
+
+ /* UPDATE WITH NEW SERVICE MANIFEST APP NAME */
+ capability2.getUpdatedAppServiceRecord().getServiceManifest().setServiceName("Nav-Test");
+ assertFalse(capability1.matchesAppService(capability2));
+
+
+ /* UPDATE WITH NEW SERVICE ID */
+ //Reset name
+ capability2.getUpdatedAppServiceRecord().getServiceManifest().setServiceName(baseName);
+
+ capability2.getUpdatedAppServiceRecord().setServiceID("EEEEEEEEEE");
+ assertFalse(capability1.matchesAppService(capability2));
+ }
+
+
} \ No newline at end of file
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java
index bb2d102f2..968124571 100644
--- a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java
+++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/rpc/datatypes/AppServicesCapabilitiesTests.java
@@ -2,15 +2,19 @@ package com.smartdevicelink.test.rpc.datatypes;
import com.smartdevicelink.proxy.rpc.AppServiceCapability;
import com.smartdevicelink.proxy.rpc.AppServicesCapabilities;
+import com.smartdevicelink.proxy.rpc.enums.AppServiceType;
import com.smartdevicelink.test.JsonUtils;
import com.smartdevicelink.test.Test;
import com.smartdevicelink.test.Validator;
+import com.smartdevicelink.test.utl.AppServiceFactory;
import junit.framework.TestCase;
import org.json.JSONException;
import org.json.JSONObject;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -70,4 +74,57 @@ public class AppServicesCapabilitiesTests extends TestCase {
fail(Test.JSON_FAIL);
}
}
+
+ public void testUpdate(){
+ String baseName = "NavTest", baseID = "37F98053AE";
+ AppServiceCapability capability1 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, baseName, null, true, null);
+ AppServicesCapabilities capabilities1 = new AppServicesCapabilities();
+ capabilities1.setAppServices(Collections.singletonList(capability1));
+
+ assertNotNull(capabilities1.getAppServices());
+ assertEquals(capabilities1.getAppServices().size(), 1);
+ /* TEST TO ENSURE A THE RECORD HAS THE CORRECT "NULL" VALUE FOR SERVICE ID */
+ assertNull(capabilities1.getAppServices().get(0).getUpdatedAppServiceRecord().getServiceID());
+
+ /* TEST TO ENSURE THAT THE LIST DOES NOT GET UPDATED FOR NULL OR EMPTY LISTS */
+ assertFalse(capabilities1.updateAppServices(null));
+ assertFalse(capabilities1.updateAppServices(new ArrayList<AppServiceCapability>()));
+
+
+ AppServiceCapability capability2 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, baseName, baseID, true, null);
+
+ /* TEST TO ENSURE A THE LIST BEING STORED WAS MODIFIED */
+ assertTrue(capabilities1.updateAppServices(Collections.singletonList(capability2)));
+
+ /* TEST TO ENSURE A NEW RECORD WAS NOT ADDED */
+ assertEquals(capabilities1.getAppServices().size(), 1);
+
+ assertTrue(capabilities1.getAppServices().get(0).getUpdatedAppServiceRecord().getServiceID().equals(baseID));
+
+ AppServiceCapability capability3 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, "NewNav", null, true, null);
+
+ /* TEST TO ENSURE A THE LIST BEING STORED WAS MODIFIED */
+ assertTrue(capabilities1.updateAppServices(Collections.singletonList(capability3)));
+
+ /* TEST TO ENSURE A NEW RECORD WAS ADDED */
+ assertEquals(capabilities1.getAppServices().size(), 2);
+
+ AppServiceCapability capability4 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, "NewNav", "eeeeeeeee", true, null);
+
+ /* TEST TO ENSURE A THE LIST BEING STORED WAS MODIFIED */
+ assertTrue(capabilities1.updateAppServices(Collections.singletonList(capability4)));
+
+ /* TEST TO ENSURE A NEW RECORD WAS NOT ADDED */
+ assertEquals(capabilities1.getAppServices().size(), 2);
+
+ AppServiceCapability capability5 = AppServiceFactory.createAppServiceCapability(AppServiceType.NAVIGATION, "NewNav", "fffffff", true, null);
+
+ /* TEST TO ENSURE A THE LIST BEING STORED WAS MODIFIED */
+ assertTrue(capabilities1.updateAppServices(Collections.singletonList(capability5)));
+
+ /* TEST TO ENSURE A NEW RECORD WAS NOT ADDED */
+ assertEquals(capabilities1.getAppServices().size(), 3);
+
+
+ }
} \ No newline at end of file
diff --git a/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/utl/AppServiceFactory.java b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/utl/AppServiceFactory.java
new file mode 100644
index 000000000..108d6e457
--- /dev/null
+++ b/android/sdl_android/src/androidTest/java/com/smartdevicelink/test/utl/AppServiceFactory.java
@@ -0,0 +1,75 @@
+package com.smartdevicelink.test.utl;
+
+import com.smartdevicelink.protocol.enums.FunctionID;
+import com.smartdevicelink.proxy.rpc.AppServiceCapability;
+import com.smartdevicelink.proxy.rpc.AppServiceManifest;
+import com.smartdevicelink.proxy.rpc.AppServiceRecord;
+import com.smartdevicelink.proxy.rpc.MediaServiceManifest;
+import com.smartdevicelink.proxy.rpc.NavigationServiceManifest;
+import com.smartdevicelink.proxy.rpc.SdlMsgVersion;
+import com.smartdevicelink.proxy.rpc.WeatherServiceManifest;
+import com.smartdevicelink.proxy.rpc.enums.AppServiceType;
+import com.smartdevicelink.proxy.rpc.enums.ServiceUpdateReason;
+import com.smartdevicelink.test.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AppServiceFactory {
+
+
+ public static AppServiceManifest createAppServiceManifest(AppServiceType type, String serviceName){
+ AppServiceManifest manifest = new AppServiceManifest();
+
+ manifest.setServiceName(serviceName);
+ manifest.setRpcSpecVersion(new SdlMsgVersion(Test.MAX_RPC_VERSION_SUPPORTED));
+ manifest.setAllowAppConsumers(true);
+ List<FunctionID> handledRPCs = new ArrayList<>();
+
+ switch (type){
+ case MEDIA:
+ handledRPCs.add(FunctionID.BUTTON_PRESS);
+ manifest.setMediaServiceManifest(new MediaServiceManifest());
+ break;
+ case WEATHER:
+ WeatherServiceManifest weatherServiceManifest = new WeatherServiceManifest();
+ weatherServiceManifest.setCurrentForecastSupported(true);
+ weatherServiceManifest.setMaxHourlyForecastAmount(6);
+ weatherServiceManifest.setMaxMinutelyForecastAmount(30);
+ weatherServiceManifest.setMaxMultidayForecastAmount(5);
+ weatherServiceManifest.setWeatherForLocationSupported(true);
+ manifest.setWeatherServiceManifest(weatherServiceManifest);
+ break;
+ case NAVIGATION:
+ handledRPCs.add(FunctionID.SEND_LOCATION);
+ handledRPCs.add(FunctionID.GET_WAY_POINTS);
+ handledRPCs.add(FunctionID.SUBSCRIBE_VEHICLE_DATA);
+ handledRPCs.add(FunctionID.UNSUBSCRIBE_VEHICLE_DATA);
+
+ NavigationServiceManifest navigationServiceManifest = new NavigationServiceManifest();
+ navigationServiceManifest.setAcceptsWayPoints(true);
+ manifest.setNavigationServiceManifest(navigationServiceManifest);
+ break;
+ }
+
+ manifest.setHandledRpcsUsingFunctionIDs(handledRPCs);
+
+ return manifest;
+ }
+
+ public static AppServiceRecord createAppServiceRecord(AppServiceType type, String serviceName, String serviceID, boolean isActive){
+ AppServiceRecord appServiceRecord = new AppServiceRecord();
+ appServiceRecord.setServiceManifest(createAppServiceManifest(type,serviceName));
+ appServiceRecord.setServiceID(serviceID);
+ appServiceRecord.setServiceActive(isActive);
+ appServiceRecord.setServicePublished(true);
+ return appServiceRecord;
+ }
+
+ public static AppServiceCapability createAppServiceCapability(AppServiceType type, String serviceName, String serviceID, boolean isActive, ServiceUpdateReason updateReason){
+ AppServiceCapability appServiceCapability = new AppServiceCapability();
+ appServiceCapability.setUpdatedAppServiceRecord(createAppServiceRecord(type,serviceName,serviceID,isActive));
+ appServiceCapability.setUpdateReason(updateReason);
+ return appServiceCapability;
+ }
+}