diff options
author | Mat Wszedybyl <mat@livio.io> | 2017-07-13 10:09:15 -0400 |
---|---|---|
committer | Mat Wszedybyl <mat@livio.io> | 2017-07-13 10:09:15 -0400 |
commit | 06dc15974852037b804c049dfad08fbad78dd887 (patch) | |
tree | 3106f9e834b4c493b66800f4941a94afb66034cf | |
parent | df8afceebf6670eee1fea7ee4f834bafaf66cfc3 (diff) | |
download | sdl_android-06dc15974852037b804c049dfad08fbad78dd887.tar.gz |
Fixed broken Transport Broker Test
3 files changed, 101 insertions, 58 deletions
diff --git a/sdl_android/build.gradle b/sdl_android/build.gradle index 433324f05..24238741a 100644 --- a/sdl_android/build.gradle +++ b/sdl_android/build.gradle @@ -19,6 +19,11 @@ android { testCoverageEnabled = true } } + + testOptions { + unitTests.returnDefaultValues = true + } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 diff --git a/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportBrokerTest.java b/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportBrokerTest.java index 6ddf9b783..7d436d6bd 100644 --- a/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportBrokerTest.java +++ b/sdl_android/src/androidTest/java/com/smartdevicelink/transport/TransportBrokerTest.java @@ -1,8 +1,10 @@ package com.smartdevicelink.transport; +import android.annotation.SuppressLint; import android.bluetooth.BluetoothAdapter; import android.content.ComponentName; import android.content.Context; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -12,6 +14,7 @@ import android.os.Messenger; import android.os.RemoteException; import android.support.test.InstrumentationRegistry; import android.test.AndroidTestCase; +import android.util.Log; import com.smartdevicelink.protocol.SdlPacket; import com.smartdevicelink.test.SdlUnitTestContants; @@ -30,11 +33,13 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class TransportBrokerTest extends AndroidTestCase { RouterServiceValidator rsvp; + TransportBrokerThread brokerThread; @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @@ -52,26 +57,14 @@ public class TransportBrokerTest extends AndroidTestCase { Thread.sleep(500); }catch(Exception e){} } - - public void testStart() throws Exception{ - if (Looper.myLooper() == null) { - Looper.prepare(); - } - TransportBroker broker = new TransportBroker(mContext, SdlUnitTestContants.TEST_APP_ID,rsvp.getService()); - if(!DeviceUtil.isEmulator()){ // Cannot perform MBT operations in emulator - assertTrue(broker.start()); - } - broker.stop(); - broker.resetSession(); - Field queuedOnTransportConnect = TransportBroker.class.getDeclaredField("queuedOnTransportConnect"); - queuedOnTransportConnect.setAccessible(true); - TransportType type = (TransportType) queuedOnTransportConnect.get(broker); - - assertNull(type); - assertNull(broker.routerServiceMessenger); + @Override + protected void tearDown() throws Exception { + super.tearDown(); } + + public void testOnServiceUnregisteredFromRouterService()throws Exception{ if (Looper.myLooper() == null) { Looper.prepare(); @@ -132,10 +125,9 @@ public class TransportBrokerTest extends AndroidTestCase { message.arg1 = TransportConstants.REGISTRATION_RESPONSE_SUCESS; Bundle bundle = new Bundle(); bundle.putBoolean(TransportConstants.ENABLE_LEGACY_MODE_EXTRA, true); - bundle.putBoolean(TransportConstants.HARDWARE_CONNECTED, true); bundle.putInt(TransportConstants.ROUTER_SERVICE_VERSION, 1); message.setData(bundle); - TransportBrokerThread brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); + brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); assertNull(brokerThread.broker); try { @@ -154,7 +146,7 @@ public class TransportBrokerTest extends AndroidTestCase { final Message message = new Message(); message.what = TransportConstants.ROUTER_REGISTER_CLIENT_RESPONSE; message.arg1 = TransportConstants.REGISTRATION_RESPONSE_DENIED_LEGACY_MODE_ENABLED; - TransportBrokerThread brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); + brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); assertNull(brokerThread.broker); try { @@ -172,7 +164,7 @@ public class TransportBrokerTest extends AndroidTestCase { final Message message = new Message(); message.what = TransportConstants.ROUTER_REGISTER_CLIENT_RESPONSE; message.arg1 = TransportConstants.REGISTRATION_RESPONSE_DENIED_UNKNOWN; - TransportBrokerThread brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); + brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); assertNull(brokerThread.broker); try { @@ -192,7 +184,7 @@ public class TransportBrokerTest extends AndroidTestCase { final Message message = new Message(); message.what = TransportConstants.ROUTER_UNREGISTER_CLIENT_RESPONSE; message.arg1 = TransportConstants.UNREGISTRATION_RESPONSE_SUCESS; - TransportBrokerThread brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); + brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); assertNull(brokerThread.broker); try { @@ -208,7 +200,7 @@ public class TransportBrokerTest extends AndroidTestCase { final Message message = new Message(); message.what = TransportConstants.ROUTER_UNREGISTER_CLIENT_RESPONSE; message.arg1 = TransportConstants.UNREGISTRATION_RESPONSE_FAILED_APP_ID_NOT_FOUND; - TransportBrokerThread brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); + brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); assertNull(brokerThread.broker); try { @@ -227,11 +219,10 @@ public class TransportBrokerTest extends AndroidTestCase { Bundle bundle = new Bundle(); SdlPacket packet = new SdlPacket(1,false,1,1,0,0,0,0,null,0,0); bundle.putParcelable(TransportConstants.BYTES_TO_SEND_EXTRA_NAME, packet); - bundle.putBoolean(TransportConstants.HARDWARE_CONNECTED, true); bundle.putInt(TransportConstants.BYTES_TO_SEND_FLAGS, TransportConstants.BYTES_TO_SEND_FLAG_SDL_PACKET_INCLUDED); message.setData(bundle); - TransportBrokerThread brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); + brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); assertNull(brokerThread.broker); try { @@ -263,7 +254,7 @@ public class TransportBrokerTest extends AndroidTestCase { bundle.putBoolean(TransportConstants.HARDWARE_CONNECTED, true); message.setData(bundle); - TransportBrokerThread brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); + brokerThread = new TransportBrokerThread(context, SdlUnitTestContants.TEST_APP_ID, rsvp.getService()); assertNull(brokerThread.broker); try { @@ -359,18 +350,25 @@ public class TransportBrokerTest extends AndroidTestCase { assertTrue(broker.sendMessageToRouterService(message)); } -// public void testSendMessageToRouterServiceException() throws Exception{ -// if (Looper.myLooper() == null) { -// Looper.prepare(); -// } -// TransportBroker broker = spy(new TransportBroker(mContext, SdlUnitTestContants.TEST_APP_ID,rsvp.getService())); -// Messenger mockMessenger = mock(Messenger.class); -// doThrow(RemoteException.class).when(mockMessenger).send(any(Message.class)); -// broker.routerServiceMessenger = mockMessenger; -// broker.sendMessageToRouterService(null,0); -// -// verify(broker, times(5)).sendMessageToRouterService(any(Message.class)); -// } + public void testStart() throws Exception{ + if (Looper.myLooper() == null) { + Looper.prepare(); + } + TransportBroker broker = new TransportBroker(mContext, SdlUnitTestContants.TEST_APP_ID,rsvp.getService()); + if(!DeviceUtil.isEmulator()){ // Cannot perform MBT operations in emulator + assertTrue(broker.start()); + } + broker.stop(); + broker.resetSession(); + + Field queuedOnTransportConnect = TransportBroker.class.getDeclaredField("queuedOnTransportConnect"); + queuedOnTransportConnect.setAccessible(true); + TransportType type = (TransportType) queuedOnTransportConnect.get(broker); + + assertNull(type); + assertNull(broker.routerServiceMessenger); + } + public void testRequestNewSession(){ if (Looper.myLooper() == null) { @@ -394,6 +392,7 @@ public class TransportBrokerTest extends AndroidTestCase { ArgumentCaptor<Message> argument = ArgumentCaptor.forClass(Message.class); verify(broker).sendMessageToRouterService(argument.capture()); assertEquals(TransportConstants.ROUTER_REMOVE_SESSION, argument.getValue().what); + } @@ -441,6 +440,24 @@ public class TransportBrokerTest extends AndroidTestCase { } + @SuppressLint("NewApi") + public synchronized void cancel(){ + if(broker!=null){ + broker.stop(); + broker = null; + } + if(threadLooper !=null){ + if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN_MR2){ + threadLooper.quitSafely(); + }else{ + threadLooper.quit(); + } + threadLooper = null; + } + + } + + public ByteArrayMessageAssembler getBufferedPayloadAssembler() throws Exception{ Field bufferedPayloadAssembler = TransportBroker.class.getDeclaredField("bufferedPayloadAssembler"); bufferedPayloadAssembler.setAccessible(true); diff --git a/sdl_android/src/test/java/com/smartdevicelink/transport/TransportBrokerTests.java b/sdl_android/src/test/java/com/smartdevicelink/transport/TransportBrokerTests.java index 745289fd5..dfe8943b1 100644 --- a/sdl_android/src/test/java/com/smartdevicelink/transport/TransportBrokerTests.java +++ b/sdl_android/src/test/java/com/smartdevicelink/transport/TransportBrokerTests.java @@ -1,16 +1,18 @@ package com.smartdevicelink.transport; import android.content.Context; -import android.os.Looper; import android.os.Message; import android.os.Messenger; -import android.os.RemoteException; +import android.os.TransactionTooLargeException; import junit.framework.TestCase; import org.mockito.Mock; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -24,15 +26,10 @@ import static org.mockito.Mockito.verify; public class TransportBrokerTests extends TestCase{ RouterServiceValidator rsvp; - @Mock Context mMockContext; - Context context; - protected void setUp() throws Exception { -// context = InstrumentationRegistry.getTargetContext(); - rsvp = mock(RouterServiceValidator.class); rsvp.validate(); } @@ -40,20 +37,44 @@ public class TransportBrokerTests extends TestCase{ public static final String TEST_APP_ID = "123456"; + + + public void testSendMessageToRouterServiceException() throws Exception{ + TransportBroker broker = spy(new TransportBroker(mMockContext, TEST_APP_ID ,rsvp.getService())); +// Messenger mockMessenger = mock(Messenger.class, new Answer<Object>() { +// @Override +// public Object answer(InvocationOnMock invocation) throws Throwable { +//// int count = 0; +//// String methodName = invocation.getMethod().getName(); +//// if (count<1 && methodName=="send") { +//// count++; +// throw new TransactionTooLargeException(); +//// } else { +//// throw new NullPointerException(); +//// } // -// -// public void testSendMessageToRouterServiceException() throws Exception{ -// if (Looper.myLooper() == null) { -// Looper.prepare(); -// } -// TransportBroker broker = spy(new TransportBroker(mMockContext, TEST_APP_ID ,rsvp.getService())); -// Messenger mockMessenger = mock(Messenger.class); -// doThrow(RemoteException.class).when(mockMessenger).send(any(Message.class)); -// broker.routerServiceMessenger = mockMessenger; -// broker.sendMessageToRouterService(null,0); -// -// verify(broker, times(5)).sendMessageToRouterService(any(Message.class)); -// } +// } +// }); + + Messenger mockMessenger = mock(Messenger.class); + doThrow(TransactionTooLargeException.class).when(mockMessenger).send(any(Message.class)); + broker.routerServiceMessenger = mockMessenger; + Message message = new Message(); + message.what = TransportConstants.ROUTER_REGISTER_CLIENT; + broker.registeredWithRouterService = true; + broker.isBound = true; + + boolean result = true; + try { + result = broker.sendMessageToRouterService(message); + } catch(Exception e){ + + } + + assertFalse(result); + verify(mockMessenger).send(any(Message.class)); + verify(broker, times(3)).sendMessageToRouterService(any(Message.class), anyInt()); + } } |