Skip to content

Commit 2eb378e

Browse files
author
Bilal Al
committed
allowed multiple values per header
1 parent 06bec68 commit 2eb378e

File tree

4 files changed

+51
-30
lines changed

4 files changed

+51
-30
lines changed

client/src/main/java/io/split/client/RequestDecorator.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
import java.util.Map;
77
import java.util.Arrays;
88
import java.util.Set;
9+
import java.util.List;
910

1011
class NoOpHeaderDecorator implements UserCustomHeaderDecorator {
1112
public NoOpHeaderDecorator() {}
1213
@Override
13-
public Map<String, String> getHeaderOverrides() {
14+
public Map<String, List<String>> getHeaderOverrides() {
1415
return new HashMap<>();
1516
}
1617
}
@@ -41,10 +42,17 @@ public RequestDecorator(UserCustomHeaderDecorator headerDecorator) {
4142

4243
public HttpUriRequestBase decorateHeaders(HttpUriRequestBase request) {
4344
try {
44-
Map<String, String> headers = _headerDecorator.getHeaderOverrides();
45+
Map<String, List<String>> headers = _headerDecorator.getHeaderOverrides();
4546
for (Map.Entry entry : headers.entrySet()) {
4647
if (isHeaderAllowed(entry.getKey().toString())) {
47-
request.setHeader(entry.getKey().toString(), entry.getValue());
48+
List<String> values = (List<String>) entry.getValue();
49+
for (int i = 0; i < values.size(); i++) {
50+
if (i == 0) {
51+
request.setHeader(entry.getKey().toString(), values.get(i));
52+
} else {
53+
request.addHeader(entry.getKey().toString(), values.get(i));
54+
}
55+
}
4856
}
4957
}
5058
} catch (Exception e) {
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package io.split.client;
22

33
import java.util.Map;
4+
import java.util.List;
45

56
public interface UserCustomHeaderDecorator
67
{
78
/**
89
* Get the additional headers needed for all http operations
910
* @return HashMap of addition headers
1011
*/
11-
Map<String, String> getHeaderOverrides();
12+
Map<String, List<String>> getHeaderOverrides();
1213
}

client/src/test/java/io/split/client/RequestDecoratorTest.java

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,18 @@
22

33
import org.apache.hc.client5.http.classic.methods.HttpGet;
44
import org.apache.hc.client5.http.classic.methods.HttpPost;
5+
import org.apache.hc.core5.http.Header;
6+
import org.apache.hc.core5.http.HeaderElement;
57
import org.apache.hc.core5.http.ProtocolException;
68
import org.junit.Assert;
79
import org.junit.Test;
10+
import static org.hamcrest.core.IsEqual.equalTo;
11+
import static org.hamcrest.MatcherAssert.assertThat;
12+
import static org.hamcrest.core.Is.is;
813

14+
import java.util.List;
15+
import java.util.Arrays;
16+
import java.util.ArrayList;
917
import java.util.HashMap;
1018
import java.util.Map;
1119

@@ -24,15 +32,15 @@ public void testNoOp() {
2432

2533
@Test
2634
public void testAddCustomHeaders() throws ProtocolException {
27-
class MyCustomHeaders implements UserCustomHeaderDecorator {
35+
class MyCustomHeaders implements UserCustomHeaderDecorator {
2836
public MyCustomHeaders() {}
2937
@Override
30-
public Map<String, String> getHeaderOverrides() {
31-
return new HashMap<String, String>()
38+
public Map<String, List<String>> getHeaderOverrides() {
39+
return new HashMap<String, List<String>>()
3240
{{
33-
put("first", "1");
34-
put("second", "2");
35-
put("third", "3");
41+
put("first", List.of("1"));
42+
put("second", List.of("2.1", "2.2"));
43+
put("third", List.of("3"));
3644
}};
3745
}
3846
}
@@ -41,38 +49,42 @@ public Map<String, String> getHeaderOverrides() {
4149
HttpGet request = new HttpGet("http://anyhost");
4250
request.addHeader("first", "myfirstheader");
4351
request = (HttpGet) decorator.decorateHeaders(request);
44-
Assert.assertEquals(3, request.getHeaders().length);
52+
53+
Assert.assertEquals(4, request.getHeaders().length);
4554
Assert.assertEquals("1", request.getHeader("first").getValue());
46-
Assert.assertEquals("2", request.getHeader("second").getValue());
55+
56+
Header[] second = request.getHeaders("second");
57+
Assert.assertEquals("2.1", second[0].getValue());
58+
Assert.assertEquals("2.2", second[1].getValue());
4759
Assert.assertEquals("3", request.getHeader("third").getValue());
4860

4961
HttpPost request2 = new HttpPost("http://anyhost");
5062
request2.addHeader("myheader", "value");
5163
request2 = (HttpPost) decorator.decorateHeaders(request2);
52-
Assert.assertEquals(4, request2.getHeaders().length);
64+
Assert.assertEquals(5, request2.getHeaders().length);
5365
}
5466

5567
@Test
5668
public void testAddBlockedHeaders() throws ProtocolException {
5769
class MyCustomHeaders implements UserCustomHeaderDecorator {
5870
public MyCustomHeaders() {}
5971
@Override
60-
public Map<String, String> getHeaderOverrides() {
61-
return new HashMap<String, String>()
72+
public Map<String, List<String>> getHeaderOverrides() {
73+
return new HashMap<String, List<String>>()
6274
{{
63-
put("first", "1");
64-
put("SplitSDKVersion", "2.4");
65-
put("SplitMachineip", "xx");
66-
put("splitMachineName", "xx");
67-
put("splitimpressionsmode", "xx");
68-
put("HOST", "xx");
69-
put("referrer", "xx");
70-
put("content-type", "xx");
71-
put("content-length", "xx");
72-
put("content-encoding", "xx");
73-
put("ACCEPT", "xx");
74-
put("keep-alive", "xx");
75-
put("x-fastly-debug", "xx");
75+
put("first", List.of("1"));
76+
put("SplitSDKVersion", List.of("2.4"));
77+
put("SplitMachineip", List.of("xx"));
78+
put("splitMachineName", List.of("xx"));
79+
put("splitimpressionsmode", List.of("xx"));
80+
put("HOST", List.of("xx"));
81+
put("referrer", List.of("xx"));
82+
put("content-type", List.of("xx"));
83+
put("content-length", List.of("xx"));
84+
put("content-encoding", List.of("xx"));
85+
put("ACCEPT", List.of("xx"));
86+
put("keep-alive", List.of("xx"));
87+
put("x-fastly-debug", List.of("xx"));
7688

7789
}};
7890
}
@@ -90,7 +102,7 @@ public void customDecoratorError() {
90102
class MyCustomHeaders implements UserCustomHeaderDecorator {
91103
public MyCustomHeaders() {}
92104
@Override
93-
public Map<String, String> getHeaderOverrides() {
105+
public Map<String, List<String>> getHeaderOverrides() {
94106
throw new RuntimeException();
95107
}
96108
}

client/src/test/java/io/split/client/SplitClientConfigTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public void IntegrationConfigAsyncNotNull() {
241241
public void checkUserCustomdHeaderDecorator() {
242242
UserCustomHeaderDecorator ucd = new UserCustomHeaderDecorator() {
243243
@Override
244-
public Map<String, String> getHeaderOverrides() {
244+
public Map<String, List<String>> getHeaderOverrides() {
245245
return null;
246246
}
247247
};

0 commit comments

Comments
 (0)