diff --git a/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/Worker.java b/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/Worker.java index f6af006d..3bad9c5a 100644 --- a/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/Worker.java +++ b/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/Worker.java @@ -32,6 +32,7 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import com.amazonaws.regions.Regions; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -1163,6 +1164,7 @@ public class Worker implements Runnable { private ShardPrioritization shardPrioritization; @Setter @Accessors(fluent = true) private IKinesisProxy kinesisProxy; + @Setter @Accessors(fluent = true) private WorkerStateChangeListener workerStateChangeListener; @VisibleForTesting @@ -1331,6 +1333,9 @@ public class Worker implements Runnable { } else if (StringUtils.isNotEmpty(region)) { LOG.debug("The region for the client has been set to " + region); builder.withRegion(region); + } else { + LOG.debug("Endpoint URL and region are not set, setting region to us-east-1"); + builder.withRegion(Regions.US_EAST_1); } return (AmazonWebServiceClient) builder.build(); } diff --git a/src/test/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/WorkerTest.java b/src/test/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/WorkerTest.java index 0205b03a..6b2eae69 100644 --- a/src/test/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/WorkerTest.java +++ b/src/test/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/WorkerTest.java @@ -19,7 +19,6 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.isA; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.greaterThanOrEqualTo; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -67,8 +66,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicBoolean; -import com.amazonaws.ClientConfiguration; -import com.amazonaws.client.builder.AwsClientBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hamcrest.Condition; @@ -80,13 +77,17 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; +import com.amazonaws.ClientConfiguration; +import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.regions.RegionUtils; +import com.amazonaws.regions.Regions; import com.amazonaws.services.cloudwatch.AmazonCloudWatch; import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; @@ -1646,7 +1647,7 @@ public class WorkerTest { IRecordProcessorFactory recordProcessorFactory = mock(IRecordProcessorFactory.class); final String endpoint = "TestEndpoint"; KinesisClientLibConfiguration config = new KinesisClientLibConfiguration("TestApp", null, null, null) - .withRegionName("us-west-2") + .withRegionName(Regions.US_WEST_2.getName()) .withKinesisEndpoint(endpoint) .withDynamoDBEndpoint(endpoint); @@ -1672,7 +1673,7 @@ public class WorkerTest { @Test public void testBuilderSetRegionToClient() { IRecordProcessorFactory recordProcessorFactory = mock(IRecordProcessorFactory.class); - String region = "us-west-2"; + String region = Regions.US_WEST_2.getName(); KinesisClientLibConfiguration config = new KinesisClientLibConfiguration("TestApp", null, null, null) .withRegionName(region); @@ -1702,6 +1703,7 @@ public class WorkerTest { IRecordProcessorFactory recordProcessorFactory = mock(IRecordProcessorFactory.class); KinesisClientLibConfiguration config = new KinesisClientLibConfiguration("TestApp", null, null, null); Worker.Builder builder = spy(new Worker.Builder().recordProcessorFactory(recordProcessorFactory).config(config)); + ArgumentCaptor builderCaptor = ArgumentCaptor.forClass(AwsClientBuilder.class); assertNull(builder.getKinesisClient()); assertNull(builder.getDynamoDBClient()); @@ -1714,28 +1716,36 @@ public class WorkerTest { assertTrue(builder.getCloudWatchClient() instanceof AmazonCloudWatch); verify(builder, times(3)).createClient( - any(AwsClientBuilder.class), eq(null), any(ClientConfiguration.class), eq(null), eq(null)); + builderCaptor.capture(), eq(null), any(ClientConfiguration.class), eq(null), eq(null)); + + builderCaptor.getAllValues().forEach(clientBuilder -> { + assertTrue(clientBuilder.getRegion().equals(Regions.US_EAST_1.getName())); + }); } @Test public void testBuilderGenerateClientsWithRegion() { IRecordProcessorFactory recordProcessorFactory = mock(IRecordProcessorFactory.class); - String region = "us-west-2"; + String region = Regions.US_WEST_2.getName(); KinesisClientLibConfiguration config = new KinesisClientLibConfiguration("TestApp", null, null, null) .withRegionName(region); + ArgumentCaptor builderCaptor = ArgumentCaptor.forClass(AwsClientBuilder.class); Worker.Builder builder = spy(new Worker.Builder()); builder.recordProcessorFactory(recordProcessorFactory).config(config).build(); verify(builder, times(3)).createClient( - any(AwsClientBuilder.class), eq(null), any(ClientConfiguration.class), eq(null), eq(region)); + builderCaptor.capture(), eq(null), any(ClientConfiguration.class), eq(null), eq(region)); + builderCaptor.getAllValues().forEach(clientBuilder -> { + assertTrue(clientBuilder.getRegion().equals(region)); + }); } @Test public void testBuilderGenerateClientsWithEndpoint() { IRecordProcessorFactory recordProcessorFactory = mock(IRecordProcessorFactory.class); - String region = "us-west-2"; + String region = Regions.US_WEST_2.getName(); String endpointUrl = "TestEndpoint"; KinesisClientLibConfiguration config = new KinesisClientLibConfiguration("TestApp", null, null, null) .withRegionName(region).withKinesisEndpoint(endpointUrl).withDynamoDBEndpoint(endpointUrl);