blob: bc7a0351d315d3965695a5929e7b9909e203d6d2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.aws.ddb;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.amazonaws.services.dynamodbv2.AbstractAmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.BatchGetItemRequest;
import com.amazonaws.services.dynamodbv2.model.BatchGetItemResult;
import com.amazonaws.services.dynamodbv2.model.ConsumedCapacity;
import com.amazonaws.services.dynamodbv2.model.CreateTableRequest;
import com.amazonaws.services.dynamodbv2.model.CreateTableResult;
import com.amazonaws.services.dynamodbv2.model.DeleteItemRequest;
import com.amazonaws.services.dynamodbv2.model.DeleteItemResult;
import com.amazonaws.services.dynamodbv2.model.DeleteTableRequest;
import com.amazonaws.services.dynamodbv2.model.DeleteTableResult;
import com.amazonaws.services.dynamodbv2.model.DescribeTableRequest;
import com.amazonaws.services.dynamodbv2.model.DescribeTableResult;
import com.amazonaws.services.dynamodbv2.model.GetItemRequest;
import com.amazonaws.services.dynamodbv2.model.GetItemResult;
import com.amazonaws.services.dynamodbv2.model.KeySchemaElement;
import com.amazonaws.services.dynamodbv2.model.KeysAndAttributes;
import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughputDescription;
import com.amazonaws.services.dynamodbv2.model.PutItemRequest;
import com.amazonaws.services.dynamodbv2.model.PutItemResult;
import com.amazonaws.services.dynamodbv2.model.QueryRequest;
import com.amazonaws.services.dynamodbv2.model.QueryResult;
import com.amazonaws.services.dynamodbv2.model.ResourceNotFoundException;
import com.amazonaws.services.dynamodbv2.model.ScanRequest;
import com.amazonaws.services.dynamodbv2.model.ScanResult;
import com.amazonaws.services.dynamodbv2.model.TableDescription;
import com.amazonaws.services.dynamodbv2.model.TableStatus;
import com.amazonaws.services.dynamodbv2.model.UpdateItemRequest;
import com.amazonaws.services.dynamodbv2.model.UpdateItemResult;
import com.amazonaws.services.dynamodbv2.model.UpdateTableRequest;
import com.amazonaws.services.dynamodbv2.model.UpdateTableResult;
public class AmazonDDBClientMock extends AbstractAmazonDynamoDB {
public static final long NOW = 1327709390233L;
DescribeTableRequest describeTableRequest;
CreateTableRequest createTableRequest;
UpdateTableRequest updateTableRequest;
DeleteTableRequest deleteTableRequest;
PutItemRequest putItemRequest;
UpdateItemRequest updateItemRequest;
DeleteItemRequest deleteItemRequest;
GetItemRequest getItemRequest;
BatchGetItemRequest batchGetItemRequest;
ScanRequest scanRequest;
QueryRequest queryRequest;
public AmazonDDBClientMock() {
}
@Override
public DescribeTableResult describeTable(DescribeTableRequest describeTableRequest) {
this.describeTableRequest = describeTableRequest;
String tableName = describeTableRequest.getTableName();
if ("activeTable".equals(tableName)) {
return tableWithStatus(TableStatus.ACTIVE);
} else if ("creatibleTable".equals(tableName) && createTableRequest != null) {
return tableWithStatus(TableStatus.ACTIVE);
} else if ("FULL_DESCRIBE_TABLE".equals(tableName)) {
return new DescribeTableResult().withTable(new TableDescription()
.withTableName(tableName)
.withTableStatus(TableStatus.ACTIVE)
.withCreationDateTime(new Date(NOW))
.withItemCount(100L)
.withKeySchema(new KeySchemaElement().withAttributeName("name"))
.withProvisionedThroughput(new ProvisionedThroughputDescription()
.withReadCapacityUnits(20L)
.withWriteCapacityUnits(10L))
.withTableSizeBytes(1000L));
}
throw new ResourceNotFoundException(tableName + " is missing");
}
private DescribeTableResult tableWithStatus(TableStatus active) {
return new DescribeTableResult().withTable(new TableDescription().withTableStatus(active));
}
@Override
public CreateTableResult createTable(CreateTableRequest createTableRequest) {
this.createTableRequest = createTableRequest;
return new CreateTableResult().withTableDescription(
new TableDescription().withTableStatus(TableStatus.CREATING));
}
@Override
public UpdateTableResult updateTable(UpdateTableRequest updateTableRequest) {
this.updateTableRequest = updateTableRequest;
return null;
}
@Override
public DeleteTableResult deleteTable(DeleteTableRequest deleteTableRequest) {
this.deleteTableRequest = deleteTableRequest;
return new DeleteTableResult().withTableDescription(new TableDescription()
.withProvisionedThroughput(new ProvisionedThroughputDescription())
.withTableName(deleteTableRequest.getTableName())
.withCreationDateTime(new Date(NOW))
.withItemCount(10L)
.withKeySchema(new ArrayList<KeySchemaElement>())
.withTableSizeBytes(20L)
.withTableStatus(TableStatus.ACTIVE));
}
@Override
public PutItemResult putItem(PutItemRequest putItemRequest) {
this.putItemRequest = putItemRequest;
return new PutItemResult().withAttributes(getAttributes());
}
private Map<String, AttributeValue> getAttributes() {
Map<String, AttributeValue> attributes = new HashMap<>();
attributes.put("attrName", new AttributeValue("attrValue"));
return attributes;
}
@Override
public UpdateItemResult updateItem(UpdateItemRequest updateItemRequest) {
this.updateItemRequest = updateItemRequest;
return new UpdateItemResult().withAttributes(getAttributes());
}
@Override
public DeleteItemResult deleteItem(DeleteItemRequest deleteItemRequest) {
this.deleteItemRequest = deleteItemRequest;
return new DeleteItemResult().withAttributes(getAttributes());
}
@Override
public GetItemResult getItem(GetItemRequest getItemRequest) {
this.getItemRequest = getItemRequest;
return new GetItemResult().withItem(getAttributes());
}
@SuppressWarnings("unchecked")
@Override
public BatchGetItemResult batchGetItem(BatchGetItemRequest batchGetItemRequest) {
this.batchGetItemRequest = batchGetItemRequest;
Map<String, List<Map<String, AttributeValue>>> responseMap = new HashMap<>();
List<Map<String, AttributeValue>> p = new ArrayList<>();
p.add(getAttributes());
responseMap.put("DOMAIN1", p);
Map<String, AttributeValue> keysMap = new HashMap<>();
keysMap.put("1", new AttributeValue("UNPROCESSED_KEY"));
Map<String, KeysAndAttributes> unprocessedKeys = new HashMap<>();
unprocessedKeys.put("DOMAIN1", new KeysAndAttributes().withKeys(keysMap));
return new BatchGetItemResult()
.withResponses(responseMap)
.withUnprocessedKeys(unprocessedKeys);
}
@SuppressWarnings("unchecked")
@Override
public ScanResult scan(ScanRequest scanRequest) {
this.scanRequest = scanRequest;
ConsumedCapacity consumed = new ConsumedCapacity();
consumed.setCapacityUnits(1.0);
Map<String, AttributeValue> lastEvaluatedKey = new HashMap<>();
lastEvaluatedKey.put("1", new AttributeValue("LAST_KEY"));
return new ScanResult()
.withConsumedCapacity(consumed)
.withCount(1)
.withItems(getAttributes())
.withScannedCount(10)
.withLastEvaluatedKey(lastEvaluatedKey);
}
@SuppressWarnings("unchecked")
@Override
public QueryResult query(QueryRequest queryRequest) {
this.queryRequest = queryRequest;
ConsumedCapacity consumed = new ConsumedCapacity();
consumed.setCapacityUnits(1.0);
Map<String, AttributeValue> lastEvaluatedKey = new HashMap<>();
lastEvaluatedKey.put("1", new AttributeValue("LAST_KEY"));
return new QueryResult()
.withConsumedCapacity(consumed)
.withCount(1)
.withItems(getAttributes())
.withLastEvaluatedKey(lastEvaluatedKey);
}
}