diff options
author | Joey Grover <joeygrover@gmail.com> | 2019-04-03 17:03:35 -0400 |
---|---|---|
committer | Joey Grover <joeygrover@gmail.com> | 2019-04-03 17:03:35 -0400 |
commit | 925e7250b7eac563ba0a06efc09ea7a009afa1f6 (patch) | |
tree | 795ad499bd982f9074ea8cd8a2409fc4e131e7d2 | |
parent | 4a6b6444696d938331c2652f78567a85df3363ef (diff) | |
download | sdl_android-925e7250b7eac563ba0a06efc09ea7a009afa1f6.tar.gz |
Add unit tests for AS updated and SCM notificationbugfix/listen_for_sc_updates
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; + } +} |