Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 28 additions & 64 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,40 +21,39 @@
<jdk.version>1.8</jdk.version>

<!-- build toolchain -->
<maven.assembly.plugin.version>3.1.1</maven.assembly.plugin.version>
<maven.compiler.plugin.version>3.8.0</maven.compiler.plugin.version>
<maven.dependency.plugin.version>3.1.1</maven.dependency.plugin.version>
<maven.enforcer.plugin.version>3.0.0-M2</maven.enforcer.plugin.version>
<maven.gpg.plugin.version>1.6</maven.gpg.plugin.version>
<maven.javadoc.plugin.version>3.0.1</maven.javadoc.plugin.version>
<maven.resources.plugin.version>3.1.0</maven.resources.plugin.version>
<maven.source.plugin.version>3.0.1</maven.source.plugin.version>
<maven.assembly.plugin.version>3.4.2</maven.assembly.plugin.version>
<maven.compiler.plugin.version>3.10.1</maven.compiler.plugin.version>
<maven.dependency.plugin.version>3.3.0</maven.dependency.plugin.version>
<maven.enforcer.plugin.version>3.1.0</maven.enforcer.plugin.version>
<maven.gpg.plugin.version>3.0.1</maven.gpg.plugin.version>
<maven.javadoc.plugin.version>3.4.0</maven.javadoc.plugin.version>
<maven.resources.plugin.version>3.3.0</maven.resources.plugin.version>
<maven.source.plugin.version>3.2.1</maven.source.plugin.version>
<maven.pmd.plugin.version>3.17.0</maven.pmd.plugin.version>

<!-- compile dependencies -->
<aws.java.sdk.version>2.3.5</aws.java.sdk.version>
<aws.java.sdk.version>2.17.243</aws.java.sdk.version>
<netty.version>[4.1.59.Final,)</netty.version>
<commons-logging.version>1.2</commons-logging.version>

<!-- test dependencies -->
<dynamodblocal.version>1.11.119</dynamodblocal.version>
<mockito.version>2.23.0</mockito.version>
<powermock.version>2.0.0</powermock.version>
<hamcrest.version>1.3</hamcrest.version>
<bytebuddy.version>1.9.3</bytebuddy.version>
<dynamodblocal.version>1.18.0</dynamodblocal.version>
<mockito.version>4.6.1</mockito.version>
<hamcrest.version>2.2</hamcrest.version>

<!-- test toolchain -->
<junit.version>4.13.1</junit.version>
<log4j-core.version>2.17.1</log4j-core.version>
<maven.surefire.version>3.0.0-M3</maven.surefire.version>
<maven.failsafe.version>3.0.0-M3</maven.failsafe.version>
<docker.maven.plugin.version>0.28.0</docker.maven.plugin.version>
<junit.version>4.13.2</junit.version>
<log4j-core.version>2.18.0</log4j-core.version>
<maven.surefire.version>3.0.0-M7</maven.surefire.version>
<maven.failsafe.version>3.0.0-M7</maven.failsafe.version>
<docker.maven.plugin.version>0.40.2</docker.maven.plugin.version>
<build.profile.id>dev</build.profile.id>
<integration-test.category>*/BasicLockClientTests.java,*/GetAllLocksTests.java,*/GetLocksByPartitionKeyTest.java,*/ConsistentLockDataStressTest.java</integration-test.category>

