@Override public RecordFuture addLogRecord(Log record) { checkClientState(State.STARTED, "Kaa client is not started"); return logCollector.addLogRecord(record); }
@Override public void setLogDeliveryListener(LogDeliveryListener listener) { logCollector.setLogDeliveryListener(listener); }
@Override public void setLogStorage(LogStorage storage) { this.logCollector.setStorage(storage); }
logCollector.setStrategy(strategy); logCollector.addLogRecord(new Log()); logCollector.fillSyncRequest(request); logCollector.onLogResponse(response);
@Test public void testTimeout() throws Exception { int timeout = 2; // in seconds KaaChannelManager channelManager = Mockito.mock(KaaChannelManager.class); FailoverManager failoverManager = Mockito.mock(FailoverManager.class); LogTransport transport = Mockito.mock(LogTransport.class); LogDeliveryListener deliveryListener = Mockito.mock(LogDeliveryListener.class); AbstractLogCollector logCollector = new DefaultLogCollector(transport, executorContext, channelManager, failoverManager); DefaultLogUploadStrategy tmp = new DefaultLogUploadStrategy(); tmp.setTimeout(timeout); LogUploadStrategy strategy = Mockito.spy(tmp); logCollector.setLogDeliveryListener(deliveryListener); logCollector.setStrategy(strategy); Log record = new Log(); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); Mockito.verify(strategy, Mockito.times(0)).onTimeout(Mockito.any(LogFailoverCommand.class)); LogSyncRequest request1 = Mockito.mock(LogSyncRequest.class); logCollector.fillSyncRequest(request1); Thread.sleep(timeout / 2 * 1000); Mockito.verify(strategy, Mockito.times(0)).onTimeout(Mockito.any(LogFailoverCommand.class)); Thread.sleep(timeout / 2 * 1000); logCollector.addLogRecord(record); verify(deliveryListener, Mockito.timeout(1000)).onLogDeliveryTimeout(Mockito.any(BucketInfo.class)); Mockito.verify(strategy, Mockito.timeout(1000).times(1)).onTimeout(Mockito.any(LogFailoverCommand.class)); }
@Test public void testDefaultUploadConfiguration() { KaaChannelManager channelManager = Mockito.mock(KaaChannelManager.class); FailoverManager failoverManager = Mockito.mock(FailoverManager.class); LogTransport transport = Mockito.mock(LogTransport.class); AbstractLogCollector logCollector = new DefaultLogCollector(transport, executorContext, channelManager, failoverManager); DefaultLogUploadStrategy strategy = new DefaultLogUploadStrategy(); strategy.setCountThreshold(5); logCollector.setStrategy(strategy); Log record = new Log(); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); verify(transport, times(0)).sync(); logCollector.addLogRecord(record); verify(transport, Mockito.timeout(1000).times(1)).sync(); }
AbstractLogCollector logCollector = new DefaultLogCollector(transport, executorContext, channelManager, failoverManager); LogStorage storage = Mockito.mock(LogStorage.class); logCollector.setStorage(storage); Log record = new Log(); logCollector.addLogRecord(record); logCollector.addLogRecord(record);
@Override public void run() { try { logCollector.stop(); kaaClientState.persist(); channelManager.shutdown(); if (stateListener != null) { stateListener.onStopped(); } } catch (Exception ex) { LOG.error("Stop failed", ex); if (stateListener != null) { stateListener.onStopFailure(new KaaException(ex)); } } } });
@Override public void setLogUploadStrategy(LogUploadStrategy strategy) { this.logCollector.setStrategy(strategy); }
private void processUploadDecision(LogUploadStrategyDecision decision) { switch (decision) { case UPLOAD: if (isUploadAllowed()) { LOG.debug("Going to upload logs"); transport.sync(); } break; case NOOP: if (strategy.getUploadCheckPeriod() > 0 && storage.getStatus().getRecordCount() > 0) { scheduleUploadCheck(); } break; default: break; } }
protected void uploadIfNeeded() { processUploadDecision(strategy.isUploadNeeded(storage.getStatus())); }
@Override public void run() { notifyDeliveryFuturesOnSuccess(bucketInfo, arriveTime); } });
@Override public void fillSyncRequest(LogSyncRequest request) { if (!isUploadAllowed()) { return;
private void testMaxParallelUploadHelper(int maxParallelUpload) throws Exception { KaaChannelManager channelManager = Mockito.mock(KaaChannelManager.class); FailoverManager failoverManager = Mockito.mock(FailoverManager.class); LogTransport transport = Mockito.mock(LogTransport.class); AbstractLogCollector logCollector = new DefaultLogCollector(transport, executorContext, channelManager, failoverManager); DefaultLogUploadStrategy strategy = Mockito.spy(new DefaultLogUploadStrategy()); strategy.setMaxParallelUploads(maxParallelUpload); logCollector.setStrategy(strategy); LogSyncRequest request = Mockito.spy(new LogSyncRequest()); List<LogDeliveryStatus> statuses = new ArrayList<>(); for (int i = 0; i < maxParallelUpload; i++) { logCollector.addLogRecord(new Log()); logCollector.fillSyncRequest(request); statuses.add(new LogDeliveryStatus(request.getRequestId(), SyncResponseResultType.SUCCESS, null)); } logCollector.addLogRecord(new Log()); logCollector.fillSyncRequest(request); Mockito.verify(request, Mockito.times(maxParallelUpload)).setRequestId(Mockito.any(Integer.class)); if (statuses.isEmpty() && maxParallelUpload == 0) { return; } LogSyncResponse response = new LogSyncResponse(statuses); logCollector.onLogResponse(response); Mockito.reset(request); logCollector.fillSyncRequest(request); Mockito.verify(request, Mockito.times(1)).setRequestId(Mockito.any(Integer.class)); }
@Test public void failureOnStopTest() { client.start(); AbstractLogCollector logCollector = Mockito.mock(AbstractLogCollector.class); Mockito.doThrow(new RuntimeException()).when(logCollector).stop(); ReflectionTestUtils.setField(client, "logCollector", logCollector); client.stop(); Mockito.verify(stateListener, Mockito.timeout(1000)).onStopFailure(Mockito.any(KaaException.class)); }
processUploadDecision(strategy.isUploadNeeded(storage.getStatus()));
logCollector.setStrategy(strategy); LogStorage storage = Mockito.mock(LogStorage.class); logCollector.setStorage(storage); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); Mockito.when(storage.getStatus()).thenReturn(new LogStorageStatus() { logCollector.addLogRecord(record); logCollector.fillSyncRequest(request1); LogDeliveryStatus status = new LogDeliveryStatus(request1.getRequestId(), SyncResponseResultType.SUCCESS, null); uploadResponse.setDeliveryStatuses(Collections.singletonList(status)); logCollector.setLogDeliveryListener(deliveryListener); logCollector.onLogResponse(uploadResponse);
logCollector.setStorage(storage); logCollector.setStrategy(strategy); deliveryFutures.add(logCollector.addLogRecord(new Log())); logCollector.fillSyncRequest(request); logCollector.onLogResponse(response);
DefaultLogUploadStrategy strategy = Mockito.spy(new DefaultLogUploadStrategy()); strategy.setRetryPeriod(0); logCollector.setStrategy(strategy); LogStorage storage = Mockito.mock(LogStorage.class); logCollector.setStorage(storage); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); logCollector.addLogRecord(record); Mockito.when(storage.addLogRecord(Mockito.any(LogRecord.class))).thenReturn(new BucketInfo(1, 1)); Mockito.when(storage.getStatus()).thenReturn(new LogStorageStatus() { logCollector.addLogRecord(record); logCollector.fillSyncRequest(request1); LogDeliveryErrorCode.NO_APPENDERS_CONFIGURED); uploadResponse.setDeliveryStatuses(Collections.singletonList(status)); logCollector.setLogDeliveryListener(deliveryListener); logCollector.onLogResponse(uploadResponse);