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 java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import static com.google.common.collect.ImmutableSet.*;
import static org.joda.time.format.ISODateTimeFormat.*;
/**
* @author Adam Warski (adam at warski dot org)
*/
public class TestBackupAndRestore extends AbstractBackupAndRestoreTest {
private Domain simpleDataDomain;
private Domain dashedDomain;
private Map<String, Map<String, Set<String>>> simpleData;
@BeforeClass
public void prepareData() throws SDBException {
simpleDataDomain = simpleDB.createDomain("backup_and_restore_simple").getResult();
simpleDataDomain.setCacheProvider(null);
ImmutableMap.Builder<String, Map<String, Set<String>>> simpleDataBuilder = ImmutableMap.builder();
simpleData = simpleDataBuilder
.put("id1", ImmutableMap.<String, Set<String>>of(
"attr1", of("val1", "val2", "val3"),
"attr2", of("1234", "5678"),
"attr3", of("xxx", "yyy"),
"attr4", of("val1", "val2", "val3")))
.put(UUID.randomUUID().toString(), ImmutableMap.<String, Set<String>>of(
"date", of(dateTimeNoMillis().print(System.currentTimeMillis()), dateTimeNoMillis().print(System.currentTimeMillis() - 1234568L)),
"long", of("00000000012"),
"multilinetext", of("01abc\ndef\nxyz", "02asdahslkdhaslkdhaslkjdhaslkjhdalksjhdalksjhdal")))
.put(UUID.randomUUID().toString(), ImmutableMap.<String, Set<String>>of(
"locals", of("ąęśćżźćłó")))
.build();
populateDomainWithData(simpleDataDomain, simpleData);
makeConsistent(simpleDataDomain);
// --
dashedDomain = simpleDB.createDomain("backup-and-restore-simple").getResult();
dashedDomain.setCacheProvider(null);
}
@Test
public void testBackupAndRestoreSimple() throws IOException, SDBException {
// Given the data in simpleDataDomain and
StringWriter writer = new StringWriter();
// When
new DomainBackup(simpleDataDomain, writer).backup();
clearDomain(simpleDataDomain);
new DomainRestore(simpleDataDomain, new BufferedReader(new StringReader(writer.toString()))).restore();
// Then
assertDomainHasData(simpleDataDomain, simpleData);
}
@Test
public void testBackupAndRestoreDashed() throws IOException, SDBException {
// Given the data in simpleDataDomain and
StringWriter writer = new StringWriter();
// When
new DomainBackup(dashedDomain, writer).backup();
new DomainRestore(dashedDomain, new BufferedReader(new StringReader(writer.toString()))).restore();
// Then
}
@AfterClass(alwaysRun = true)
public void cleanup() throws SDBException {
simpleDB.deleteDomain(simpleDataDomain);
simpleDB.deleteDomain(dashedDomain);
}
}