@Override public void onTransmissionSent(TransmissionHandlerArgs args) { validateTransmissionAndSend(args); }
private boolean generateTransmissionWithStatusCode(int code) { TransmissionPolicyManager tpm = new TransmissionPolicyManager(true); TransmissionDispatcher mockedDispatcher = Mockito.mock(TransmissionDispatcher.class); TransmissionHandlerArgs args = new TransmissionHandlerArgs(); args.setResponseCode(code); args.setTransmission(new Transmission(new byte[] { 0 }, "testcontent", "testencoding")); args.setTransmissionDispatcher(mockedDispatcher); ThrottlingHandler eh = new ThrottlingHandler(tpm); boolean result = eh.validateTransmissionAndSend(args); return result; }
@Override public TelemetriesTransmitter create(String endpoint, String maxTransmissionStorageCapacity, boolean throttlingIsEnabled, int maxInstanceRetries) { // An active object with the network sender TransmissionOutput actualNetworkSender = TestThreadLocalData.getTransmissionOutput(); final TransmissionPolicyManager transmissionPolicyManager = new TransmissionPolicyManager(throttlingIsEnabled); transmissionPolicyManager.addTransmissionHandler(new ErrorHandler(transmissionPolicyManager)); transmissionPolicyManager.addTransmissionHandler(new PartialSuccessHandler(transmissionPolicyManager)); transmissionPolicyManager.addTransmissionHandler(new ThrottlingHandler(transmissionPolicyManager)); transmissionPolicyManager.setMaxInstantRetries(maxInstanceRetries); TransmissionPolicyStateFetcher stateFetcher = transmissionPolicyManager.getTransmissionPolicyState(); TransmissionOutput networkSender = new ActiveTransmissionNetworkOutput(actualNetworkSender, stateFetcher); // An active object with the file system sender TransmissionFileSystemOutput fileSystemSender = new TransmissionFileSystemOutput(); TransmissionOutput activeFileSystemOutput = new ActiveTransmissionFileSystemOutput(fileSystemSender, stateFetcher); // The dispatcher works with the two active senders TransmissionDispatcher dispatcher = new NonBlockingDispatcher(new TransmissionOutput[] {networkSender, activeFileSystemOutput}); // The loader works with the file system loader as the active one does TransmissionsLoader transmissionsLoader = new ActiveTransmissionLoader(fileSystemSender, stateFetcher, dispatcher); // The Transmitter manage all TelemetriesTransmitter telemetriesTransmitter = new TransmitterImpl(dispatcher, new GzipTelemetrySerializer(), transmissionsLoader); return telemetriesTransmitter; } }
long retryAfterAsSeconds = (date.getTime() - convertToDateToGmt(now).getTime()) / 1000; this.transmissionPolicyManager.suspendInSeconds(suspensionPolicy, retryAfterAsSeconds); } catch (Throwable e) {
/** * Provides the core logic for the retransmission * * @param args * The {@link TransmissionHandlerArgs} for this transmission. * @return Returns a pass/fail for handling this transmission. */ boolean validateTransmissionAndSend(TransmissionHandlerArgs args) { if (args.getRetryHeader() != null && args.getTransmission() != null && args.getTransmissionDispatcher() != null) { args.getTransmission().incrementNumberOfSends(); switch (args.getResponseCode()) { case TransmissionSendResult.THROTTLED: case TransmissionSendResult.THROTTLED_OVER_EXTENDED_TIME: suspendTransmissions(TransmissionPolicy.BLOCKED_BUT_CAN_BE_PERSISTED, args.getRetryHeader()); args.getTransmissionDispatcher().dispatch(args.getTransmission()); return true; default: InternalLogger.INSTANCE.trace("Http response code %s not handled by %s", args.getResponseCode(), this.getClass().getName()); return false; } } InternalLogger.INSTANCE.trace("Http response code %s not handled by %s.", args.getResponseCode(), this.getClass().getName()); return false; }
private boolean generateTransmissionWithStatusCodeAndHeader(int code, String retryHeader) { TransmissionPolicyManager tpm = new TransmissionPolicyManager(true); TransmissionDispatcher mockedDispatcher = Mockito.mock(TransmissionDispatcher.class); TransmissionHandlerArgs args = new TransmissionHandlerArgs(); args.setResponseCode(code); args.setTransmission(new Transmission(new byte[] { 0 }, "testcontent", "testencoding")); args.setTransmissionDispatcher(mockedDispatcher); args.setRetryHeader(new BasicHeader(RESPONSE_THROTTLING_HEADER, retryHeader)); ThrottlingHandler eh = new ThrottlingHandler(tpm); boolean result = eh.validateTransmissionAndSend(args); return result; }
transmissionPolicyManager.addTransmissionHandler(new ErrorHandler(transmissionPolicyManager)); transmissionPolicyManager.addTransmissionHandler(new PartialSuccessHandler(transmissionPolicyManager)); transmissionPolicyManager.addTransmissionHandler(new ThrottlingHandler(transmissionPolicyManager)); transmissionPolicyManager.setMaxInstantRetries(maxInstantRetries);
@Test public void failException() { TransmissionPolicyManager tpm = new TransmissionPolicyManager(true); TransmissionDispatcher mockedDispatcher = Mockito.mock(TransmissionDispatcher.class); TransmissionHandlerArgs args = new TransmissionHandlerArgs(); args.setResponseCode(0); args.setTransmission(null); args.setTransmissionDispatcher(mockedDispatcher); args.setException(new Exception("Mocked")); ThrottlingHandler eh = new ThrottlingHandler(tpm); boolean result = eh.validateTransmissionAndSend(args); Assert.assertFalse(result); }