Skip to content

Commit 493c8f6

Browse files
author
Bilal Al
committed
added RequestContext and refactored RequestDecorator classes
1 parent aa9aafd commit 493c8f6

File tree

5 files changed

+67
-31
lines changed

5 files changed

+67
-31
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.split.client;
22

3+
import io.split.client.dtos.RequestContext;
4+
35
import java.util.Map;
46
import java.util.List;
57

@@ -9,5 +11,5 @@ public interface CustomHeaderDecorator
911
* Get the additional headers needed for all http operations
1012
* @return HashMap of addition headers
1113
*/
12-
Map<String, List<String>> getHeaderOverrides();
14+
Map<String, List<String>> getHeaderOverrides(RequestContext context);
1315
}

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
package io.split.client;
22

3+
import io.split.client.dtos.RequestContext;
4+
35
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
6+
import org.apache.hc.core5.http.Header;
7+
48
import java.util.HashSet;
59
import java.util.HashMap;
610
import java.util.Map;
711
import java.util.Arrays;
12+
import java.util.ArrayList;
813
import java.util.Set;
914
import java.util.List;
1015

1116
class NoOpHeaderDecorator implements CustomHeaderDecorator {
1217
public NoOpHeaderDecorator() {}
1318
@Override
14-
public Map<String, List<String>> getHeaderOverrides() {
19+
public Map<String, List<String>> getHeaderOverrides(RequestContext context) {
1520
return new HashMap<>();
1621
}
1722
}
@@ -42,7 +47,7 @@ public RequestDecorator(CustomHeaderDecorator headerDecorator) {
4247

4348
public HttpUriRequestBase decorateHeaders(HttpUriRequestBase request) {
4449
try {
45-
Map<String, List<String>> headers = _headerDecorator.getHeaderOverrides();
50+
Map<String, List<String>> headers = _headerDecorator.getHeaderOverrides(new RequestContext(convertToMap(request.getHeaders())));
4651
for (Map.Entry entry : headers.entrySet()) {
4752
if (isHeaderAllowed(entry.getKey().toString())) {
4853
List<String> values = (List<String>) entry.getValue();
@@ -65,4 +70,14 @@ public HttpUriRequestBase decorateHeaders(HttpUriRequestBase request) {
6570
private boolean isHeaderAllowed(String headerName) {
6671
return !forbiddenHeaders.contains(headerName.toLowerCase());
6772
}
73+
private Map<String, List<String>> convertToMap(Header[] to_convert) {
74+
Map<String, List<String>> to_return = new HashMap<String, List<String>>();
75+
for (Integer i = 0; i < to_convert.length; i++ ) {
76+
if (!to_return.containsKey(to_convert[i].getName())) {
77+
to_return.put(to_convert[i].getName(), new ArrayList<String>());
78+
}
79+
to_return.get(to_convert[i].getName()).add(to_convert[i].getValue());
80+
}
81+
return to_return;
82+
}
6883
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.split.client.dtos;
2+
3+
import java.util.Map;
4+
import java.util.List;
5+
/**
6+
* A structure returning a context for RequestDecorator class
7+
*/
8+
9+
public class RequestContext
10+
{
11+
private final Map<String, List<String>> _headers;
12+
13+
public RequestContext(Map<String, List<String>> headers) {
14+
_headers = headers;
15+
}
16+
17+
public Map<String, List<String>> headers() {
18+
return _headers;
19+
}
20+
}

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

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@
33
import org.apache.hc.client5.http.classic.methods.HttpGet;
44
import org.apache.hc.client5.http.classic.methods.HttpPost;
55
import org.apache.hc.core5.http.Header;
6-
import org.apache.hc.core5.http.HeaderElement;
76
import org.apache.hc.core5.http.ProtocolException;
87
import org.junit.Assert;
98
import org.junit.Test;
109
import static org.hamcrest.core.IsEqual.equalTo;
1110
import static org.hamcrest.MatcherAssert.assertThat;
1211
import static org.hamcrest.core.Is.is;
1312

13+
import io.split.client.dtos.RequestContext;
14+
1415
import java.util.List;
1516
import java.util.Arrays;
1617
import java.util.HashMap;
@@ -34,13 +35,12 @@ public void testAddCustomHeaders() throws ProtocolException {
3435
class MyCustomHeaders implements CustomHeaderDecorator {
3536
public MyCustomHeaders() {}
3637
@Override
37-
public Map<String, List<String>> getHeaderOverrides() {
38-
return new HashMap<String, List<String>>()
39-
{{
40-
put("first", Arrays.asList("1"));
41-
put("second", Arrays.asList("2.1", "2.2"));
42-
put("third", Arrays.asList("3"));
43-
}};
38+
public Map<String, List<String>> getHeaderOverrides(RequestContext context) {
39+
Map<String, List<String>> additionalHeaders = context.headers();
40+
additionalHeaders.put("first", Arrays.asList("1"));
41+
additionalHeaders.put("second", Arrays.asList("2.1", "2.2"));
42+
additionalHeaders.put("third", Arrays.asList("3"));
43+
return additionalHeaders;
4444
}
4545
}
4646
MyCustomHeaders myHeaders = new MyCustomHeaders();
@@ -68,24 +68,22 @@ public void testAddBlockedHeaders() throws ProtocolException {
6868
class MyCustomHeaders implements CustomHeaderDecorator {
6969
public MyCustomHeaders() {}
7070
@Override
71-
public Map<String, List<String>> getHeaderOverrides() {
72-
return new HashMap<String, List<String>>()
73-
{{
74-
put("first", Arrays.asList("1"));
75-
put("SplitSDKVersion", Arrays.asList("2.4"));
76-
put("SplitMachineip", Arrays.asList("xx"));
77-
put("splitMachineName", Arrays.asList("xx"));
78-
put("splitimpressionsmode", Arrays.asList("xx"));
79-
put("HOST", Arrays.asList("xx"));
80-
put("referrer", Arrays.asList("xx"));
81-
put("content-type", Arrays.asList("xx"));
82-
put("content-length", Arrays.asList("xx"));
83-
put("content-encoding", Arrays.asList("xx"));
84-
put("ACCEPT", Arrays.asList("xx"));
85-
put("keep-alive", Arrays.asList("xx"));
86-
put("x-fastly-debug", Arrays.asList("xx"));
87-
88-
}};
71+
public Map<String, List<String>> getHeaderOverrides(RequestContext context) {
72+
Map<String, List<String>> additionalHeaders = context.headers();
73+
additionalHeaders.put("first", Arrays.asList("1"));
74+
additionalHeaders.put("SplitSDKVersion", Arrays.asList("2.4"));
75+
additionalHeaders.put("SplitMachineip", Arrays.asList("xx"));
76+
additionalHeaders.put("splitMachineName", Arrays.asList("xx"));
77+
additionalHeaders.put("splitimpressionsmode", Arrays.asList("xx"));
78+
additionalHeaders.put("HOST", Arrays.asList("xx"));
79+
additionalHeaders.put("referrer", Arrays.asList("xx"));
80+
additionalHeaders.put("content-type", Arrays.asList("xx"));
81+
additionalHeaders.put("content-length", Arrays.asList("xx"));
82+
additionalHeaders.put("content-encoding", Arrays.asList("xx"));
83+
additionalHeaders.put("ACCEPT", Arrays.asList("xx"));
84+
additionalHeaders.put("keep-alive", Arrays.asList("xx"));
85+
additionalHeaders.put("x-fastly-debug", Arrays.asList("xx"));
86+
return additionalHeaders;
8987
}
9088
}
9189
MyCustomHeaders myHeaders = new MyCustomHeaders();
@@ -101,7 +99,7 @@ public void customDecoratorError() {
10199
class MyCustomHeaders implements CustomHeaderDecorator {
102100
public MyCustomHeaders() {}
103101
@Override
104-
public Map<String, List<String>> getHeaderOverrides() {
102+
public Map<String, List<String>> getHeaderOverrides(RequestContext context) {
105103
throw new RuntimeException();
106104
}
107105
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.split.client.impressions.Impression;
55
import io.split.client.impressions.ImpressionListener;
66
import io.split.client.impressions.ImpressionsManager;
7+
import io.split.client.dtos.RequestContext;
78
import io.split.integrations.IntegrationsConfig;
89
import org.junit.Assert;
910
import org.junit.Test;
@@ -241,7 +242,7 @@ public void IntegrationConfigAsyncNotNull() {
241242
public void checkUserCustomdHeaderDecorator() {
242243
CustomHeaderDecorator ucd = new CustomHeaderDecorator() {
243244
@Override
244-
public Map<String, List<String>> getHeaderOverrides() {
245+
public Map<String, List<String>> getHeaderOverrides(RequestContext context) {
245246
return null;
246247
}
247248
};

0 commit comments

Comments
 (0)