1+ package cloud .localstack .awssdkv2 ;
2+
3+ import cloud .localstack .LocalstackTestRunner ;
4+
5+ import static org .junit .Assert .assertEquals ;
6+ import static org .junit .Assert .assertNotNull ;
7+ import org .junit .Assert ;
8+ import org .junit .Test ;
9+ import org .junit .runner .RunWith ;
10+
11+ import software .amazon .awssdk .auth .credentials .AwsBasicCredentials ;
12+ import software .amazon .awssdk .auth .credentials .StaticCredentialsProvider ;
13+ import software .amazon .awssdk .regions .Region ;
14+ import software .amazon .awssdk .services .kinesis .model .CreateStreamRequest ;
15+ import software .amazon .awssdk .services .kinesis .KinesisAsyncClient ;
16+ import software .amazon .awssdk .http .async .SdkAsyncHttpClient ;
17+ import software .amazon .awssdk .http .Protocol ;
18+ import software .amazon .awssdk .utils .AttributeMap ;
19+ import software .amazon .awssdk .http .nio .netty .*;
20+ import software .amazon .awssdk .core .*;
21+ import software .amazon .awssdk .services .kinesis .KinesisAsyncClient ;
22+ import software .amazon .awssdk .regions .Region ;
23+ import software .amazon .awssdk .auth .credentials .AwsCredentialsProvider ;
24+ import software .amazon .awssdk .auth .credentials .DefaultCredentialsProvider ;
25+ import software .amazon .awssdk .services .kinesis .KinesisAsyncClient ;
26+ import software .amazon .awssdk .services .kinesis .model .*;
27+
28+ import static java .lang .System .out ;
29+ import java .util .*;
30+ import java .util .concurrent .TimeUnit ;
31+
32+ @ RunWith (LocalstackTestRunner .class )
33+ public class KinesisV2ConsumerTest {
34+
35+ @ Test
36+ public void testGetRecord () throws Exception {
37+ String streamName = "test-s-" +UUID .randomUUID ().toString ();
38+ KinesisAsyncClient kinesisClient = TestUtils .getClientKinesisAsyncV2 ();
39+
40+ CreateStreamRequest request = CreateStreamRequest .builder ()
41+ .streamName (streamName ).shardCount (1 ).build ();
42+ CreateStreamResponse response = kinesisClient .createStream (request ).get ();
43+ Assert .assertNotNull (response );
44+ TimeUnit .SECONDS .sleep (2 );
45+
46+ PutRecordRequest putRecordRequest = PutRecordRequest .builder ()
47+ .partitionKey ("partitionkey" )
48+ .streamName (streamName )
49+ .data (SdkBytes .fromUtf8String ("hello, world!" ))
50+ .build ();
51+ String shardId = kinesisClient .putRecord (putRecordRequest ).get ().shardId ();
52+
53+ GetShardIteratorRequest getShardIteratorRequest = GetShardIteratorRequest .builder ()
54+ .shardId (shardId )
55+ .shardIteratorType (ShardIteratorType .TRIM_HORIZON )
56+ .streamName (streamName )
57+ .build ();
58+ String shardIterator = kinesisClient
59+ .getShardIterator (getShardIteratorRequest )
60+ .get ()
61+ .shardIterator ();
62+
63+ GetRecordsRequest getRecordRequest = GetRecordsRequest .builder ().shardIterator (shardIterator ).build ();
64+ Integer limit = 100 ;
65+ Integer counter = 0 ;
66+ Boolean recordFound = false ;
67+
68+ while (true ) {
69+ GetRecordsResponse recordsResponse = kinesisClient .getRecords (getRecordRequest ).get ();
70+
71+ if (recordsResponse .hasRecords ()) {
72+ recordFound = true ;
73+ break ;
74+ }
75+
76+ if (counter >= limit ){
77+ break ;
78+ }
79+
80+ counter += 1 ;
81+ shardIterator = recordsResponse .nextShardIterator ();
82+ }
83+ Assert .assertTrue (recordFound );
84+ }
85+ }
0 commit comments