Skip to content

Commit

Permalink
feat: Add data residency for eu and global regions
Browse files Browse the repository at this point in the history
Merging in feature branch
  • Loading branch information
shrutiburman authored Nov 1, 2023
1 parent 146bfee commit 36a576c
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 0 deletions.
25 changes: 25 additions & 0 deletions src/main/java/com/sendgrid/BaseInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ public abstract class BaseInterface implements SendGridAPI {
private static final int RATE_LIMIT_RESPONSE_CODE = 429;
private static final int THREAD_POOL_SIZE = 8;

private static final Map<String, String> allowedRegionsHostMap;
static {
//todo: change this to Map.of() when we've moved on from Java 8
allowedRegionsHostMap = new HashMap<>();
allowedRegionsHostMap.put("eu", "api.eu.sendgrid.com");
allowedRegionsHostMap.put("global", "api.sendgrid.com");
}
private ExecutorService pool;

/**
Expand Down Expand Up @@ -336,4 +343,22 @@ public void run() {
}
});
}

/*
* Client libraries contain setters for specifying region/edge.
* This allows support global and eu regions only. This set will likely expand in the future.
* Global should be the default
* Global region means the message should be sent through:
* HTTP: api.sendgrid.com
* EU region means the message should be sent through:
* HTTP: api.eu.sendgrid.com
*/
public void setDataResidency(String region){
if (allowedRegionsHostMap.containsKey(region)){
this.host = allowedRegionsHostMap.get(region);
}
else{
throw new IllegalArgumentException("region can only be \"eu\" or \"global\"");
}
}
}
46 changes: 46 additions & 0 deletions src/test/java/com/sendgrid/SendGridTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3242,4 +3242,50 @@ public void test_request_headers_override_sendgrid_object_headers() throws IOExc
sg.api(request);
verify(client).api(argThat((Request req) -> req.getHeaders().get("set-on-both").equals("456")));
}

@Test
public void testSetResidency_happy_path_eu() {
SendGrid sg = new SendGrid(SENDGRID_API_KEY);
sg.setDataResidency("eu");
Assert.assertEquals(sg.getHost(), "api.eu.sendgrid.com");
}
@Test
public void testSetResidency_happy_path_global() {
SendGrid sg = new SendGrid(SENDGRID_API_KEY);
sg.setDataResidency("global");
Assert.assertEquals(sg.getHost(), "api.eu.sendgrid.com");
}


@Test
public void testSetResidency_override_host() {
SendGrid sg = new SendGrid(SENDGRID_API_KEY);
sg.setHost("api.new.com");
sg.setDataResidency("eu");
Assert.assertEquals(sg.getHost(), "api.eu.sendgrid.com");
}

@Test
public void testsetResidency_override_data_residency() {
SendGrid sg = new SendGrid(SENDGRID_API_KEY);
sg.setDataResidency("eu");
sg.setHost("api.new.com");
Assert.assertEquals(sg.getHost(), "api.new.com");
}

@Test (expected = IllegalArgumentException.class)
public void testsetResidency_incorrect_region() {
SendGrid sg = new SendGrid(SENDGRID_API_KEY);
sg.setDataResidency("foo");
}
@Test (expected = IllegalArgumentException.class)
public void testsetResidency_null_region(){
SendGrid sg = new SendGrid(SENDGRID_API_KEY);
sg.setDataResidency("");
}
@Test
public void testsetResidency_default_region() {
SendGrid sg = new SendGrid(SENDGRID_API_KEY);
Assert.assertEquals(sg.getHost(), "api.sendgrid.com");
}
}

0 comments on commit 36a576c

Please sign in to comment.