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