package org.societies.android.platform.events.test; import org.societies.android.api.css.manager.IServiceManager; import org.societies.android.api.events.IAndroidSocietiesEvents; import org.societies.android.platform.eventscontainer.ServicePlatformEventsTest; import org.societies.android.platform.eventscontainer.ServicePlatformEventsTest.TestPlatformEventsBinder; import org.societies.api.schema.cssmanagement.CssEvent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.test.ServiceTestCase; import android.test.suitebuilder.annotation.MediumTest; import android.util.Log; public class TestEventsLocal extends ServiceTestCase <ServicePlatformEventsTest> { //Logging tag private static final String LOG_TAG = TestEventsLocal.class.getName(); private static final String CLIENT_PARAM_1 = "org.societies.android.platform.events.test"; private static final String CLIENT_PARAM_2 = "org.societies.android.platform.events.test.alternate"; private static final String CLIENT_PARAM_3 = "org.societies.android.platform.events.test.other"; private static final String INTENT_FILTER = "org.societies.android.css.manager"; private static final int SLEEP_DELAY = 10000; private static final int ALL_EVENTS_COUNT = 15; private boolean testCompleted; private IAndroidSocietiesEvents eventService; public TestEventsLocal() { super(ServicePlatformEventsTest.class); } @Override protected void setUp() throws Exception { super.setUp(); } /** * The name 'test preconditions' is a convention to signal that if this * test doesn't pass, the test case was not set up properly and it might * explain any and all failures in other tests. This is not guaranteed * to run before other tests, as JUnit uses reflection to find the tests. */ @MediumTest public void testPreconditions() { } @MediumTest public void testSubscribeToAllEvents() throws Exception { this.testCompleted = false; BroadcastReceiver receiver = setupAllEventReceiver(); Intent eventsIntent = new Intent(getContext(), ServicePlatformEventsTest.class); TestPlatformEventsBinder binder = (TestPlatformEventsBinder) bindService(eventsIntent); assertNotNull(binder); this.eventService = (IAndroidSocietiesEvents) binder.getService(); this.eventService.startService(); Thread.sleep(SLEEP_DELAY); this.unregisterReceiver(receiver); assertTrue(this.testCompleted); } @MediumTest public void testSubscribeToOneEvent() throws Exception { this.testCompleted = false; BroadcastReceiver receiver = setupSingleEventReceiver(); Intent eventsIntent = new Intent(getContext(), ServicePlatformEventsTest.class); TestPlatformEventsBinder binder = (TestPlatformEventsBinder) bindService(eventsIntent); assertNotNull(binder); this.eventService = (IAndroidSocietiesEvents) binder.getService(); this.eventService.startService(); Thread.sleep(SLEEP_DELAY); this.unregisterReceiver(receiver); assertTrue(this.testCompleted); } @MediumTest public void testSubscribeToEvents() throws Exception { this.testCompleted = false; BroadcastReceiver receiver = setupMultipleEventReceiver(); Intent eventsIntent = new Intent(getContext(), ServicePlatformEventsTest.class); TestPlatformEventsBinder binder = (TestPlatformEventsBinder) bindService(eventsIntent); assertNotNull(binder); this.eventService = (IAndroidSocietiesEvents) binder.getService(); this.eventService.startService(); Thread.sleep(SLEEP_DELAY); this.unregisterReceiver(receiver); assertTrue(this.testCompleted); } @MediumTest public void testThreeClients() throws Exception { this.testCompleted = false; BroadcastReceiver receiver = setupAlternateBroadcastReceiver(); Intent eventsIntent = new Intent(getContext(), ServicePlatformEventsTest.class); TestPlatformEventsBinder binder = (TestPlatformEventsBinder) bindService(eventsIntent); assertNotNull(binder); this.eventService = (IAndroidSocietiesEvents) binder.getService(); this.eventService.startService(); Thread.sleep(SLEEP_DELAY); this.unregisterReceiver(receiver); assertTrue(this.testCompleted); } /** * Broadcast receiver to receive intent return values from service method calls */ private class SingleEventReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(LOG_TAG, "Received action: " + intent.getAction()); if (intent.getAction().equals(IAndroidSocietiesEvents.SUBSCRIBE_TO_EVENT)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.getNumSubscribedNodes(CLIENT_PARAM_1); } else if (intent.getAction().equals(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_EVENT)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.stopService(); } else if (intent.getAction().equals(IAndroidSocietiesEvents.NUM_EVENT_LISTENERS)) { assertEquals(1, intent.getIntExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, 0)); TestEventsLocal.this.eventService.publishEvent(CLIENT_PARAM_1, IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT, getCssEvent()); } else if (intent.getAction().equals(IAndroidSocietiesEvents.PUBLISH_EVENT)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.unSubscribeFromEvent(CLIENT_PARAM_1, IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STARTED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.subscribeToEvent(CLIENT_PARAM_1, IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STOPPED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.testCompleted = true; } } } /** * Broadcast receiver to receive intent return values from service method calls */ private class MultipleEventReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(LOG_TAG, "Received action: " + intent.getAction()); if (intent.getAction().equals(IAndroidSocietiesEvents.SUBSCRIBE_TO_EVENTS)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.getNumSubscribedNodes(CLIENT_PARAM_1); } else if (intent.getAction().equals(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_EVENTS)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.stopService(); } else if (intent.getAction().equals(IAndroidSocietiesEvents.NUM_EVENT_LISTENERS)) { assertEquals(2, intent.getIntExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, 0)); TestEventsLocal.this.eventService.unSubscribeFromEvents(CLIENT_PARAM_1, INTENT_FILTER); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STARTED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.subscribeToEvents(CLIENT_PARAM_1, INTENT_FILTER); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STOPPED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.testCompleted = true; } } } /** * Broadcast receiver to receive intent return values from service method calls */ private class AllEventReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(LOG_TAG, "Received action: " + intent.getAction()); if (intent.getAction().equals(IAndroidSocietiesEvents.SUBSCRIBE_TO_ALL_EVENTS)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.getNumSubscribedNodes(CLIENT_PARAM_1); } else if (intent.getAction().equals(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_ALL_EVENTS)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.stopService(); } else if (intent.getAction().equals(IAndroidSocietiesEvents.NUM_EVENT_LISTENERS)) { assertEquals(ALL_EVENTS_COUNT, intent.getIntExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, 0)); TestEventsLocal.this.eventService.unSubscribeFromAllEvents(CLIENT_PARAM_1); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STARTED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.subscribeToAllEvents(CLIENT_PARAM_1); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STARTED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.subscribeToAllEvents(CLIENT_PARAM_1); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STOPPED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.testCompleted = true; } } } /** * Broadcast receiver to receive intent return values from service method calls */ private class AlternativeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d(LOG_TAG, "Received action: " + intent.getAction()); if (intent.getAction().equals(IAndroidSocietiesEvents.SUBSCRIBE_TO_ALL_EVENTS)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.subscribeToEvents(CLIENT_PARAM_2, INTENT_FILTER); } else if (intent.getAction().equals(IAndroidSocietiesEvents.SUBSCRIBE_TO_EVENT)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.unSubscribeFromAllEvents(CLIENT_PARAM_1); } else if (intent.getAction().equals(IAndroidSocietiesEvents.SUBSCRIBE_TO_EVENTS)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.subscribeToEvent(CLIENT_PARAM_3, IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT); } else if (intent.getAction().equals(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_ALL_EVENTS)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.unSubscribeFromEvents(CLIENT_PARAM_2, INTENT_FILTER); } else if (intent.getAction().equals(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_EVENT)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.stopService(); } else if (intent.getAction().equals(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_EVENTS)) { assertTrue(intent.getBooleanExtra(IAndroidSocietiesEvents.INTENT_RETURN_VALUE_KEY, false)); eventService.unSubscribeFromEvent(CLIENT_PARAM_3, IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STARTED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.eventService.subscribeToAllEvents(CLIENT_PARAM_1); } else if (intent.getAction().equals(IServiceManager.INTENT_SERVICE_STOPPED_STATUS)) { assertTrue(intent.getBooleanExtra(IServiceManager.INTENT_RETURN_VALUE_KEY, false)); TestEventsLocal.this.testCompleted = true; } } } /** * Create a broadcast receiver * * @return the created broadcast receiver */ private BroadcastReceiver setupSingleEventReceiver() { Log.d(LOG_TAG, "Set up broadcast receiver"); BroadcastReceiver receiver = new SingleEventReceiver(); getContext().registerReceiver(receiver, createTestIntentFilter()); Log.d(LOG_TAG, "Register single broadcast receiver"); return receiver; } /** * Create a broadcast receiver * * @return the created broadcast receiver */ private BroadcastReceiver setupMultipleEventReceiver() { Log.d(LOG_TAG, "Set up broadcast receiver"); BroadcastReceiver receiver = new MultipleEventReceiver(); getContext().registerReceiver(receiver, createTestIntentFilter()); Log.d(LOG_TAG, "Register multiple broadcast receiver"); return receiver; } /** * Create a broadcast receiver * * @return the created broadcast receiver */ private BroadcastReceiver setupAllEventReceiver() { Log.d(LOG_TAG, "Set up broadcast receiver"); BroadcastReceiver receiver = new AllEventReceiver(); getContext().registerReceiver(receiver, createTestIntentFilter()); Log.d(LOG_TAG, "Register all broadcast receiver"); return receiver; } /** * Create an alternate broadcast receiver * * @return the created broadcast receiver */ private BroadcastReceiver setupAlternateBroadcastReceiver() { Log.d(LOG_TAG, "Set up broadcast receiver"); BroadcastReceiver receiver = new AlternativeReceiver(); getContext().registerReceiver(receiver, createTestIntentFilter()); Log.d(LOG_TAG, "Register alternative broadcast receiver"); return receiver; } /** * Unregister a broadcast receiver * @param receiver */ private void unregisterReceiver(BroadcastReceiver receiver) { Log.d(LOG_TAG, "Unregister broadcast receiver"); getContext().unregisterReceiver(receiver); } /** * Create a suitable intent filter * @return IntentFilter */ private IntentFilter createTestIntentFilter() { //register broadcast receiver to receive SocietiesEvents return values IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(IAndroidSocietiesEvents.SUBSCRIBE_TO_ALL_EVENTS); intentFilter.addAction(IAndroidSocietiesEvents.SUBSCRIBE_TO_EVENT); intentFilter.addAction(IAndroidSocietiesEvents.SUBSCRIBE_TO_EVENTS); intentFilter.addAction(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_ALL_EVENTS); intentFilter.addAction(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_EVENT); intentFilter.addAction(IAndroidSocietiesEvents.UNSUBSCRIBE_FROM_EVENTS); intentFilter.addAction(IAndroidSocietiesEvents.PUBLISH_EVENT); intentFilter.addAction(IAndroidSocietiesEvents.NUM_EVENT_LISTENERS); intentFilter.addAction(IServiceManager.INTENT_SERVICE_STOPPED_STATUS); intentFilter.addAction(IServiceManager.INTENT_SERVICE_STARTED_STATUS); return intentFilter; } private static CssEvent getCssEvent() { CssEvent event = new CssEvent(); event.setDescription("test Css Event"); event.setType("test"); return event; } }