<!-- code quality tools -->
<maven.checkstyle.plugin.version>3.0.0</maven.checkstyle.plugin.version>
<spotbugs-maven-plugin.version>3.1.10</spotbugs-maven-plugin.version>
<jacoco.version>0.8.2</jacoco.version>
<maven.checkstyle.plugin.version>3.1.2</maven.checkstyle.plugin.version>
<spotbugs-maven-plugin.version>4.7.1.1</spotbugs-maven-plugin.version>
<jacoco.version>0.8.8</jacoco.version>
<jacoco.it.execution.data.file>${project.build.directory}/coverage-reports/jacoco-it.exec</jacoco.it.execution.data.file>
<jacoco.ut.execution.data.file>${project.build.directory}/coverage-reports/jacoco-ut.exec</jacoco.ut.execution.data.file>
<jacoco-aggregate-destFile>${project.build.directory}/coverage-reports/aggregate.exec</jacoco-aggregate-destFile>
Expand Down Expand Up @@ -133,11 +132,13 @@
<groupId>software.amazon.awssdk</groupId>
<artifactId>auth</artifactId>
<version>${aws.java.sdk.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>regions</artifactId>
<version>${aws.java.sdk.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
Expand All @@ -155,31 +156,6 @@
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<!--mockito-core pulls in 2.5 but powermock pulls in 2.4. exclude from powermock.-->
<groupId>org.objenesis</groupId>
<artifactId>objenesis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
Expand Down Expand Up @@ -219,7 +195,7 @@
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<artifactId>hamcrest</artifactId>
<version>${hamcrest.version}</version>
</dependency>
<dependency>
Expand All @@ -237,18 +213,6 @@
<artifactId>netty-handler</artifactId>
<version>${netty.version}</version>
</dependency>
<dependency>
<!--mockito-core pulls in 1.9.0 but powermock pulls in 1.9.3. force 1.9.3.-->
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy-agent</artifactId>
<version>${bytebuddy.version}</version>
</dependency>
<dependency>
<!--mockito-core pulls in 1.9.0 but powermock pulls in 1.9.3. force 1.9.3.-->
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>${bytebuddy.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
Expand Down Expand Up @@ -394,7 +358,10 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>3.8</version>
<version>${maven.pmd.plugin.version}</version>
<configuration>
<linkXRef>false</linkXRef>
</configuration>
<executions>
<execution>
<goals>
Expand Down Expand Up @@ -545,9 +512,6 @@
<port>${dynamodb-local.port}:${dynamodb-local.port}</port>
</ports>
<wait>
<http>
<url>${dynamodb-local.endpoint}/shell/</url>
</http>
<time>5000</time>
</wait>
</run>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ public AcquireLockOptionsBuilder withTimeUnit(final TimeUnit timeUnit) {
* @return a reference to this builder for fluent method chaining
*/
public AcquireLockOptionsBuilder withAdditionalAttributes(final Map<String, AttributeValue> additionalAttributes) {
this.additionalAttributes = additionalAttributes;
this.additionalAttributes = new HashMap<>(additionalAttributes);
return this;
}

Expand Down
7 changes: 2 additions & 5 deletions src/main/java/com/amazonaws/services/dynamodbv2/LockItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,7 @@
import java.io.Closeable;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
Expand Down Expand Up @@ -127,7 +124,7 @@ public Optional<ByteBuffer> getData() {
* @return The additional attributes that can optionally be stored alongside the lock.
*/
public Map<String, AttributeValue> getAdditionalAttributes() {
return this.additionalAttributes;
return Collections.unmodifiableMap(this.additionalAttributes);
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@
package com.amazonaws.services.dynamodbv2;

import static org.junit.Assert.assertEquals;
import static org.powermock.api.mockito.PowerMockito.when;
import static org.mockito.Mockito.when;

import java.io.IOException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
Expand All @@ -25,10 +28,10 @@

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Matchers;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.mockito.ArgumentMatchers;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;

import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
Expand All @@ -40,30 +43,35 @@
*
* @author <a href="mailto:[email protected]">Alexander Patrikalakis</a> 2017-07-13
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({AmazonDynamoDBLockClientTest.class, AmazonDynamoDBLockClientOptions.AmazonDynamoDBLockClientOptionsBuilder.class})
@RunWith(MockitoJUnitRunner.class)
public class AmazonDynamoDBLockClientOptionsTest {
DynamoDbClient dynamodb = PowerMockito.mock(DynamoDbClient.class);
DynamoDbClient dynamodb = Mockito.mock(DynamoDbClient.class);

@Test
public void testBuilder_whenGetLocalHostThrowsUnknownHostException_uuidCreateRandomIsCalled() throws UnknownHostException, InterruptedException {
final UUID uuid = AmazonDynamoDBLockClientTest.setOwnerNameToUuid();
AmazonDynamoDBLockClientOptions.AmazonDynamoDBLockClientOptionsBuilder builder = AmazonDynamoDBLockClientOptions.builder(dynamodb, "table")
.withLeaseDuration(2L)
.withHeartbeatPeriod(1L)
.withTimeUnit(TimeUnit.SECONDS)
.withPartitionKeyName("customer");
System.out.println(builder.toString());
//verifyStatic();
public void testBuilder_whenGetLocalHostThrowsUnknownHostException_uuidCreateRandomIsCalled() throws InterruptedException, IOException {
final UUID uuid = UUID.randomUUID();
try (MockedStatic<UUID> ignored = AmazonDynamoDBLockClientTest.setOwnerNameToUuid(uuid)) {
try (MockedStatic<InetAddress> ignored1 = AmazonDynamoDBLockClientTest.mockInet4Address()) {
AmazonDynamoDBLockClientOptions.AmazonDynamoDBLockClientOptionsBuilder builder = AmazonDynamoDBLockClientOptions.builder(dynamodb, "table")
.withLeaseDuration(2L)
.withHeartbeatPeriod(1L)
.withTimeUnit(TimeUnit.SECONDS)
.withPartitionKeyName("customer");
System.out.println(builder.toString());
//verifyStatic();

AmazonDynamoDBLockClientOptions options = builder.build();
AmazonDynamoDBLockClient client = new AmazonDynamoDBLockClient(options);
Map<String, AttributeValue> previousLockItem = new HashMap<>(3);
previousLockItem.put("ownerName", AttributeValue.builder().s("foobar").build());
previousLockItem.put("recordVersionNumber", AttributeValue.builder().s("oolala").build());
previousLockItem.put("leaseDuration", AttributeValue.builder().s("1").build());
when(dynamodb.getItem(Matchers.<GetItemRequest>any())).thenReturn(GetItemResponse.builder().item(previousLockItem).build());
LockItem lock = client.acquireLock(AcquireLockOptions.builder("asdf").build());
assertEquals(uuid.toString(), lock.getOwnerName());
AmazonDynamoDBLockClientOptions options = builder.build();
LockItem lock;
try (AmazonDynamoDBLockClient client = new AmazonDynamoDBLockClient(options)) {
Map<String, AttributeValue> previousLockItem = new HashMap<>(3);
previousLockItem.put("ownerName", AttributeValue.builder().s("foobar").build());
previousLockItem.put("recordVersionNumber", AttributeValue.builder().s("oolala").build());
previousLockItem.put("leaseDuration", AttributeValue.builder().s("1").build());
when(dynamodb.getItem(ArgumentMatchers.<GetItemRequest>any())).thenReturn(GetItemResponse.builder().item(previousLockItem).build());
lock = client.acquireLock(AcquireLockOptions.builder("asdf").build());
}
assertEquals(uuid.toString(), lock.getOwnerName());
}
}
}
}
Loading