1 package com.github.davidmoten.aws.lw.client;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6
7 import java.nio.charset.StandardCharsets;
8 import java.util.Arrays;
9 import java.util.Collections;
10 import java.util.HashMap;
11 import java.util.List;
12 import java.util.Map;
13
14 import org.junit.Test;
15
16 public class ResponseTest {
17
18 @Test
19 public void test() {
20 byte[] content = "hi there".getBytes(StandardCharsets.UTF_8);
21 Map<String, List<String>> headers = new HashMap<>();
22 headers.put("x-amz-meta-color", Collections.singletonList("red"));
23 headers.put("x-amz-meta-thing", Collections.singletonList("under"));
24 headers.put("blah", Collections.singletonList("stuff"));
25 Response r = new Response(headers, content, 200);
26 assertEquals("hi there", r.contentUtf8());
27 assertTrue(r.isOk());
28 assertEquals("red", r.metadata("color").get());
29 assertEquals("under", r.metadata("thing").get());
30 assertEquals(2, r.metadata().entrySet().size());
31 assertEquals(3, r.headers().size());
32 assertEquals(200, r.statusCode());
33 }
34
35 @Test
36 public void testFilterNullKeys() {
37 byte[] content = "hi there".getBytes(StandardCharsets.UTF_8);
38 Map<String, List<String>> headers = new HashMap<>();
39 headers.put("x-amz-meta-color", Collections.singletonList("red"));
40 headers.put((String) null, Collections.singletonList("thing"));
41 Response r = new Response(headers, content, 200);
42 assertEquals(1, r.metadata().entrySet().size());
43 assertEquals(2, r.headers().size());
44 }
45
46 @Test
47 public void testResponseCodeOk() {
48 Response r = new Response(Collections.emptyMap(), new byte[0], 210);
49 assertTrue(r.isOk());
50 }
51
52 @Test
53 public void testResponseCode199() {
54 Response r = new Response(Collections.emptyMap(), new byte[0], 199);
55 assertTrue(!r.isOk());
56 }
57
58 @Test
59 public void testResponseCode300() {
60 Response r = new Response(Collections.emptyMap(), new byte[0], 300);
61 assertTrue(!r.isOk());
62 }
63
64 @Test
65 public void testExists200() {
66 Response r = new Response(Collections.emptyMap(), new byte[0], 200);
67 assertTrue(r.exists());
68 }
69
70 @Test
71 public void testExists299() {
72 Response r = new Response(Collections.emptyMap(), new byte[0], 299);
73 assertTrue(r.exists());
74 }
75
76 @Test
77 public void testExists404() {
78 Response r = new Response(Collections.emptyMap(), new byte[0], 404);
79 assertFalse(r.exists());
80 }
81
82 @Test(expected = ServiceException.class)
83 public void testExists500() {
84 Response r = new Response(Collections.emptyMap(), new byte[0], 500);
85 r.exists();
86 }
87
88 @Test(expected = ServiceException.class)
89 public void testExists100() {
90 Response r = new Response(Collections.emptyMap(), new byte[0], 100);
91 r.exists();
92 }
93
94 @Test
95 public void testFirstHeader() {
96 Map<String, List<String>> map = new HashMap<>();
97 map.put("thing", Arrays.asList("a", "b"));
98 Response r = new Response(map, new byte[0], 100);
99 assertEquals("a", r.firstHeader("thing").get());
100 }
101
102 @Test
103 public void testFirstHeaderIsCaseInsensitive() {
104 Map<String, List<String>> map = new HashMap<>();
105 List<String> v = Arrays.asList("a", "b");
106 map.put("Thing", v);
107 Response r = new Response(map, new byte[0], 100);
108 assertEquals("a", r.firstHeader("THING").get());
109 assertEquals(v, r.headers().get("Thing"));
110 assertEquals(v, r.headersLowerCaseKey().get("thing"));
111 }
112
113 @Test
114 public void testFirstHeaderFullDateNoHeaders() {
115 Map<String, List<String>> map = new HashMap<>();
116 Response r = new Response(map, new byte[0], 100);
117 assertFalse(r.firstHeaderFullDate("date").isPresent());
118 }
119
120 @Test
121 public void testFirstHeaderFullDateBlank() {
122 Map<String, List<String>> map = new HashMap<>();
123 map.put("date", Collections.emptyList());
124 Response r = new Response(map, new byte[0], 100);
125 assertFalse(r.firstHeaderFullDate("date").isPresent());
126 }
127
128 @Test
129 public void testFirstHeaderFullDate() {
130 Map<String, List<String>> map = new HashMap<>();
131 map.put("date",
132 Arrays.asList("Wed, 25 Aug 2021 21:55:47 GMT", "Thu, 26 Aug 2021 21:55:47 GMT"));
133 Response r = new Response(map, new byte[0], 100);
134 assertEquals(1629928547000L, r.firstHeaderFullDate("date").get().toEpochMilli());
135 }
136 }