use of com.amazonaws.services.kinesisvideo.model.AckEvent in project aws-iot-greengrass-edge-connector-for-kinesis-video-stream by awslabs.
the class VideoUploaderClientTest method uploadStream_mockAckResponseCompleteWithNullCallback_taskClosed.
@Test
public void uploadStream_mockAckResponseCompleteWithNullCallback_taskClosed() throws InterruptedException {
Assumptions.assumeTrue(setPrivateMember(videoUploaderClient, "kvsFrontendClient", mockKvsFrontendClient));
Assumptions.assumeTrue(setPrivateMember(videoUploaderClient, "kvsDataClient", mockKvsDataClient));
ArgumentCaptor<PutMediaAckResponseHandler> putMediaAckResponseArgumentCaptor = ArgumentCaptor.forClass(PutMediaAckResponseHandler.class);
ArgumentCaptor<PutMediaRequest> putMediaRequestArgumentCaptor = ArgumentCaptor.forClass(PutMediaRequest.class);
when(mockKvsFrontendClient.getDataEndpoint(any(GetDataEndpointRequest.class))).thenReturn(new GetDataEndpointResult().withDataEndpoint(DATA_ENDPOINT));
// Since we make putMedia do nothing, so it won't end until we close it.
Date dateNow = Date.from(Instant.now());
new Thread(() -> {
videoUploaderClient.uploadStream(inputStream, dateNow, null, null);
}).start();
// wait until task start
while (!videoUploaderClient.isOpen()) {
System.out.println("task is not running");
Thread.sleep(STATUS_CHANGED_TIME);
}
verify(mockKvsDataClient).putMedia(putMediaRequestArgumentCaptor.capture(), putMediaAckResponseArgumentCaptor.capture());
AckEvent event = new AckEvent().withAckEventType(AckEventType.Values.PERSISTED).withFragmentTimecode(dateNow.getTime());
putMediaAckResponseArgumentCaptor.getValue().onAckEvent(event);
putMediaAckResponseArgumentCaptor.getValue().onComplete();
// wait until task end
while (videoUploaderClient.isOpen()) {
System.out.println("task is running");
Thread.sleep(STATUS_CHANGED_TIME);
}
Assertions.assertFalse(videoUploaderClient.isOpen());
}
use of com.amazonaws.services.kinesisvideo.model.AckEvent in project aws-iot-greengrass-edge-connector-for-kinesis-video-stream by awslabs.
the class VideoUploaderClientTest method uploadStream_mockAckResponseCompleteWithUploadCallback_taskClosed.
@Test
public void uploadStream_mockAckResponseCompleteWithUploadCallback_taskClosed() throws InterruptedException {
Assumptions.assumeTrue(setPrivateMember(videoUploaderClient, "kvsFrontendClient", mockKvsFrontendClient));
Assumptions.assumeTrue(setPrivateMember(videoUploaderClient, "kvsDataClient", mockKvsDataClient));
ArgumentCaptor<PutMediaAckResponseHandler> putMediaAckResponseArgumentCaptor = ArgumentCaptor.forClass(PutMediaAckResponseHandler.class);
ArgumentCaptor<PutMediaRequest> putMediaRequestArgumentCaptor = ArgumentCaptor.forClass(PutMediaRequest.class);
when(mockKvsFrontendClient.getDataEndpoint(any(GetDataEndpointRequest.class))).thenReturn(new GetDataEndpointResult().withDataEndpoint(DATA_ENDPOINT));
doNothing().when(mockKvsDataClient).putMedia(any(PutMediaRequest.class), any(PutMediaAckResponseHandler.class));
// Since we make putMedia do nothing, so it won't end until we close it.
Date dateNow = Date.from(Instant.now());
final UploadCallBack uploadCallBack = new UploadCallBack(dateNow, edgeConnectorForKVSConfiguration);
new Thread(() -> {
videoUploaderClient.uploadStream(inputStream, dateNow, null, uploadCallBack);
}).start();
// wait until task start
while (!videoUploaderClient.isOpen()) {
System.out.println("task is not running");
Thread.sleep(STATUS_CHANGED_TIME);
}
verify(mockKvsDataClient).putMedia(putMediaRequestArgumentCaptor.capture(), putMediaAckResponseArgumentCaptor.capture());
AckEvent event = new AckEvent().withAckEventType(AckEventType.Values.PERSISTED).withFragmentTimecode(dateNow.getTime());
putMediaAckResponseArgumentCaptor.getValue().onAckEvent(event);
putMediaAckResponseArgumentCaptor.getValue().onComplete();
// wait until task end
while (videoUploaderClient.isOpen()) {
System.out.println("task is running");
Thread.sleep(STATUS_CHANGED_TIME);
}
Assertions.assertFalse(videoUploaderClient.isOpen());
}
use of com.amazonaws.services.kinesisvideo.model.AckEvent in project aws-iot-greengrass-edge-connector-for-kinesis-video-stream by awslabs.
the class VideoUploaderClientTest method uploadStream_mockAckResponseComplete_runCallbacks.
@Test
public void uploadStream_mockAckResponseComplete_runCallbacks() throws InterruptedException {
Assumptions.assumeTrue(setPrivateMember(videoUploaderClient, "kvsFrontendClient", mockKvsFrontendClient));
Assumptions.assumeTrue(setPrivateMember(videoUploaderClient, "kvsDataClient", mockKvsDataClient));
final boolean[] isStatusChanged = { false };
final Runnable statusChangedCallBack = () -> isStatusChanged[0] = true;
final UploadCallBack uploadCallBack = new UploadCallBack(Date.from(Instant.now()), edgeConnectorForKVSConfiguration);
ArgumentCaptor<PutMediaAckResponseHandler> putMediaAckResponseArgumentCaptor = ArgumentCaptor.forClass(PutMediaAckResponseHandler.class);
ArgumentCaptor<PutMediaRequest> putMediaRequestArgumentCaptor = ArgumentCaptor.forClass(PutMediaRequest.class);
when(mockKvsFrontendClient.getDataEndpoint(any(GetDataEndpointRequest.class))).thenReturn(new GetDataEndpointResult().withDataEndpoint(DATA_ENDPOINT));
doNothing().when(mockKvsDataClient).putMedia(any(PutMediaRequest.class), any(PutMediaAckResponseHandler.class));
when(this.edgeConnectorForKVSConfiguration.getStreamManager()).thenReturn(streamManager);
when(streamManager.pushData(any(), any(), any(), any())).thenReturn(0L);
// Since we make putMedia do nothing, so it won't end until we close it.
new Thread(() -> {
videoUploaderClient.uploadStream(inputStream, Date.from(Instant.now()), statusChangedCallBack, uploadCallBack);
}).start();
Thread.sleep(STATUS_CHANGED_TIME);
// wait until task start
while (!videoUploaderClient.isOpen()) {
System.out.println("task is not running");
Thread.sleep(STATUS_CHANGED_TIME);
}
verify(mockKvsDataClient).putMedia(putMediaRequestArgumentCaptor.capture(), putMediaAckResponseArgumentCaptor.capture());
AckEvent event = new AckEvent().withAckEventType(AckEventType.Values.PERSISTED);
event.setFragmentTimecode(1L);
putMediaAckResponseArgumentCaptor.getValue().onAckEvent(event);
// Wait stream manager update values
Thread.sleep(STATUS_CHANGED_TIME);
putMediaAckResponseArgumentCaptor.getValue().onComplete();
// wait until task end
while (videoUploaderClient.isOpen()) {
System.out.println("task is running");
Thread.sleep(STATUS_CHANGED_TIME);
}
Assertions.assertFalse(isStatusChanged[0]);
verify(streamManager, times(1)).pushData(any(), any(), any(), any());
}
use of com.amazonaws.services.kinesisvideo.model.AckEvent in project amazon-kinesis-video-streams-parser-library by aws.
the class PutMediaWorker method run.
@Override
public void run() {
CountDownLatch latch = new CountDownLatch(1);
putMedia.putMedia(new PutMediaRequest().withStreamName(streamName).withFragmentTimecodeType(FragmentTimecodeType.RELATIVE).withProducerStartTimestamp(new Date()).withPayload(inputStream), new PutMediaAckResponseHandler() {
@Override
public void onAckEvent(AckEvent event) {
log.info("PutMedia Ack for stream {}: {} ", streamName, event.toString());
if (AckEventType.Values.PERSISTED.equals(event.getAckEventType().getEnumValue())) {
numFragmentsPersisted++;
}
}
@Override
public void onFailure(Throwable t) {
log.error("PutMedia for {} has suffered error {}", streamName, t);
latch.countDown();
}
@Override
public void onComplete() {
log.info("PutMedia for {} is complete ", streamName);
latch.countDown();
}
});
log.info("Made PutMedia call for stream {}", streamName);
try {
latch.await();
log.info("PutMedia worker exiting for stream {} number of fragments persisted {} ", streamName, numFragmentsPersisted);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("Failure while waiting for PutMedia to finish", e);
} finally {
putMedia.close();
}
}
use of com.amazonaws.services.kinesisvideo.model.AckEvent in project aws-iot-greengrass-edge-connector-for-kinesis-video-stream by awslabs.
the class VideoUploaderClientTest method uploadStream_mockAckResponseFailure_runCallbacks.
@Test
public void uploadStream_mockAckResponseFailure_runCallbacks() throws InterruptedException {
Assumptions.assumeTrue(setPrivateMember(videoUploaderClient, "kvsFrontendClient", mockKvsFrontendClient));
Assumptions.assumeTrue(setPrivateMember(videoUploaderClient, "kvsDataClient", mockKvsDataClient));
final boolean[] isStatusChanged = { false };
final Runnable statusChangedCallBack = () -> isStatusChanged[0] = true;
final UploadCallBack uploadCallBack = new UploadCallBack(Date.from(Instant.now()), edgeConnectorForKVSConfiguration);
ArgumentCaptor<PutMediaAckResponseHandler> putMediaAckResponseArgumentCaptor = ArgumentCaptor.forClass(PutMediaAckResponseHandler.class);
ArgumentCaptor<PutMediaRequest> putMediaRequestArgumentCaptor = ArgumentCaptor.forClass(PutMediaRequest.class);
when(mockKvsFrontendClient.getDataEndpoint(any(GetDataEndpointRequest.class))).thenReturn(new GetDataEndpointResult().withDataEndpoint(DATA_ENDPOINT));
doNothing().when(mockKvsDataClient).putMedia(any(PutMediaRequest.class), any(PutMediaAckResponseHandler.class));
// Since we make putMedia do nothing, so it won't end until we close it.
new Thread(() -> {
Assertions.assertThrows(KvsStreamingException.class, () -> videoUploaderClient.uploadStream(inputStream, Date.from(Instant.now()), statusChangedCallBack, uploadCallBack));
}).start();
// wait until task start
while (!videoUploaderClient.isOpen()) {
System.out.println("task is not running");
Thread.sleep(STATUS_CHANGED_TIME);
}
verify(mockKvsDataClient).putMedia(putMediaRequestArgumentCaptor.capture(), putMediaAckResponseArgumentCaptor.capture());
AckEvent event = new AckEvent().withAckEventType(AckEventType.Values.ERROR);
putMediaAckResponseArgumentCaptor.getValue().onAckEvent(event);
putMediaAckResponseArgumentCaptor.getValue().onFailure(new RuntimeException("Mock failure"));
// wait until task end
while (videoUploaderClient.isOpen()) {
System.out.println("task is running");
Thread.sleep(STATUS_CHANGED_TIME);
}
Assertions.assertFalse(isStatusChanged[0]);
verify(streamManager, times(0)).pushData(any(), any(), any(), any());
}
Aggregations