summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2016-06-29 15:21:45 -0400
committerJoey Grover <joeygrover@gmail.com>2016-06-29 15:21:45 -0400
commitba3472068fe3fb112a7a0187e86ecce871e46b2a (patch)
treea774773f7ed5ca7d7bd47c09b9c3dda8d9efef0c
parent6ab8b177abe95a498f44887cc994c06927d30527 (diff)
downloadsdl_android-ba3472068fe3fb112a7a0187e86ecce871e46b2a.tar.gz
Adding a few multiplexing tests
-rw-r--r--sdl_android_tests/src/com/smartdevicelink/SdlConnection/SdlConnectionTest.java181
-rw-r--r--sdl_android_tests/src/com/smartdevicelink/test/SdlUnitTestContants.java6
-rw-r--r--sdl_android_tests/src/com/smartdevicelink/transport/MultiplexTransportTest.java76
-rw-r--r--sdl_android_tests/src/com/smartdevicelink/transport/RSVTestCase.java181
-rw-r--r--sdl_android_tests/src/com/smartdevicelink/transport/TransportBrokerTest.java94
5 files changed, 538 insertions, 0 deletions
diff --git a/sdl_android_tests/src/com/smartdevicelink/SdlConnection/SdlConnectionTest.java b/sdl_android_tests/src/com/smartdevicelink/SdlConnection/SdlConnectionTest.java
new file mode 100644
index 000000000..82dba7510
--- /dev/null
+++ b/sdl_android_tests/src/com/smartdevicelink/SdlConnection/SdlConnectionTest.java
@@ -0,0 +1,181 @@
+package com.smartdevicelink.SdlConnection;
+
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import com.smartdevicelink.transport.BTTransportConfig;
+import com.smartdevicelink.transport.BaseTransportConfig;
+import com.smartdevicelink.transport.MultiplexTransportConfig;
+import com.smartdevicelink.transport.RouterServiceValidator;
+import com.smartdevicelink.transport.USBTransportConfig;
+import com.smartdevicelink.transport.enums.TransportType;
+import com.smartdevicelink.test.SdlUnitTestContants;
+
+public class SdlConnectionTest extends AndroidTestCase {
+
+ private static final String TAG = "SdlConnection Tests";
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testForceConnectEvent(){
+ SdlConnection.enableLegacyMode(false, null);
+ assertNull(SdlConnectionTestClass.cachedMultiConfig);
+
+ RouterServiceValidator rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_PERFORM_ALL_CHECKS);
+ MultiplexTransportConfig config = new MultiplexTransportConfig(this.mContext,SdlUnitTestContants.TEST_APP_ID);
+ SdlConnectionTestClass connection = new SdlConnectionTestClass(config,rsvp);
+ assertNotNull(SdlConnectionTestClass.cachedMultiConfig);
+
+ assertTrue(SdlConnectionTestClass.isLegacyModeEnabled());
+
+ assertEquals(TransportType.BLUETOOTH, connection.getCurrentTransportType());
+
+ assertNotNull(SdlConnectionTestClass.cachedMultiConfig);
+
+
+
+ connection.forceHardwareConnectEvent(TransportType.MULTIPLEX);
+ assertFalse(connection.connected);
+
+ assertNotNull(SdlConnectionTestClass.cachedMultiConfig.getService());
+
+
+ assertEquals(TransportType.MULTIPLEX, connection.getCurrentTransportType());
+
+
+ }
+
+ public void testMultiplexConstructor(){
+ SdlConnection.enableLegacyMode(false, null);
+ RouterServiceValidator rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_NONE);
+ MultiplexTransportConfig config = new MultiplexTransportConfig(this.mContext,SdlUnitTestContants.TEST_APP_ID);
+ SdlConnection connection = new SdlConnection(config,rsvp);
+ assertEquals(TransportType.MULTIPLEX, connection.getCurrentTransportType());
+ }
+
+ public void testMultiplexConstructorInsalledFrom(){
+ SdlConnection.enableLegacyMode(false, null);
+ RouterServiceValidator rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_INSTALLED_FROM_CHECK);
+ MultiplexTransportConfig config = new MultiplexTransportConfig(this.mContext,SdlUnitTestContants.TEST_APP_ID);
+ SdlConnection connection = new SdlConnection(config,rsvp);
+ boolean didValidate = rsvp.validate();
+ if(didValidate){
+ assertEquals(TransportType.MULTIPLEX, connection.getCurrentTransportType());
+ }else{
+ assertEquals(TransportType.BLUETOOTH, connection.getCurrentTransportType());
+
+ }
+ }
+
+ public void testMultiplexConstructorTrustedPackage(){
+ SdlConnection.enableLegacyMode(false, null);
+ RouterServiceValidator rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_PACKAGE_CHECK);
+ MultiplexTransportConfig config = new MultiplexTransportConfig(this.mContext,SdlUnitTestContants.TEST_APP_ID);
+ SdlConnection connection = new SdlConnection(config,rsvp);
+ boolean didValidate = rsvp.validate();
+ if(didValidate){
+ assertEquals(TransportType.MULTIPLEX, connection.getCurrentTransportType());
+ }else{
+ assertEquals(TransportType.BLUETOOTH, connection.getCurrentTransportType());
+
+ }
+ }
+
+ public void testMultiplexConstructorTrustedPackageAndVersion(){
+ SdlConnection.enableLegacyMode(false, null);
+ RouterServiceValidator rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_VERSION_CHECK);
+ MultiplexTransportConfig config = new MultiplexTransportConfig(this.mContext,SdlUnitTestContants.TEST_APP_ID);
+ SdlConnection connection = new SdlConnection(config,rsvp);
+ boolean didValidate = rsvp.validate();
+ if(didValidate){
+ assertEquals(TransportType.MULTIPLEX, connection.getCurrentTransportType());
+ }else{
+ assertEquals(TransportType.BLUETOOTH, connection.getCurrentTransportType());
+
+ } }
+
+ public void testMultiplexConstructorAllFlags(){
+ SdlConnection.enableLegacyMode(false, null);
+ RouterServiceValidator rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_PERFORM_ALL_CHECKS);
+ MultiplexTransportConfig config = new MultiplexTransportConfig(this.mContext,SdlUnitTestContants.TEST_APP_ID);
+ SdlConnection connection = new SdlConnection(config,rsvp);
+ boolean didValidate = rsvp.validate();
+ if(didValidate){
+ assertEquals(TransportType.MULTIPLEX, connection.getCurrentTransportType());
+ }else{
+ assertEquals(TransportType.BLUETOOTH, connection.getCurrentTransportType());
+
+ } }
+
+ public void testBluetoothConstructor(){
+ SdlConnection.enableLegacyMode(false, null);
+ BTTransportConfig btConfig = new BTTransportConfig(true);
+ SdlConnection connection = new SdlConnection(btConfig);
+ assertEquals(TransportType.BLUETOOTH, connection.getCurrentTransportType());
+ }
+
+ public void testUsbConstructor(){
+ SdlConnection.enableLegacyMode(false, null);
+ USBTransportConfig btConfig = new USBTransportConfig(mContext);
+ SdlConnection connection = new SdlConnection(btConfig,null);
+ assertFalse(SdlConnection.isLegacyModeEnabled());
+ assertEquals(TransportType.USB, connection.getCurrentTransportType());
+
+ SdlConnection connection2 = new SdlConnection(btConfig);
+ assertEquals(TransportType.USB, connection2.getCurrentTransportType());
+ }
+
+ protected class SdlConnectionTestClass extends SdlConnection{
+ protected boolean connected = false;
+ public SdlConnectionTestClass(BaseTransportConfig transportConfig) {
+ super(transportConfig);
+ }
+
+ protected SdlConnectionTestClass(BaseTransportConfig transportConfig,RouterServiceValidator rsvp){
+ super(transportConfig,rsvp);
+ }
+
+ @Override
+ public void onTransportConnected() {
+ super.onTransportConnected();
+ connected = true;
+ }
+
+ @Override
+ public void onTransportDisconnected(String info) {
+ connected = false;
+ //Grab a currently running router service
+ RouterServiceValidator rsvp2 = new RouterServiceValidator(mContext);
+ rsvp2.setFlags(RouterServiceValidator.FLAG_DEBUG_NONE);
+ assertTrue(rsvp2.validate());
+ assertNotNull(rsvp2.getService());
+ SdlConnectionTestClass.cachedMultiConfig.setService(rsvp2.getService());
+ super.onTransportDisconnected(info);
+ }
+
+ @Override
+ public void onTransportError(String info, Exception e) {
+ connected = false;
+ super.onTransportError(info, e);
+ }
+
+
+
+ }
+
+}
diff --git a/sdl_android_tests/src/com/smartdevicelink/test/SdlUnitTestContants.java b/sdl_android_tests/src/com/smartdevicelink/test/SdlUnitTestContants.java
new file mode 100644
index 000000000..3b38b94f3
--- /dev/null
+++ b/sdl_android_tests/src/com/smartdevicelink/test/SdlUnitTestContants.java
@@ -0,0 +1,6 @@
+package com.smartdevicelink.test;
+
+public class SdlUnitTestContants {
+ public static final String TEST_APP_ID = "123456";
+
+}
diff --git a/sdl_android_tests/src/com/smartdevicelink/transport/MultiplexTransportTest.java b/sdl_android_tests/src/com/smartdevicelink/transport/MultiplexTransportTest.java
new file mode 100644
index 000000000..9f0822a73
--- /dev/null
+++ b/sdl_android_tests/src/com/smartdevicelink/transport/MultiplexTransportTest.java
@@ -0,0 +1,76 @@
+package com.smartdevicelink.transport;
+
+import com.smartdevicelink.protocol.SdlPacket;
+import com.smartdevicelink.test.SdlUnitTestContants;
+import com.smartdevicelink.transport.enums.TransportType;
+
+import android.test.AndroidTestCase;
+
+public class MultiplexTransportTest extends AndroidTestCase {
+
+ private static final int TIMEOUT = 2000;
+
+ RouterServiceValidator rsvp;
+ ITransportListener transportListener;
+
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_NONE);
+ rsvp.validate();
+
+ transportListener = new ITransportListener(){
+
+ @Override
+ public void onTransportPacketReceived(SdlPacket packet) {
+ }
+
+ @Override
+ public void onTransportConnected() {
+ }
+
+ @Override
+ public void onTransportDisconnected(String info) {
+ }
+
+ @Override
+ public void onTransportError(String info, Exception e) {
+ }
+
+ };
+
+ }
+
+
+ public void testThreadRecoverability(){
+ MultiplexTransportConfig config = new MultiplexTransportConfig(this.mContext,SdlUnitTestContants.TEST_APP_ID);
+ // public MultiplexTransport(MultiplexTransportConfig transportConfig, final ITransportListener transportListener){
+ MultiplexTransport trans = new MultiplexTransport(config,transportListener);
+
+ assertTrue(trans.brokerThread.isAlive());
+ if(trans.brokerThread.broker==null){
+ synchronized(trans.brokerThread){
+ try {
+ trans.brokerThread.wait(TIMEOUT);;
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ assertNotNull(trans.brokerThread.broker);
+ //Force this to true so we can test thread
+ trans.brokerThread.connected = true;
+ trans.brokerThread.broker.onHardwareDisconnected(TransportType.BLUETOOTH);
+
+ assertNull(trans.brokerThread);
+
+ trans = new MultiplexTransport(config,transportListener);
+ assertTrue(trans.brokerThread.isAlive());
+
+
+
+ }
+}
diff --git a/sdl_android_tests/src/com/smartdevicelink/transport/RSVTestCase.java b/sdl_android_tests/src/com/smartdevicelink/transport/RSVTestCase.java
new file mode 100644
index 000000000..9a75593dc
--- /dev/null
+++ b/sdl_android_tests/src/com/smartdevicelink/transport/RSVTestCase.java
@@ -0,0 +1,181 @@
+package com.smartdevicelink.transport;
+
+import java.util.List;
+
+import org.json.JSONArray;
+
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.test.AndroidTestCase;
+import android.util.Log;
+
+import com.smartdevicelink.transport.RouterServiceValidator.TrustedAppStore;
+import com.smartdevicelink.util.HttpRequestTask.HttpRequestTaskCallback;
+
+public class RSVTestCase extends AndroidTestCase {
+ private static final String TAG = "RSVTestCase";
+ RouterServiceValidator rsvp;
+ /**
+ * Set this boolean if you want to test the actual validation of router service
+ */
+ boolean liveTest = false;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ rsvp = new RouterServiceValidator(this.mContext);
+
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+/*
+ * These tests are a little strange because they don't test the logic behind the validation of each piece.
+ * However, they allow us to test
+ */
+
+ public void testInstalledFrom(){
+ if(liveTest){
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_INSTALLED_FROM_CHECK);
+ assertTrue(rsvp.validate());
+ }
+ }
+
+ public void testPackageCheck(){
+ if(liveTest){
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_PACKAGE_CHECK);
+ assertTrue(rsvp.validate());
+ }
+ }
+
+ public void testVersionCheck(){
+ if(liveTest){
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_VERSION_CHECK);
+ assertTrue(rsvp.validate());
+ }
+ }
+
+ public void testNoFlags(){
+ if(liveTest){
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_NONE);
+ assertTrue(rsvp.validate());
+ }
+ }
+
+ public void testAllFlags(){
+ if(liveTest){
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_PERFORM_ALL_CHECKS);
+ assertTrue(rsvp.validate());
+ }
+ }
+
+ public void testJsonRecovery(){
+ assertNotNull(rsvp.stringToJson(null));
+ assertNotNull(rsvp.stringToJson("asdf235vq32{]]"));
+
+ }
+
+ public void testInvalidateList(){
+ assertFalse(RouterServiceValidator.invalidateList(null));
+ assertTrue(RouterServiceValidator.invalidateList(mContext));
+ }
+
+ public void testGetTrustedList(){
+ assertNull(RouterServiceValidator.getTrustedList(null));
+ assertNotNull(RouterServiceValidator.getTrustedList(mContext));
+ }
+
+ public void testSetTrustedList(){
+ assertFalse(RouterServiceValidator.setTrustedList(null,null));
+ assertFalse(RouterServiceValidator.setTrustedList(mContext,null));
+ assertFalse(RouterServiceValidator.setTrustedList(null,"test"));
+ assertTrue(RouterServiceValidator.setTrustedList(mContext,"test"));
+ }
+
+ public void testInvalidationSequence(){
+ assertTrue(RouterServiceValidator.invalidateList(mContext));
+ assertTrue(RouterServiceValidator.createTrustedListRequest(mContext,false));
+ }
+
+ public void testAppStorePackages(){
+ assertTrue(TrustedAppStore.isTrustedStore(TrustedAppStore.PLAY_STORE.packageString));
+ assertTrue(TrustedAppStore.isTrustedStore("com.xiaomi.market"));
+ assertFalse(TrustedAppStore.isTrustedStore("test"));
+ assertFalse(TrustedAppStore.isTrustedStore(null));
+
+ rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.setFlags(RouterServiceValidator.FLAG_DEBUG_INSTALLED_FROM_CHECK);
+
+ PackageManager packageManager = mContext.getPackageManager();
+ List<PackageInfo> packages = packageManager.getInstalledPackages(0);
+ String appStore;
+ for(PackageInfo info: packages){
+ appStore = packageManager.getInstallerPackageName(info.packageName);
+ if(TrustedAppStore.isTrustedStore(appStore)){
+ assertTrue(rsvp.wasInstalledByAppStore(info.packageName));
+ }
+ }
+
+ assertFalse(rsvp.wasInstalledByAppStore(null));
+ }
+
+ public void testVersionBlackList(){
+ rsvp = new RouterServiceValidator(this.mContext);
+ JSONArray array = new JSONArray();
+ for(int i=0; i<25; i++){
+ if(i%3 == 0){
+ array.put(i);
+ }
+ }
+ assertTrue(rsvp.verifyVersion(1, null));
+ assertTrue(rsvp.verifyVersion(1, array));
+ assertTrue(rsvp.verifyVersion(100, array));
+ assertFalse(rsvp.verifyVersion(3, array));
+ assertFalse(rsvp.verifyVersion(-3, array));
+
+ }
+
+ static boolean didFinish = false;
+ public void testGetAndCheckList(){
+ final Object REQUEST_LOCK = new Object();
+ didFinish = false;
+ HttpRequestTaskCallback cb = new HttpRequestTaskCallback(){
+
+ @Override
+ public void httpCallComplete(String response) {
+ //Might want to check if this list is ok
+ Log.d(TAG, "APPS! " + response);
+ synchronized(REQUEST_LOCK){
+ didFinish = true;
+ REQUEST_LOCK.notify();
+ }
+ }
+ @Override
+ public void httpFailure(int statusCode) {
+ Log.e(TAG, "Error while requesting trusted app list: " + statusCode);
+ synchronized(REQUEST_LOCK){
+ didFinish = true;
+ REQUEST_LOCK.notify();
+ }
+ }
+ };
+
+ assertTrue(RouterServiceValidator.createTrustedListRequest(mContext,true, cb));
+ //Now wait for call to finish
+ synchronized(REQUEST_LOCK){
+ try {
+ REQUEST_LOCK.wait();
+ assertTrue(didFinish);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ }
+
+
+}
diff --git a/sdl_android_tests/src/com/smartdevicelink/transport/TransportBrokerTest.java b/sdl_android_tests/src/com/smartdevicelink/transport/TransportBrokerTest.java
new file mode 100644
index 000000000..bbc682fbc
--- /dev/null
+++ b/sdl_android_tests/src/com/smartdevicelink/transport/TransportBrokerTest.java
@@ -0,0 +1,94 @@
+package com.smartdevicelink.transport;
+
+import android.bluetooth.BluetoothAdapter;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Messenger;
+import android.test.AndroidTestCase;
+
+import com.smartdevicelink.test.SdlUnitTestContants;
+
+public class TransportBrokerTest extends AndroidTestCase {
+ RouterServiceValidator rsvp;
+ // public TransportBrokerThread(Context context, String appId, ComponentName service){
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ rsvp = new RouterServiceValidator(this.mContext);
+ rsvp.validate();
+
+ }
+
+ private void sleep(){
+ try{
+ Thread.sleep(500);
+ }catch(Exception e){}
+ }
+
+ public void testStart(){
+ TransportBroker broker = new TransportBroker(mContext, SdlUnitTestContants.TEST_APP_ID,rsvp.getService());
+ assertTrue(broker.start());
+ broker.stop();
+ }
+
+ public void testSendPacket(){
+ TransportBroker broker = new TransportBroker(mContext, SdlUnitTestContants.TEST_APP_ID,rsvp.getService());
+ assertTrue(broker.start());
+ BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+ assertNotNull(adapter);
+ assertTrue(adapter.isEnabled());
+
+ //Not ideal, but not implementing callbacks just for unit tests
+ int count = 0;
+ while(broker.routerServiceMessenger == null && count<10){
+ sleep();
+ count++;
+ }
+ assertNotNull(broker.routerServiceMessenger);
+
+
+ //assertFalse(broker.sendPacketToRouterService(null, 0, 0));
+ //assertFalse(broker.sendPacketToRouterService(new byte[3], -1, 0));
+ //assertFalse(broker.sendPacketToRouterService(new byte[3], 0, 4));
+ //assertTrue(broker.sendPacketToRouterService(new byte[3],0, 3));
+
+ broker.stop();
+ }
+
+ public void testOnPacketReceived(){
+ TransportBroker broker = new TransportBroker(mContext, SdlUnitTestContants.TEST_APP_ID,rsvp.getService());
+ assertTrue(broker.start());
+ }
+
+ public void testSendMessageToRouterService(){
+ TransportBroker broker = new TransportBroker(mContext, SdlUnitTestContants.TEST_APP_ID,rsvp.getService());
+ Handler handler = new Handler();
+ Message message = new Message();
+ broker.routerServiceMessenger = null;
+ broker.isBound = true;
+ assertFalse(broker.sendMessageToRouterService(message));
+
+ broker.routerServiceMessenger = new Messenger(handler); //So it's not ambiguous
+ broker.isBound = false;
+ assertFalse(broker.sendMessageToRouterService(message));
+
+ broker.isBound = true;
+ broker.registeredWithRouterService = true;
+
+ message = null;
+ assertFalse(broker.sendMessageToRouterService(message));
+
+ message = new Message();
+
+ assertTrue(broker.sendMessageToRouterService(message));
+
+
+
+
+
+ }
+
+
+
+}