1 package software.amazon.awssdk.crt.test; 2 3 import org.junit.Test; 4 import software.amazon.awssdk.crt.CrtRuntimeException; 5 import software.amazon.awssdk.crt.eventstream.Header; 6 import software.amazon.awssdk.crt.eventstream.HeaderType; 7 8 import java.io.ByteArrayOutputStream; 9 import java.nio.ByteBuffer; 10 import java.util.Date; 11 import java.util.UUID; 12 13 import static org.junit.Assert.*; 14 15 public class EventStreamHeaderTest extends CrtTestFixture { EventStreamHeaderTest()16 public EventStreamHeaderTest() {} 17 18 @Test testStringHeader()19 public void testStringHeader() { 20 Header strHeader = Header.createHeader("testHeader", "testValue"); 21 assertEquals("testValue", strHeader.getValueAsString()); 22 assertEquals("testHeader", strHeader.getName()); 23 assertEquals(HeaderType.String, strHeader.getHeaderType()); 24 } 25 26 @Test testStringHeaderSerialization()27 public void testStringHeaderSerialization() { 28 Header header = Header.createHeader("testHeader", "testValue"); 29 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 30 header.writeToByteBuffer(serializedBuffer); 31 serializedBuffer.position(0); 32 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 33 assertEquals(header, deserializedHeader); 34 } 35 36 @Test(expected = CrtRuntimeException.class) testStringHeaderValueTooLong()37 public void testStringHeaderValueTooLong() { 38 StringBuilder testValue = new StringBuilder(); 39 40 while(testValue.length() < Short.MAX_VALUE + 1) { 41 testValue.append("a"); 42 } 43 44 Header.createHeader("testHeader", testValue.toString()); 45 } 46 47 @Test testBinaryHeader()48 public void testBinaryHeader() { 49 byte[] testValue = new byte[] {0,1,2,3,4,5,6,7,8,9,10}; 50 Header binHeader = Header.createHeader("testHeader", testValue); 51 assertArrayEquals(testValue, binHeader.getValueAsBytes()); 52 assertEquals("testHeader", binHeader.getName()); 53 assertEquals(HeaderType.ByteBuf, binHeader.getHeaderType()); 54 } 55 56 @Test testBinaryHeaderSerialization()57 public void testBinaryHeaderSerialization() { 58 byte[] testValue = new byte[] {0,1,2,3,4,5,6,7,8,9,10}; 59 Header header = Header.createHeader("testHeader", testValue); 60 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 61 header.writeToByteBuffer(serializedBuffer); 62 serializedBuffer.position(0); 63 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 64 assertEquals(header, deserializedHeader); 65 } 66 67 @Test(expected = CrtRuntimeException.class) testBinaryHeaderValueTooLong()68 public void testBinaryHeaderValueTooLong() { 69 ByteArrayOutputStream testValue = new ByteArrayOutputStream(); 70 71 int written = 0; 72 while(written < Short.MAX_VALUE + 1) { 73 testValue.write(8); 74 written++; 75 } 76 77 Header strHeader = Header.createHeader("testHeader", testValue.toByteArray()); 78 } 79 80 @Test testBooleanHeader()81 public void testBooleanHeader() { 82 Header boolHeader = Header.createHeader("testHeader", false); 83 assertFalse(boolHeader.getValueAsBoolean()); 84 assertEquals("testHeader", boolHeader.getName()); 85 assertEquals(HeaderType.BooleanFalse, boolHeader.getHeaderType()); 86 87 boolHeader = Header.createHeader("testHeader", true); 88 assertTrue(boolHeader.getValueAsBoolean()); 89 assertEquals("testHeader", boolHeader.getName()); 90 assertEquals(HeaderType.BooleanTrue, boolHeader.getHeaderType()); 91 } 92 93 @Test testBooleanHeaderSerialization()94 public void testBooleanHeaderSerialization() { 95 Header header = Header.createHeader("testHeader", false); 96 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 97 header.writeToByteBuffer(serializedBuffer); 98 serializedBuffer.position(0); 99 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 100 assertEquals(header, deserializedHeader); 101 102 header = Header.createHeader("testHeader", true); 103 serializedBuffer = ByteBuffer.allocate(1024); 104 header.writeToByteBuffer(serializedBuffer); 105 serializedBuffer.position(0); 106 deserializedHeader = Header.fromByteBuffer(serializedBuffer); 107 assertEquals(header, deserializedHeader); 108 } 109 110 @Test testByteHeader()111 public void testByteHeader() { 112 Header byteHeader = Header.createHeader("testHeader", (byte)127); 113 assertEquals(127, byteHeader.getValueAsByte()); 114 assertEquals("testHeader", byteHeader.getName()); 115 assertEquals(HeaderType.Byte, byteHeader.getHeaderType()); 116 } 117 118 @Test testByteHeaderSerialization()119 public void testByteHeaderSerialization() { 120 Header header = Header.createHeader("testHeader", (byte)127); 121 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 122 header.writeToByteBuffer(serializedBuffer); 123 serializedBuffer.position(0); 124 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 125 assertEquals(header, deserializedHeader); 126 } 127 128 @Test testShortHeader()129 public void testShortHeader() { 130 Header shortHeader = Header.createHeader("testHeader", (short)8001); 131 assertEquals(8001, shortHeader.getValueAsShort()); 132 assertEquals("testHeader", shortHeader.getName()); 133 assertEquals(HeaderType.Int16, shortHeader.getHeaderType()); 134 } 135 136 @Test testShortHeaderSerialization()137 public void testShortHeaderSerialization() { 138 Header header = Header.createHeader("testHeader", (short)8001); 139 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 140 header.writeToByteBuffer(serializedBuffer); 141 serializedBuffer.position(0); 142 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 143 assertEquals(header, deserializedHeader); 144 } 145 146 @Test testIntHeader()147 public void testIntHeader() { 148 Header intHeader = Header.createHeader("testHeader", 123456789); 149 assertEquals(123456789, intHeader.getValueAsInt()); 150 assertEquals("testHeader", intHeader.getName()); 151 assertEquals(HeaderType.Int32, intHeader.getHeaderType()); 152 } 153 154 @Test testIntHeaderSerialization()155 public void testIntHeaderSerialization() { 156 Header header = Header.createHeader("testHeader", 123456789); 157 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 158 header.writeToByteBuffer(serializedBuffer); 159 serializedBuffer.position(0); 160 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 161 assertEquals(header, deserializedHeader); 162 } 163 164 @Test testLongHeader()165 public void testLongHeader() { 166 Header longHeader = Header.createHeader("testHeader", (long)Integer.MAX_VALUE + 1); 167 assertEquals((long)Integer.MAX_VALUE + 1, longHeader.getValueAsLong()); 168 assertEquals("testHeader", longHeader.getName()); 169 assertEquals(HeaderType.Int64, longHeader.getHeaderType()); 170 } 171 172 @Test testLongHeaderSerialization()173 public void testLongHeaderSerialization() { 174 Header header = Header.createHeader("testHeader", (long)Integer.MAX_VALUE + 1); 175 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 176 header.writeToByteBuffer(serializedBuffer); 177 serializedBuffer.position(0); 178 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 179 assertEquals(header, deserializedHeader); 180 } 181 182 @Test testDateHeader()183 public void testDateHeader() { 184 Date headerValue = new Date(); 185 Header dateHeader = Header.createHeader("testHeader", headerValue); 186 assertEquals(headerValue, dateHeader.getValueAsTimestamp()); 187 assertEquals("testHeader", dateHeader.getName()); 188 assertEquals(HeaderType.TimeStamp, dateHeader.getHeaderType()); 189 } 190 191 @Test testDateHeaderSerialization()192 public void testDateHeaderSerialization() { 193 Date headerValue = new Date(); 194 Header header = Header.createHeader("testHeader", headerValue); 195 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 196 header.writeToByteBuffer(serializedBuffer); 197 serializedBuffer.position(0); 198 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 199 assertEquals(header, deserializedHeader); 200 } 201 202 @Test testUUIDHeader()203 public void testUUIDHeader() { 204 UUID headerValue = UUID.randomUUID(); 205 Header uuidHeader = Header.createHeader("testHeader", headerValue); 206 assertEquals(headerValue, uuidHeader.getValueAsUUID()); 207 assertEquals("testHeader", uuidHeader.getName()); 208 assertEquals(HeaderType.UUID, uuidHeader.getHeaderType()); 209 } 210 211 @Test testUUIDHeaderSerialization()212 public void testUUIDHeaderSerialization() { 213 UUID headerValue = UUID.randomUUID(); 214 Header header = Header.createHeader("testHeader", headerValue); 215 ByteBuffer serializedBuffer = ByteBuffer.allocate(1024); 216 header.writeToByteBuffer(serializedBuffer); 217 serializedBuffer.position(0); 218 Header deserializedHeader = Header.fromByteBuffer(serializedBuffer); 219 assertEquals(header, deserializedHeader); 220 } 221 222 @Test(expected = CrtRuntimeException.class) testHeaderNameTooLong()223 public void testHeaderNameTooLong() { 224 StringBuilder headerName = new StringBuilder(); 225 226 while(headerName.length() < Byte.MAX_VALUE + 1) { 227 headerName.append("a"); 228 } 229 230 Header.createHeader(headerName.toString(), "this should fail"); 231 } 232 } 233