@Override public void read(JSONObject object) throws JSONException { super.read(object); setServices(JSONUtils.readStringArray(object, SERVICES)); }
/** * Queue start service log. */ @WorkerThread private void sendStartServiceLog() { if (!mStartedServicesNamesToLog.isEmpty() && isInstanceEnabled()) { List<String> allServiceNamesToStart = new ArrayList<>(mStartedServicesNamesToLog); mStartedServicesNamesToLog.clear(); StartServiceLog startServiceLog = new StartServiceLog(); startServiceLog.setServices(allServiceNamesToStart); mChannel.enqueue(startServiceLog, CORE_GROUP, Flags.DEFAULTS); } }
@Test public void configureAndStartTwiceTest() { AppCenter.start(mApplication, DUMMY_APP_SECRET, DummyService.class); AppCenter.start(mApplication, DUMMY_APP_SECRET + "a", AnotherDummyService.class); //ignored /* Verify that single service has been loaded and configured */ assertEquals(1, AppCenter.getInstance().getServices().size()); DummyService service = DummyService.getInstance(); assertTrue(AppCenter.getInstance().getServices().contains(service)); verify(service).getLogFactories(); verify(service).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(service, never()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET + "a"), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(service); verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(service.getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
@Test public void startAppSecretThenStartWithTargetTokenTest() { AppCenter.start(mApplication, DUMMY_APP_SECRET, DummyService.class); AppCenter.start(mApplication, DUMMY_TARGET_TOKEN_STRING, AnotherDummyService.class); /* Verify that single service has been loaded and configured */ assertEquals(1, AppCenter.getInstance().getServices().size()); DummyService service = DummyService.getInstance(); assertTrue(AppCenter.getInstance().getServices().contains(service)); verify(service).getLogFactories(); verify(service, never()).onStarted(any(Context.class), any(Channel.class), isNull(String.class), eq(DUMMY_TRANSMISSION_TARGET_TOKEN), eq(true)); verify(service).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(service); verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(service.getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
@Test public void startTargetTokenThenStartWithAppSecretTest() { AppCenter.start(mApplication, DUMMY_TARGET_TOKEN_STRING, DummyService.class); AppCenter.start(mApplication, DUMMY_APP_SECRET, AnotherDummyService.class); /* Verify that single service has been loaded and configured */ assertEquals(1, AppCenter.getInstance().getServices().size()); DummyService service = DummyService.getInstance(); assertTrue(AppCenter.getInstance().getServices().contains(service)); verify(service).getLogFactories(); verify(service).onStarted(any(Context.class), any(Channel.class), isNull(String.class), eq(DUMMY_TRANSMISSION_TARGET_TOKEN), eq(true)); verify(service, never()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(service); verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(service.getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
@Test public void useDummyServiceTest() { AppCenter.start(mApplication, DUMMY_APP_SECRET, DummyService.class); /* Verify that single service has been loaded and configured */ assertEquals(1, AppCenter.getInstance().getServices().size()); DummyService service = DummyService.getInstance(); assertTrue(AppCenter.getInstance().getServices().contains(service)); verify(service).getLogFactories(); verify(service).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(service); verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); verify(mChannel).setMaxStorageSize(AppCenter.DEFAULT_MAX_STORAGE_SIZE_IN_BYTES); List<String> services = new ArrayList<>(); services.add(service.getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
@Test public void configureTwiceTest() { AppCenter.configure(mApplication, DUMMY_APP_SECRET); AppCenter.configure(mApplication, DUMMY_APP_SECRET + "a"); //ignored AppCenter.start(DummyService.class); /* Verify that single service has been loaded and configured */ assertEquals(1, AppCenter.getInstance().getServices().size()); DummyService service = DummyService.getInstance(); assertTrue(AppCenter.getInstance().getServices().contains(service)); verify(service).getLogFactories(); verify(service).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(service, never()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET + "a"), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(service); verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(service.getServiceName()); verify(mStartServiceLog).setServices(eq(services)); /* We don't support updating app secret that way. */ verify(service, never()).onConfigurationUpdated(anyString(), anyString()); }
@Test public void useDummyServiceTestSplitCall() { assertFalse(AppCenter.isConfigured()); AppCenter.configure(mApplication, DUMMY_APP_SECRET); assertTrue(AppCenter.isConfigured()); AppCenter.start(DummyService.class); /* Verify that single service has been loaded and configured */ assertEquals(1, AppCenter.getInstance().getServices().size()); DummyService service = DummyService.getInstance(); assertTrue(AppCenter.getInstance().getServices().contains(service)); verify(service).getLogFactories(); verify(service).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(service); verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(service.getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
@Test public void startServiceTwice() { /* Start once. */ AppCenter.configure(mApplication, DUMMY_APP_SECRET); AppCenter.start(DummyService.class); /* Check. */ assertEquals(1, AppCenter.getInstance().getServices().size()); DummyService service = DummyService.getInstance(); assertTrue(AppCenter.getInstance().getServices().contains(service)); verify(service).getLogFactories(); verify(service).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(service); /* Start twice, this call is ignored. */ AppCenter.start(DummyService.class); /* Verify that single service has been loaded and configured (only once interaction). */ assertEquals(1, AppCenter.getInstance().getServices().size()); verify(service).getLogFactories(); verify(service).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(service); verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(DummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
@Test public void startTwoServicesWithSomeInvalidReferencesSplit() { AppCenter.configure(mApplication, DUMMY_APP_SECRET); AppCenter.start((Class<AppCenterService>) null, DummyService.class, null); AppCenter.start(InvalidService.class, AnotherDummyService.class, null); /* Verify that the right amount of services have been loaded and configured */ assertEquals(2, AppCenter.getInstance().getServices().size()); { assertTrue(AppCenter.getInstance().getServices().contains(DummyService.getInstance())); verify(DummyService.getInstance()).getLogFactories(); verify(DummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(DummyService.getInstance()); } { assertTrue(AppCenter.getInstance().getServices().contains(AnotherDummyService.getInstance())); verify(AnotherDummyService.getInstance()).getLogFactories(); verify(AnotherDummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(AnotherDummyService.getInstance()); } verify(mChannel, times(2)).enqueue(any(StartServiceLog.class), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services1 = new ArrayList<>(); services1.add(DummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services1)); List<String> services2 = new ArrayList<>(); services2.add(DummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services2)); }
@Test public void startTwoServicesSplitEvenMore() { AppCenter.configure(mApplication, DUMMY_APP_SECRET); AppCenter.start(DummyService.class); AppCenter.start(AnotherDummyService.class); /* Verify that the right amount of services have been loaded and configured */ assertEquals(2, AppCenter.getInstance().getServices().size()); { assertTrue(AppCenter.getInstance().getServices().contains(DummyService.getInstance())); verify(DummyService.getInstance()).getLogFactories(); verify(DummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(DummyService.getInstance()); } { assertTrue(AppCenter.getInstance().getServices().contains(AnotherDummyService.getInstance())); verify(AnotherDummyService.getInstance()).getLogFactories(); verify(AnotherDummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(AnotherDummyService.getInstance()); } verify(mChannel, times(2)).enqueue(any(StartServiceLog.class), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services1 = new ArrayList<>(); services1.add(DummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services1)); List<String> services2 = new ArrayList<>(); services2.add(DummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services2)); }
@Test public void startTwoServicesTest() { AppCenter.start(mApplication, DUMMY_APP_SECRET, DummyService.class, AnotherDummyService.class); /* Verify that the right amount of services have been loaded and configured. */ assertEquals(2, AppCenter.getInstance().getServices().size()); /* Verify first service started. */ assertTrue(AppCenter.getInstance().getServices().contains(DummyService.getInstance())); verify(DummyService.getInstance()).getLogFactories(); verify(DummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(DummyService.getInstance()); /* Verify second service started. */ assertTrue(AppCenter.getInstance().getServices().contains(AnotherDummyService.getInstance())); verify(AnotherDummyService.getInstance()).getLogFactories(); verify(AnotherDummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(AnotherDummyService.getInstance()); /* Verify start service log is sent. */ verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(DummyService.getInstance().getServiceName()); services.add(AnotherDummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
@Test public void startTwoServicesWithSomeInvalidReferences() { AppCenter.start(mApplication, DUMMY_APP_SECRET, null, DummyService.class, null, InvalidService.class, AnotherDummyService.class, null); /* Verify that the right amount of services have been loaded and configured */ assertEquals(2, AppCenter.getInstance().getServices().size()); { assertTrue(AppCenter.getInstance().getServices().contains(DummyService.getInstance())); verify(DummyService.getInstance()).getLogFactories(); verify(DummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(DummyService.getInstance()); } { assertTrue(AppCenter.getInstance().getServices().contains(AnotherDummyService.getInstance())); verify(AnotherDummyService.getInstance()).getLogFactories(); verify(AnotherDummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(AnotherDummyService.getInstance()); } verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(DummyService.getInstance().getServiceName()); services.add(AnotherDummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
@Test public void startTwoServicesSplit() { AppCenter.configure(mApplication, DUMMY_APP_SECRET); AppCenter.start(DummyService.class, AnotherDummyService.class); /* Verify that the right amount of services have been loaded and configured */ assertEquals(2, AppCenter.getInstance().getServices().size()); { assertTrue(AppCenter.getInstance().getServices().contains(DummyService.getInstance())); verify(DummyService.getInstance()).getLogFactories(); verify(DummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(DummyService.getInstance()); } { assertTrue(AppCenter.getInstance().getServices().contains(AnotherDummyService.getInstance())); verify(AnotherDummyService.getInstance()).getLogFactories(); verify(AnotherDummyService.getInstance()).onStarted(any(Context.class), any(Channel.class), eq(DUMMY_APP_SECRET), isNull(String.class), eq(true)); verify(mApplication).registerActivityLifecycleCallbacks(AnotherDummyService.getInstance()); } verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(DummyService.getInstance().getServiceName()); services.add(AnotherDummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
List<String> services = new ArrayList<>(); services.add(DummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services)); services = new ArrayList<>(); services.add(DummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services));
@Test public void useDummyServiceWhenDisablePersisted() { when(SharedPreferencesManager.getBoolean(KEY_ENABLED, true)).thenReturn(false); AppCenter appCenter = AppCenter.getInstance(); DummyService service = DummyService.getInstance(); AnotherDummyService anotherService = AnotherDummyService.getInstance(); /* Start. */ AppCenter.start(mApplication, DUMMY_APP_SECRET, DummyService.class); assertFalse(AppCenter.isEnabled().get()); assertEquals(1, AppCenter.getInstance().getServices().size()); assertTrue(appCenter.getServices().contains(service)); verify(mChannel, never()).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), anyInt()); /* Start another service. */ AppCenter.start(AnotherDummyService.class); assertFalse(AppCenter.isEnabled().get()); assertEquals(2, AppCenter.getInstance().getServices().size()); assertTrue(appCenter.getServices().contains(anotherService)); verify(mChannel, never()).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), anyInt()); /* Enable. */ AppCenter.setEnabled(true); assertTrue(AppCenter.isEnabled().get()); verify(mChannel).enqueue(eq(mStartServiceLog), eq(CORE_GROUP), eq(DEFAULTS)); List<String> services = new ArrayList<>(); services.add(service.getServiceName()); services.add(anotherService.getServiceName()); verify(mStartServiceLog).setServices(eq(services)); }
List<String> services = new ArrayList<>(); services.add(DummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services));
services.add(DummyService.getInstance().getServiceName()); services.add(AnotherDummyService.getInstance().getServiceName()); verify(mStartServiceLog).setServices(eq(services));
@Test public void compare() { /* Empty objects. */ StartServiceLog a = new StartServiceLog(); StartServiceLog b = new StartServiceLog(); checkEquals(a, b); checkEquals(a.getType(), StartServiceLog.TYPE); UUID sid = UUIDUtils.randomUUID(); a.setSid(sid); checkNotEquals(a, b); b.setSid(sid); checkEquals(a, b); /* Services. */ List<String> services = new ArrayList<>(); services.add("FIRST"); services.add("SECOND"); a.setServices(services); checkEquals(a.getServices(), services); checkNotEquals(a, b); b.setServices(new ArrayList<String>()); checkNotEquals(a, b); b.setServices(services); checkEquals(a, b); } }
@Test public void startServiceLog() throws JSONException { StartServiceLog log = new StartServiceLog(); List<String> services = new ArrayList<>(); services.add("FIRST"); services.add("SECOND"); log.setServices(services); UUID sid = UUIDUtils.randomUUID(); log.setSid(sid); log.setTimestamp(new Date()); /* Verify serialize and deserialize. */ LogSerializer serializer = new DefaultLogSerializer(); serializer.addLogFactory(StartServiceLog.TYPE, new StartServiceLogFactory()); String payload = serializer.serializeLog(log); Log actualContainer = serializer.deserializeLog(payload, null); assertEquals(log, actualContainer); }