Java源码示例:software.amazon.awssdk.services.dynamodb.model.GetItemRequest
示例1
@Test
public void getApplication() {
String userId = UUID.randomUUID().toString();
String applicationId = UUID.randomUUID().toString();
Map<String, AttributeValue> recordMap = keyMap(userId, applicationId);
GetItemResponse response = GetItemResponse.builder()
.item(recordMap)
.build();
when(principal.getName()).thenReturn(userId);
when(dynamodb.getItem(any(GetItemRequest.class))).thenReturn(response);
GetItemRequest expectedGetItemRequest = GetItemRequest.builder()
.tableName(TABLE_NAME)
.consistentRead(Boolean.TRUE)
.key(recordMap)
.build();
Application application = service.getApplication(applicationId);
ArgumentCaptor<GetItemRequest> getItemRequestArgumentCaptor = ArgumentCaptor.forClass(GetItemRequest.class);
verify(dynamodb).getItem(getItemRequestArgumentCaptor.capture());
assertThat(application.getApplicationId()).isEqualTo(applicationId);
assertThat(getItemRequestArgumentCaptor.getValue()).isEqualTo(expectedGetItemRequest);
}
示例2
@Test
public void testGetJob_Failure() throws Throwable {
String token = getToken(4);
JobTokenPayload tokenPayload = tokenManager.decodeToken(token);
Map<String, AttributeValue> primaryKey =
DynamoDBUtils.getPrimaryKeyFromToken(token, tokenPayload, maxShardId);
GetItemRequest getItemRequest =
GetItemRequest.builder()
.key(primaryKey)
.tableName(tableName)
.attributesToGet(Collections.singletonList(DynamoDBUtils.Attribute.JOB_SPEC.columnName))
.build();
CompletableFuture<GetItemResponse> ret = new CompletableFuture<>();
Exception exception = new Exception();
ret.completeExceptionally(exception);
when(ddbClient.getItem(getItemRequest)).thenReturn(ret);
CompletableFuture<Schedule> response = scheduleManager.getJob(token);
assertSame(getException(response), exception);
verify(ddbClient, times(1)).getItem(getItemRequest);
verifyNoMoreInteractions(ddbClient);
}
示例3
@Override
public CompletionStage<Map<Integer, Long>> findAll(String topic, GroupId groupId) {
var request = GetItemRequest.builder()
.tableName(tableName)
.consistentRead(true)
.key(toKey(topic, groupId))
.build();
return Mono.fromCompletionStage(() -> dynamoDB.getItem(request))
.<Map<Integer, Long>>handle((result, sink) -> {
try {
var positions = toPositions(result.item());
if (positions == null) {
sink.complete();
} else {
sink.next(positions);
}
} catch (Exception e) {
sink.error(e);
}
})
.log(this.getClass().getName(), Level.WARNING, SignalType.ON_ERROR)
.retryWhen(it -> it.delayElements(Duration.ofSeconds(1)))
.toFuture();
}
示例4
@Test
public void getEmptyBytes() {
Map<String, AttributeValue> itemMap = new HashMap<>();
itemMap.put("id", AttributeValue.builder().s("id123").build());
itemMap.put("b", EMPTY_BINARY);
GetItemResponse response = GetItemResponse.builder()
.item(itemMap)
.build();
when(mockDynamoDbClient.getItem(any(GetItemRequest.class))).thenReturn(response);
TestBean result = dynamoDbTable.getItem(r -> r.key(k -> k.partitionValue("id123")));
assertThat(result.getId()).isEqualTo("id123");
assertThat(result.getB()).isEqualTo(EMPTY_BYTES);
}
示例5
@Test
public void getEmptyString() {
Map<String, AttributeValue> itemMap = new HashMap<>();
itemMap.put("id", AttributeValue.builder().s("id123").build());
itemMap.put("s", EMPTY_STRING);
GetItemResponse response = GetItemResponse.builder()
.item(itemMap)
.build();
when(mockDynamoDbClient.getItem(any(GetItemRequest.class))).thenReturn(response);
TestBean result = dynamoDbTable.getItem(r -> r.key(k -> k.partitionValue("id123")));
assertThat(result.getId()).isEqualTo("id123");
assertThat(result.getS()).isEmpty();
}
示例6
@Test
public void generateRequest_consistentRead() {
FakeItem keyItem = createUniqueFakeItem();
GetItemOperation<FakeItem> getItemOperation =
GetItemOperation.create(GetItemEnhancedRequest.builder()
.key(k -> k.partitionValue(keyItem.getId()))
.consistentRead(true).build());
GetItemRequest request = getItemOperation.generateRequest(FakeItem.getTableSchema(),
PRIMARY_CONTEXT,
null);
Map<String, AttributeValue> expectedKeyMap = new HashMap<>();
expectedKeyMap.put("id", AttributeValue.builder().s(keyItem.getId()).build());
GetItemRequest expectedRequest = GetItemRequest.builder()
.tableName(TABLE_NAME)
.key(expectedKeyMap)
.consistentRead(true)
.build();
assertThat(request, is(expectedRequest));
}
示例7
@Test
public void generateRequest_partitionKeyOnly() {
FakeItem keyItem = createUniqueFakeItem();
GetItemOperation<FakeItem> getItemOperation =
GetItemOperation.create(GetItemEnhancedRequest.builder().key(k -> k.partitionValue(keyItem.getId())).build());
GetItemRequest request = getItemOperation.generateRequest(FakeItem.getTableSchema(),
PRIMARY_CONTEXT,
null);
Map<String, AttributeValue> expectedKeyMap = new HashMap<>();
expectedKeyMap.put("id", AttributeValue.builder().s(keyItem.getId()).build());
GetItemRequest expectedRequest = GetItemRequest.builder()
.tableName(TABLE_NAME)
.key(expectedKeyMap)
.build();
assertThat(request, is(expectedRequest));
}
示例8
@Test
public void generateRequest_partitionAndSortKey() {
FakeItemWithSort keyItem = createUniqueFakeItemWithSort();
GetItemOperation<FakeItemWithSort> getItemOperation =
GetItemOperation.create(GetItemEnhancedRequest.builder()
.key(k -> k.partitionValue(keyItem.getId())
.sortValue(keyItem.getSort()))
.build());
GetItemRequest request = getItemOperation.generateRequest(FakeItemWithSort.getTableSchema(),
PRIMARY_CONTEXT,
null);
Map<String, AttributeValue> expectedKeyMap = new HashMap<>();
expectedKeyMap.put("id", AttributeValue.builder().s(keyItem.getId()).build());
expectedKeyMap.put("sort", AttributeValue.builder().s(keyItem.getSort()).build());
GetItemRequest expectedRequest = GetItemRequest.builder()
.tableName(TABLE_NAME)
.key(expectedKeyMap)
.build();
assertThat(request, is(expectedRequest));
}
示例9
private ApplicationRecord loadApplication(final String applicationId) {
Map<String, AttributeValue> applicationMap = dynamodb.getItem(GetItemRequest.builder()
.tableName(tableName)
.consistentRead(Boolean.TRUE)
.key(toKeyRecord(applicationId))
.build()).item();
if (applicationMap == null || applicationMap.isEmpty()) {
throw new NotFoundApiException(new NotFoundException()
.errorCode("ApplicationNotFound")
.message(String.format("Application %s can not be found.", applicationId)));
}
return new ApplicationRecord(applicationMap);
}
示例10
@Test
public void getApplication_null_notFound() {
String userId = UUID.randomUUID().toString();
String applicationId = UUID.randomUUID().toString();
GetItemResponse response = GetItemResponse.builder().build();
when(principal.getName()).thenReturn(userId);
when(dynamodb.getItem(any(GetItemRequest.class))).thenReturn(response);
assertThatThrownBy(() -> service.getApplication(applicationId))
.isInstanceOf(NotFoundApiException.class);
}
示例11
@Test
public void getApplication_empty_notFound() {
String userId = UUID.randomUUID().toString();
String applicationId = UUID.randomUUID().toString();
GetItemResponse response = GetItemResponse.builder().item(new HashMap<>()).build();
when(principal.getName()).thenReturn(userId);
when(dynamodb.getItem(any(GetItemRequest.class))).thenReturn(response);
assertThatThrownBy(() -> service.getApplication(applicationId))
.isInstanceOf(NotFoundApiException.class);
}
示例12
@Test
public void deleteApplication() {
String userId = UUID.randomUUID().toString();
String applicationId = UUID.randomUUID().toString();
Long version = 1L;
Map<String, AttributeValue> recordMap = keyMap(userId, applicationId);
recordMap.put("version", AttributeValue.builder().n(version.toString()).build());
GetItemResponse response = GetItemResponse.builder()
.item(recordMap)
.build();
when(principal.getName()).thenReturn(userId);
when(dynamodb.getItem(any(GetItemRequest.class))).thenReturn(response);
Map<String, AttributeValue> expectedAttributeValueMap = new HashMap<>();
expectedAttributeValueMap.put(":v", AttributeValue.builder().n(version.toString()).build());
DeleteItemRequest expectedDeleteItemRequest = DeleteItemRequest.builder()
.tableName(TABLE_NAME)
.key(keyMap(userId, applicationId))
.conditionExpression("version = :v")
.expressionAttributeValues(expectedAttributeValueMap)
.build();
service.deleteApplication(applicationId);
ArgumentCaptor<DeleteItemRequest> deleteItemRequestArgumentCaptor = ArgumentCaptor.forClass(DeleteItemRequest.class);
verify(dynamodb).deleteItem(deleteItemRequestArgumentCaptor.capture());
DeleteItemRequest deleteItemRequest = deleteItemRequestArgumentCaptor.getValue();
assertThat(deleteItemRequest).isEqualTo(expectedDeleteItemRequest);
}
示例13
@Test
public void updateApplication_author() {
String userId = UUID.randomUUID().toString();
String applicationId = UUID.randomUUID().toString();
String author = UUID.randomUUID().toString();
Long version = 1L;
Map<String, AttributeValue> recordMap = keyMap(userId, applicationId);
recordMap.put("version", AttributeValue.builder().n(version.toString()).build());
GetItemResponse response = GetItemResponse.builder()
.item(recordMap)
.build();
Map<String, AttributeValue> updateMap = new HashMap<>();
updateMap.put(":nv", AttributeValue.builder().n("2").build());
updateMap.put(":v", AttributeValue.builder().n("1").build());
updateMap.put(":a", AttributeValue.builder().s(author).build());
when(principal.getName()).thenReturn(userId);
when(dynamodb.getItem(any(GetItemRequest.class))).thenReturn(response);
UpdateApplicationInput input = new UpdateApplicationInput().author(author);
UpdateItemRequest expectedUpdateItemRequest = UpdateItemRequest.builder()
.tableName(TABLE_NAME)
.key(keyMap(userId, applicationId))
.updateExpression("SET author = :a,version = :nv")
.expressionAttributeValues(updateMap)
.conditionExpression("version = :v")
.build();
Application application = service.updateApplication(input, applicationId);
ArgumentCaptor<UpdateItemRequest> updateItemRequestArgumentCaptor = ArgumentCaptor.forClass(UpdateItemRequest.class);
verify(dynamodb).updateItem(updateItemRequestArgumentCaptor.capture());
UpdateItemRequest updateItemRequest = updateItemRequestArgumentCaptor.getValue();
assertThat(updateItemRequest).isEqualTo(expectedUpdateItemRequest);
assertThat(application.getApplicationId()).isEqualTo(applicationId);
assertThat(application.getAuthor()).isEqualTo(author);
}
示例14
@Test
public void updateApplication_description() {
String userId = UUID.randomUUID().toString();
String applicationId = UUID.randomUUID().toString();
String description = UUID.randomUUID().toString();
Long version = 1L;
Map<String, AttributeValue> recordMap = keyMap(userId, applicationId);
recordMap.put("version", AttributeValue.builder().n(version.toString()).build());
GetItemResponse response = GetItemResponse.builder()
.item(recordMap)
.build();
Map<String, AttributeValue> updateMap = new HashMap<>();
updateMap.put(":nv", AttributeValue.builder().n("2").build());
updateMap.put(":v", AttributeValue.builder().n("1").build());
updateMap.put(":d", AttributeValue.builder().s(description).build());
when(principal.getName()).thenReturn(userId);
when(dynamodb.getItem(any(GetItemRequest.class))).thenReturn(response);
UpdateApplicationInput input = new UpdateApplicationInput().description(description);
UpdateItemRequest expectedUpdateItemRequest = UpdateItemRequest.builder()
.tableName(TABLE_NAME)
.key(keyMap(userId, applicationId))
.updateExpression("SET description = :d,version = :nv")
.expressionAttributeValues(updateMap)
.conditionExpression("version = :v")
.build();
Application application = service.updateApplication(input, applicationId);
ArgumentCaptor<UpdateItemRequest> updateItemRequestArgumentCaptor = ArgumentCaptor.forClass(UpdateItemRequest.class);
verify(dynamodb).updateItem(updateItemRequestArgumentCaptor.capture());
UpdateItemRequest updateItemRequest = updateItemRequestArgumentCaptor.getValue();
assertThat(updateItemRequest).isEqualTo(expectedUpdateItemRequest);
assertThat(application.getApplicationId()).isEqualTo(applicationId);
assertThat(application.getDescription()).isEqualTo(description);
}
示例15
@Test
public void updateApplication_homePageUrl() {
String userId = UUID.randomUUID().toString();
String applicationId = UUID.randomUUID().toString();
String homePageUrl = UUID.randomUUID().toString();
Long version = 1L;
Map<String, AttributeValue> recordMap = keyMap(userId, applicationId);
recordMap.put("version", AttributeValue.builder().n(version.toString()).build());
GetItemResponse response = GetItemResponse.builder()
.item(recordMap)
.build();
Map<String, AttributeValue> updateMap = new HashMap<>();
updateMap.put(":nv", AttributeValue.builder().n("2").build());
updateMap.put(":v", AttributeValue.builder().n("1").build());
updateMap.put(":h", AttributeValue.builder().s(homePageUrl).build());
when(principal.getName()).thenReturn(userId);
when(dynamodb.getItem(any(GetItemRequest.class))).thenReturn(response);
UpdateApplicationInput input = new UpdateApplicationInput().homePageUrl(homePageUrl);
UpdateItemRequest expectedUpdateItemRequest = UpdateItemRequest.builder()
.tableName(TABLE_NAME)
.key(keyMap(userId, applicationId))
.updateExpression("SET homePageUrl = :h,version = :nv")
.expressionAttributeValues(updateMap)
.conditionExpression("version = :v")
.build();
Application application = service.updateApplication(input, applicationId);
ArgumentCaptor<UpdateItemRequest> updateItemRequestArgumentCaptor = ArgumentCaptor.forClass(UpdateItemRequest.class);
verify(dynamodb).updateItem(updateItemRequestArgumentCaptor.capture());
UpdateItemRequest updateItemRequest = updateItemRequestArgumentCaptor.getValue();
assertThat(updateItemRequest).isEqualTo(expectedUpdateItemRequest);
assertThat(application.getApplicationId()).isEqualTo(applicationId);
assertThat(application.getHomePageUrl()).isEqualTo(homePageUrl);
}
示例16
@Override
public CompletableFuture<Schedule> getJob(String token) {
try {
JobTokenPayload tokenPayload = tokenManager.decodeToken(token);
Map<String, AttributeValue> primaryKey =
DynamoDBUtils.getPrimaryKeyFromToken(token, tokenPayload, maxShardId);
GetItemRequest getItemRequest =
GetItemRequest.builder()
.key(primaryKey)
.tableName(ddbConfig.getSchedulesTableName())
.attributesToGet(Collections.singletonList(Attribute.JOB_SPEC.columnName))
.build();
return ddbClient
.getItem(getItemRequest)
.thenApply(
item -> {
try {
return makeSchedule(item.item().get(Attribute.JOB_SPEC.columnName).s());
} catch (InvalidTokenException e) {
throw new RuntimeException(e);
}
});
} catch (InvalidTokenException ex) {
CompletableFuture<Schedule> future = new CompletableFuture<>();
future.completeExceptionally(ex);
return future;
}
}
示例17
@Test
public void testGetJob() throws Exception {
DyneinJobSpec jobSpec = getTestJobSpec(validToken, "test1");
Schedule schedule = jobSpecToSchedule(jobSpec);
JobTokenPayload tokenPayload = tokenManager.decodeToken(validToken);
Map<String, AttributeValue> primaryKey =
DynamoDBUtils.getPrimaryKeyFromToken(validToken, tokenPayload, maxShardId);
GetItemRequest getItemRequest =
GetItemRequest.builder()
.key(primaryKey)
.tableName(tableName)
.attributesToGet(Collections.singletonList(DynamoDBUtils.Attribute.JOB_SPEC.columnName))
.build();
when(ddbClient.getItem(getItemRequest))
.thenReturn(
CompletableFuture.completedFuture(
GetItemResponse.builder()
.item(
ImmutableMap.of(
DynamoDBUtils.Attribute.JOB_SPEC.columnName,
AttributeValue.builder().s(schedule.getJobSpec()).build()))
.build()));
CompletableFuture<Schedule> response = scheduleManager.getJob(validToken);
Assert.assertEquals(response.get(1000, TimeUnit.MILLISECONDS), schedule);
verify(ddbClient, times(1)).getItem(getItemRequest);
verifyNoMoreInteractions(ddbClient);
}
示例18
protected GetItemRequest getRequest(String name) {
Map<String, AttributeValue> key = new HashMap<>();
key.put(FRUIT_NAME_COL, AttributeValue.builder().s(name).build());
return GetItemRequest.builder()
.tableName(getTableName())
.key(key)
.attributesToGet(FRUIT_NAME_COL, FRUIT_DESC_COL)
.build();
}
示例19
public static GetItemRequest createGetRequest(String table, String keyValue, String rangeValue) {
Map<String, AttributeValue> key = new HashMap<>();
key.put(KEY_NAME, AttributeValue.builder().s(keyValue).build());
key.put(RANGE_NAME, AttributeValue.builder().s(rangeValue).build());
return GetItemRequest.builder()
.tableName(table)
.key(key)
.attributesToGet(PAYLOAD_NAME)
.build();
}
示例20
@Test
void normal() {
server.enqueue(HttpResponse.of(HttpStatus.OK));
GetItemResponse response =
dynamoDbAsync
.getItem(GetItemRequest.builder().tableName("test").key(ImmutableMap.of()).build())
.join();
assertThat(response.sdkHttpResponse().isSuccessful()).isTrue();
AggregatedHttpRequest request = server.takeRequest().request();
assertThat(request.headers().get(HttpHeaderNames.USER_AGENT)).contains("http/ArmeriaAsync");
}
示例21
private void getItemAndAssertValues(DynamoDbClient client) {
Map<String, AttributeValue> item =
client.getItem(GetItemRequest.builder()
.tableName(TABLE_NAME)
.key(Collections.singletonMap(HASH_KEY_NAME, AttributeValue.builder()
.s(HASH_KEY_VALUE)
.build()))
.build())
.item();
assertEquals(HASH_KEY_VALUE, item.get(HASH_KEY_NAME).s());
assertEquals(ATTRIBUTE_FOO_VALUE, item.get(ATTRIBUTE_FOO).s());
}
示例22
@Override
public GetItemRequest generateRequest(TableSchema<T> tableSchema,
OperationContext context,
DynamoDbEnhancedClientExtension extension) {
if (!TableMetadata.primaryIndexName().equals(context.indexName())) {
throw new IllegalArgumentException("GetItem cannot be executed against a secondary index.");
}
return GetItemRequest.builder()
.tableName(context.tableName())
.key(this.request.key().keyMap(tableSchema, context.indexName()))
.consistentRead(this.request.consistentRead())
.build();
}
示例23
@Test
public void getServiceCall_makesTheRightCallAndReturnsResponse() {
FakeItem keyItem = createUniqueFakeItem();
GetItemOperation<FakeItem> getItemOperation =
GetItemOperation.create(GetItemEnhancedRequest.builder().key(k -> k.partitionValue(keyItem.getId())).build());
GetItemRequest getItemRequest = GetItemRequest.builder().tableName(TABLE_NAME).build();
GetItemResponse expectedResponse = GetItemResponse.builder().build();
when(mockDynamoDbClient.getItem(any(GetItemRequest.class))).thenReturn(expectedResponse);
GetItemResponse response = getItemOperation.serviceCall(mockDynamoDbClient).apply(getItemRequest);
assertThat(response, sameInstance(expectedResponse));
verify(mockDynamoDbClient).getItem(getItemRequest);
}
示例24
@Test
public void generateRequest_withExtension_doesNotModifyKey() {
FakeItem baseFakeItem = createUniqueFakeItem();
Map<String, AttributeValue> keyMap = FakeItem.getTableSchema().itemToMap(baseFakeItem, singletonList("id"));
GetItemOperation<FakeItem> getItemOperation =
GetItemOperation.create(GetItemEnhancedRequest.builder().key(k -> k.partitionValue(baseFakeItem.getId())).build());
GetItemRequest request = getItemOperation.generateRequest(FakeItem.getTableSchema(),
PRIMARY_CONTEXT,
mockDynamoDbEnhancedClientExtension);
assertThat(request.key(), is(keyMap));
verify(mockDynamoDbEnhancedClientExtension, never()).beforeWrite(any(DynamoDbExtensionContext.BeforeWrite.class));
}
示例25
@Test
public void ddbRequest_shouldModifyRequest() {
GetItemRequest getItemRequest = GetItemRequest.builder().build();
SdkRequest sdkRequest = interceptor.modifyRequest(() -> getItemRequest, new ExecutionAttributes());
RequestOverrideConfiguration requestOverrideConfiguration = sdkRequest.overrideConfiguration().get();
assertThat(requestOverrideConfiguration.apiNames()
.stream()
.filter(a -> a.name()
.equals("hll") &&
a.version().equals("ddb-enh")).findAny())
.isPresent();
}
示例26
public static void getDynamoDBItem(DynamoDbClient ddb,String tableName,String key,String keyVal ) {
HashMap<String,AttributeValue> keyToGet = new HashMap<String,AttributeValue>();
keyToGet.put(key, AttributeValue.builder()
.s(keyVal).build());
// Create a GetItemRequest object
GetItemRequest request = GetItemRequest.builder()
.key(keyToGet)
.tableName(tableName)
.build();
try {
Map<String,AttributeValue> returnedItem = ddb.getItem(request).item();
if (returnedItem != null) {
Set<String> keys = returnedItem.keySet();
System.out.println("Table Attributes: \n");
for (String key1 : keys) {
System.out.format("%s: %s\n", key1, returnedItem.get(key1).toString());
}
} else {
System.out.format("No item found with the key %s!\n", key);
}
} catch (DynamoDbException e) {
System.err.println(e.getMessage());
System.exit(1);
}
// snippet-end:[dynamodb.java2.get_item.main]
}
示例27
private Map<String, AttributeValue> getLockItem(String lockName) {
GetItemRequest request = GetItemRequest.builder()
.tableName(TABLE_NAME)
.key(Collections.singletonMap(ID, AttributeValue.builder()
.s(lockName)
.build()))
.build();
GetItemResponse response = dynamodb.getItem(request);
return response.item();
}
示例28
@Test
public void testGetLeaseTimesOut() throws Exception {
TimeoutException te = setRuleForDependencyTimeout();
when(dynamoDbClient.getItem(any(GetItemRequest.class))).thenReturn(mockGetItemFuture);
when(mockGetItemFuture.get(anyLong(), any())).thenThrow(te);
when(leaseSerializer.getDynamoHashKey(anyString())).thenReturn(Collections.emptyMap());
verifyCancel(mockGetItemFuture, () -> leaseRefresher.getLease("test"));
}
示例29
@Override
public Function<GetItemRequest, GetItemResponse> serviceCall(DynamoDbClient dynamoDbClient) {
return dynamoDbClient::getItem;
}
示例30
@Override
public Function<GetItemRequest, CompletableFuture<GetItemResponse>> asyncServiceCall(
DynamoDbAsyncClient dynamoDbAsyncClient) {
return dynamoDbAsyncClient::getItem;
}