From 01aa76147381e66befcdabcf7dd673b689712ac7 Mon Sep 17 00:00:00 2001 From: sburman Date: Tue, 31 Oct 2023 12:43:16 +0530 Subject: [PATCH] init --- src/main/java/com/sendgrid/BaseInterface.java | 22 +++++++++ src/test/java/com/sendgrid/SendGridTest.java | 46 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 0a812c19..7bcdd5d0 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -16,6 +16,10 @@ public abstract class BaseInterface implements SendGridAPI { private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; private static final int THREAD_POOL_SIZE = 8; + private static final Map allowedRegionsHostMap = Map.of( + "eu", "api.eu.sendgrid.com", + "global", "api.sendgrid.com" + ); private ExecutorService pool; @@ -336,4 +340,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\""); + } + } } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 2ac11fdb..28f55697 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -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"); + } }