package org.springframework.data.simpledb.repository;
import static org.junit.Assert.*;
import java.util.*;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.simpledb.domain.SimpleDbUser;
import org.springframework.data.simpledb.repository.BasicSimpleDbUserRepository;
import org.springframework.data.simpledb.repository.util.SimpleDbUserBuilder;
import org.springframework.data.simpledb.util.RandomValueGenerator;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:simpledb-consistent-repository-context.xml")
public class SimpleDBLimitationsTest {
public static final int MAX_SIMPLE_DB_ATTRIBUTE_LENGTH = 1024;
@Autowired
BasicSimpleDbUserRepository repository;
@After
public void tearDown() {
repository.deleteAll();
}
@Test
public void should_persist_max_simple_db_length_characters_long_string() {
String itemName = "FirstItem";
SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName);
user.setCoreField(RandomValueGenerator.generateStringOfLength(MAX_SIMPLE_DB_ATTRIBUTE_LENGTH));
repository.save(user);
SimpleDbUser foundUser = repository.findOne(user.getItemName());
assertNotNull(foundUser);
assertEquals(MAX_SIMPLE_DB_ATTRIBUTE_LENGTH, foundUser.getCoreField().length());
assertEquals(user.getCoreField(), foundUser.getCoreField());
}
@Test
public void should_persist_strings_longer_than_max_simple_db_length_chars() {
String itemName = "FirstItem";
SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName);
user.setCoreField(RandomValueGenerator.generateStringOfLength(MAX_SIMPLE_DB_ATTRIBUTE_LENGTH + 1));
repository.save(user);
SimpleDbUser foundUser = repository.findOne(user.getItemName());
assertNotNull(foundUser);
assertEquals(MAX_SIMPLE_DB_ATTRIBUTE_LENGTH + 1, foundUser.getCoreField().length());
assertEquals(user.getCoreField(), foundUser.getCoreField());
}
/* max 256 attributes in a amazon simpleDB request */
@Test
public void should_persist_array_serialized_into_string_longer_than_max_simple_db_length_chars() {
String itemName = "FirstItem";
int longArraySize = 512;
SimpleDbUser user = SimpleDbUserBuilder.createUserWithSampleAttributes(itemName);
final long[] longPrimitiveArray = RandomValueGenerator.generateArrayOfSize(longArraySize);
user.setPrimitiveArrayField(longPrimitiveArray);
repository.save(user);
final SimpleDbUser foundUser = repository.findOne(user.getItemName());
assertNotNull(foundUser);
assertEquals(longArraySize, foundUser.getPrimitiveArrayField().length);
assertTrue(Arrays.equals(user.getPrimitiveArrayField(), foundUser.getPrimitiveArrayField()));
}
}