use of com.microsoft.appcenter.ingestion.models.Log in project mobile-center-sdk-android by Microsoft.
the class DefaultChannelTest method invalidGroup.
@Test
public void invalidGroup() throws Persistence.PersistenceException {
Persistence persistence = mock(Persistence.class);
Channel channel = new DefaultChannel(mock(Context.class), UUIDUtils.randomUUID().toString(), persistence, mock(Ingestion.class), mCoreHandler);
/* Enqueue a log before group is registered = failure. */
Log log = mock(Log.class);
channel.enqueue(log, TEST_GROUP);
verify(log, never()).setDevice(any(Device.class));
verify(log, never()).setTimestamp(any(Date.class));
verify(persistence, never()).putLog(TEST_GROUP, log);
/* Trying remove group that not registered. */
channel.removeGroup(TEST_GROUP);
verify(mHandler, never()).removeCallbacks(any(Runnable.class));
}
use of com.microsoft.appcenter.ingestion.models.Log in project mobile-center-sdk-android by Microsoft.
the class DefaultChannelTest method analyticsSuccess.
@Test
@SuppressWarnings("unchecked")
public void analyticsSuccess() throws Persistence.PersistenceException, InterruptedException {
Persistence mockPersistence = mock(Persistence.class);
IngestionHttp mockIngestion = mock(IngestionHttp.class);
Channel.GroupListener mockListener = mock(Channel.GroupListener.class);
when(mockPersistence.getLogs(any(String.class), anyInt(), any(ArrayList.class))).then(getGetLogsAnswer(50)).then(getGetLogsAnswer(1)).then(getGetLogsAnswer(2));
when(mockIngestion.sendAsync(anyString(), any(UUID.class), any(LogContainer.class), any(ServiceCallback.class))).then(getSendAsyncAnswer());
DefaultChannel channel = new DefaultChannel(mock(Context.class), UUIDUtils.randomUUID().toString(), mockPersistence, mockIngestion, mCoreHandler);
channel.addGroup(TEST_GROUP, 50, BATCH_TIME_INTERVAL, MAX_PARALLEL_BATCHES, mockListener);
/* Enqueuing 49 events. */
for (int i = 1; i <= 49; i++) {
channel.enqueue(mock(Log.class), TEST_GROUP);
assertEquals(i, channel.getCounter(TEST_GROUP));
}
verify(mHandler).postDelayed(any(Runnable.class), eq(BATCH_TIME_INTERVAL));
/* Enqueue another event. */
channel.enqueue(mock(Log.class), TEST_GROUP);
verify(mHandler).removeCallbacks(any(Runnable.class));
/* The counter should be 0 as we reset the counter after reaching the limit of 50. */
assertEquals(0, channel.getCounter(TEST_GROUP));
/* Verify that 5 items have been persisted. */
verify(mockPersistence, times(50)).putLog(eq(TEST_GROUP), any(Log.class));
/* Verify that we have called sendAsync on the ingestion. */
verify(mockIngestion).sendAsync(anyString(), any(UUID.class), any(LogContainer.class), any(ServiceCallback.class));
/* Verify that we have called deleteLogs on the Persistence. */
verify(mockPersistence).deleteLogs(any(String.class), any(String.class));
/* Verify that we have called onBeforeSending in the listener. */
verify(mockListener, times(50)).onBeforeSending(any(Log.class));
/* Verify that we have called onSuccess in the listener. */
verify(mockListener, times(50)).onSuccess(any(Log.class));
/* The counter should be 0 now as we sent data. */
assertEquals(0, channel.getCounter(TEST_GROUP));
/* Prepare to mock timer. */
AtomicReference<Runnable> runnable = catchPostRunnable();
/* Schedule only 1 log after that. */
channel.enqueue(mock(Log.class), TEST_GROUP);
assertEquals(1, channel.getCounter(TEST_GROUP));
verify(mockPersistence, times(51)).putLog(eq(TEST_GROUP), any(Log.class));
verify(mockIngestion).sendAsync(anyString(), any(UUID.class), any(LogContainer.class), any(ServiceCallback.class));
verify(mockPersistence).deleteLogs(any(String.class), any(String.class));
verify(mockListener, times(50)).onSuccess(any(Log.class));
/* Simulate the timer. */
assertNotNull(runnable.get());
runnable.get().run();
runnable.set(null);
assertEquals(0, channel.getCounter(TEST_GROUP));
verify(mockIngestion, times(2)).sendAsync(anyString(), any(UUID.class), any(LogContainer.class), any(ServiceCallback.class));
verify(mockPersistence, times(2)).deleteLogs(any(String.class), any(String.class));
verify(mockListener, times(51)).onSuccess(any(Log.class));
/* 2 more timed logs. */
channel.enqueue(mock(Log.class), TEST_GROUP);
channel.enqueue(mock(Log.class), TEST_GROUP);
assertEquals(2, channel.getCounter(TEST_GROUP));
verify(mockPersistence, times(53)).putLog(eq(TEST_GROUP), any(Log.class));
verify(mockIngestion, times(2)).sendAsync(anyString(), any(UUID.class), any(LogContainer.class), any(ServiceCallback.class));
verify(mockPersistence, times(2)).deleteLogs(any(String.class), any(String.class));
verify(mockListener, times(51)).onSuccess(any(Log.class));
/* Simulate the timer. */
assertNotNull(runnable.get());
runnable.get().run();
assertEquals(0, channel.getCounter(TEST_GROUP));
verify(mockIngestion, times(3)).sendAsync(anyString(), any(UUID.class), any(LogContainer.class), any(ServiceCallback.class));
verify(mockPersistence, times(3)).deleteLogs(any(String.class), any(String.class));
verify(mockListener, times(53)).onSuccess(any(Log.class));
/* Check total timers. */
verify(mHandler, times(3)).postDelayed(any(Runnable.class), eq(BATCH_TIME_INTERVAL));
verify(mHandler).removeCallbacks(any(Runnable.class));
/* Check channel clear clear */
channel.clear(TEST_GROUP);
verify(mockPersistence).deleteLogs(eq(TEST_GROUP));
}
use of com.microsoft.appcenter.ingestion.models.Log in project mobile-center-sdk-android by Microsoft.
the class IngestionHttpTest method failedSerialization.
@Test
public void failedSerialization() throws Exception {
/* Build some payload. */
LogContainer container = new LogContainer();
Log log = mock(Log.class);
List<Log> logs = new ArrayList<>();
logs.add(log);
container.setLogs(logs);
LogSerializer serializer = mock(LogSerializer.class);
JSONException exception = new JSONException("mock");
when(serializer.serializeContainer(any(LogContainer.class))).thenThrow(exception);
/* Configure mock HTTP. */
HttpClientNetworkStateHandler httpClient = mock(HttpClientNetworkStateHandler.class);
whenNew(HttpClientNetworkStateHandler.class).withAnyArguments().thenReturn(httpClient);
final ServiceCall call = mock(ServiceCall.class);
final AtomicReference<HttpClient.CallTemplate> callTemplate = new AtomicReference<>();
when(httpClient.callAsync(anyString(), anyString(), anyMapOf(String.class, String.class), any(HttpClient.CallTemplate.class), any(ServiceCallback.class))).then(new Answer<ServiceCall>() {
@Override
public ServiceCall answer(InvocationOnMock invocation) throws Throwable {
callTemplate.set((HttpClient.CallTemplate) invocation.getArguments()[3]);
return call;
}
});
/* Test calling code. */
IngestionHttp ingestionHttp = new IngestionHttp(mock(Context.class), serializer);
ingestionHttp.setLogUrl("http://mock");
String appSecret = UUIDUtils.randomUUID().toString();
UUID installId = UUIDUtils.randomUUID();
ServiceCallback serviceCallback = mock(ServiceCallback.class);
assertEquals(call, ingestionHttp.sendAsync(appSecret, installId, container, serviceCallback));
/* Verify call to http client. */
HashMap<String, String> expectedHeaders = new HashMap<>();
expectedHeaders.put(IngestionHttp.APP_SECRET, appSecret);
expectedHeaders.put(IngestionHttp.INSTALL_ID, installId.toString());
verify(httpClient).callAsync(eq("http://mock/logs?api-version=1.0.0"), eq(METHOD_POST), eq(expectedHeaders), notNull(HttpClient.CallTemplate.class), eq(serviceCallback));
assertNotNull(callTemplate.get());
try {
callTemplate.get().buildRequestBody();
Assert.fail("Expected json exception");
} catch (JSONException ignored) {
}
/* Verify close. */
ingestionHttp.close();
verify(httpClient).close();
}
use of com.microsoft.appcenter.ingestion.models.Log in project mobile-center-sdk-android by Microsoft.
the class DatabasePersistenceTest method databaseOperationException.
@Test
public void databaseOperationException() throws Persistence.PersistenceException, IOException, JSONException {
/* Mock instances. */
mockStatic(AppCenterLog.class);
LogSerializer mockSerializer = mock(DefaultLogSerializer.class);
when(mockSerializer.serializeLog(any(Log.class))).thenReturn("{}");
DatabasePersistence mockPersistence = spy(new DatabasePersistence("test-persistence", "operation.exception", 1));
doReturn(mockSerializer).when(mockPersistence).getLogSerializer();
try {
/* Generate a log and persist. */
Log log = mock(Log.class);
mockPersistence.putLog("test-p1", log);
} finally {
/* Close. */
// noinspection ThrowFromFinallyBlock
mockPersistence.close();
}
verifyStatic();
AppCenterLog.error(eq(AppCenter.LOG_TAG), anyString(), any(RuntimeException.class));
}
Aggregations