diff options
author | Joey Grover <joeygrover@gmail.com> | 2016-06-29 15:21:45 -0400 |
---|---|---|
committer | Joey Grover <joeygrover@gmail.com> | 2016-06-29 15:21:45 -0400 |
commit | ba3472068fe3fb112a7a0187e86ecce871e46b2a (patch) | |
tree | a774773f7ed5ca7d7bd47c09b9c3dda8d9efef0c | |
parent | 6ab8b177abe95a498f44887cc994c06927d30527 (diff) | |
download | sdl_android-ba3472068fe3fb112a7a0187e86ecce871e46b2a.tar.gz |
Adding a few multiplexing tests
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)); + + + + + + } + + + +} |