xref: /aosp_15_r20/external/aws-eventstream-java/src/test/java/software/amazon/eventstream/TestUtils.java (revision 3990ee4244bcecb5cb057ac1935381dd16da2e31)
1 package software.amazon.eventstream;
2 
3 import java.time.Instant;
4 import java.util.HashMap;
5 import java.util.Map;
6 import java.util.Random;
7 import java.util.UUID;
8 
9 public class TestUtils {
10     private final Random rand;
11     private final int maxHeaders;
12     private final int maxHeaderSize;
13     private final int maxPayloadSize;
14 
TestUtils(long seed)15     public TestUtils(long seed) {
16         this.rand = new Random(seed);
17         this.maxHeaders = 20;
18         this.maxHeaderSize = 64;
19         this.maxPayloadSize = 4096;
20     }
21 
randomMessage()22     public Message randomMessage() {
23         return new Message(randomHeaders(), randomPayload());
24     }
25 
randomMessage(int payloadSize)26     public Message randomMessage(int payloadSize) {
27         return new Message(randomHeaders(), randomPayload(payloadSize));
28     }
29 
randomHeaders()30     private Map<String, HeaderValue> randomHeaders() {
31         Map<String, HeaderValue> headers = new HashMap<>();
32         int numHeaders = rand.nextInt(maxHeaders + 1);
33         for (int i = 0; i < numHeaders; i++) {
34             headers.put("asdf" + rand.nextInt(), randomHeaderValue());
35         }
36         return headers;
37     }
38 
randomHeaderValue()39     private HeaderValue randomHeaderValue() {
40         switch (rand.nextInt(7)) {
41             case 0:
42                 return HeaderValue.fromInteger(rand.nextInt(Integer.MAX_VALUE));
43             case 1:
44                 int bytes = rand.nextInt(maxHeaderSize + 1) + 1;
45                 byte[] buf = new byte[bytes];
46                 rand.nextBytes(buf);
47                 return HeaderValue.fromByteArray(buf);
48             case 2:
49                 return HeaderValue.fromString("asdf");
50             case 3:
51                 return HeaderValue.fromBoolean(true);
52             case 4:
53                 return HeaderValue.fromBoolean(false);
54             case 5:
55                 return HeaderValue.fromTimestamp(Instant.ofEpochMilli(rand.nextLong()));
56             case 6:
57                 return HeaderValue.fromUuid(new UUID(rand.nextLong(), rand.nextLong()));
58             default:
59                 throw new IllegalStateException();
60         }
61     }
62 
randomPayload()63     private byte[] randomPayload() {
64         return randomPayload(rand.nextInt(maxPayloadSize + 1));
65     }
66 
randomPayload(int payloadSize)67     private byte[] randomPayload(int payloadSize) {
68         byte[] ret = new byte[payloadSize];
69         rand.nextBytes(ret);
70         return ret;
71     }
72 }
73