|
9 | 9 | import org.junit.jupiter.api.BeforeEach; |
10 | 10 | import org.junit.jupiter.api.Test; |
11 | 11 | import org.junit.jupiter.api.extension.ExtendWith; |
| 12 | +import org.mockito.ArgumentCaptor; |
12 | 13 | import org.mockito.Mock; |
13 | 14 | import org.mockito.junit.jupiter.MockitoExtension; |
14 | 15 | import org.opensearch.dataprepper.metrics.PluginMetrics; |
| 16 | +import org.opensearch.dataprepper.model.acknowledgements.AcknowledgementSet; |
15 | 17 | import org.opensearch.dataprepper.model.buffer.Buffer; |
16 | 18 | import org.opensearch.dataprepper.model.event.Event; |
17 | 19 | import org.opensearch.dataprepper.model.record.Record; |
|
26 | 28 | import software.amazon.awssdk.services.dynamodb.model.GetShardIteratorRequest; |
27 | 29 | import software.amazon.awssdk.services.dynamodb.model.GetShardIteratorResponse; |
28 | 30 | import software.amazon.awssdk.services.dynamodb.model.InternalServerErrorException; |
| 31 | +import software.amazon.awssdk.services.dynamodb.model.ShardIteratorType; |
29 | 32 | import software.amazon.awssdk.services.dynamodb.streams.DynamoDbStreamsClient; |
30 | 33 |
|
31 | 34 | import java.time.Instant; |
32 | 35 | import java.util.Optional; |
33 | 36 | import java.util.UUID; |
34 | 37 |
|
35 | 38 | import static org.hamcrest.MatcherAssert.assertThat; |
| 39 | +import static org.hamcrest.Matchers.equalTo; |
36 | 40 | import static org.hamcrest.Matchers.notNullValue; |
37 | 41 | import static org.hamcrest.Matchers.nullValue; |
38 | 42 | import static org.mockito.ArgumentMatchers.any; |
@@ -123,6 +127,31 @@ public void test_create_shardConsumer_correctly() { |
123 | 127 | verify(streamApiInvocations).increment(); |
124 | 128 | } |
125 | 129 |
|
| 130 | + @Test |
| 131 | + public void test_create_shardConsumer_correctly_with_is_disable_checkpointing_enabled_starts_from_trim_horizon() { |
| 132 | + |
| 133 | + final AcknowledgementSet acknowledgementSet = mock(AcknowledgementSet.class); |
| 134 | + when(streamConfig.isDisableCheckpointing()).thenReturn(true); |
| 135 | + StreamProgressState state = new StreamProgressState(); |
| 136 | + state.setWaitForExport(false); |
| 137 | + state.setSequenceNumber(UUID.randomUUID().toString()); |
| 138 | + state.setStartTime(Instant.now().toEpochMilli()); |
| 139 | + streamPartition = new StreamPartition(streamArn, shardId, Optional.of(state)); |
| 140 | + |
| 141 | + ShardConsumerFactory consumerFactory = new ShardConsumerFactory(coordinator, dynamoDbStreamsClient, pluginMetrics, dynamoDBSourceAggregateMetrics, buffer, streamConfig); |
| 142 | + Runnable consumer = consumerFactory.createConsumer(streamPartition, acknowledgementSet, null); |
| 143 | + assertThat(consumer, notNullValue()); |
| 144 | + |
| 145 | + final ArgumentCaptor<GetShardIteratorRequest> captor = ArgumentCaptor.forClass(GetShardIteratorRequest.class); |
| 146 | + verify(dynamoDbStreamsClient).getShardIterator(captor.capture()); |
| 147 | + |
| 148 | + final GetShardIteratorRequest getShardIteratorRequest = captor.getValue(); |
| 149 | + assertThat(getShardIteratorRequest.sequenceNumber(), equalTo(null)); |
| 150 | + assertThat(getShardIteratorRequest.shardIteratorType(), equalTo(ShardIteratorType.TRIM_HORIZON)); |
| 151 | + |
| 152 | + verify(streamApiInvocations).increment(); |
| 153 | + } |
| 154 | + |
126 | 155 | @Test |
127 | 156 | public void test_create_shardConsumer_for_closedShards() { |
128 | 157 | // For ending sequence number != null |
|
0 commit comments