package com.softwaremill.common.backup;
import com.google.common.collect.ImmutableMap;
import com.xerox.amazonws.simpledb.Domain;
import com.xerox.amazonws.simpledb.SDBException;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.softwaremill.common.util.RichString;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.*;
/**
* @author Adam Warski (adam at warski dot org)
*/
public class StressTestBackupAndRestore extends AbstractBackupAndRestoreTest {
private Domain lotsOfDataDomain;
private Map<String, Map<String, Set<String>>> lotsOfData;
@BeforeClass
public void prepareData() throws SDBException {
lotsOfDataDomain = simpleDB.createDomain("backup_and_restore_lots").getResult();
lotsOfDataDomain.setCacheProvider(null);
Random random = new Random();
ImmutableMap.Builder<String, Map<String, Set<String>>> lotsOfDataBuilder = ImmutableMap.builder();
for (int i=0; i<112; i++) {
ImmutableMap.Builder<String, Set<String>> attributesBuilder = ImmutableMap.builder();
int numberOfAttributes = random.nextInt(10) + 1;
for (int j=0; j<numberOfAttributes; j++) {
Set<String> values = new HashSet<String>();
int numberOfValues = random.nextInt(10) + 1;
for (int k=0; k<numberOfValues; k++) {
values.add(RichString.generateRandom(random.nextInt(40) + 10));
}
String key = RichString.generateRandom(random.nextInt(10) + 10);
attributesBuilder = attributesBuilder.put(key, values);
}
lotsOfDataBuilder = lotsOfDataBuilder.put(UUID.randomUUID().toString() + RichString.generateRandom(5),
attributesBuilder.build());
}
lotsOfData = lotsOfDataBuilder.build();
populateDomainWithData(lotsOfDataDomain, lotsOfData);
}
@Test(enabled = false)
public void stressTestBackupAndRestore() throws IOException, SDBException {
// Given the data in simpleDataDomain and
StringWriter writer = new StringWriter();
// When
new DomainBackup(lotsOfDataDomain, writer).backup();
clearDomain(lotsOfDataDomain);
new DomainRestore(lotsOfDataDomain, new BufferedReader(new StringReader(writer.toString()))).restore();
// Then
assertDomainHasData(lotsOfDataDomain, lotsOfData);
}
@AfterClass(alwaysRun = true)
public void cleanup() throws SDBException {
simpleDB.deleteDomain(lotsOfDataDomain);
}
}