use of org.qi4j.spi.entitystore.BackupRestore in project qi4j-sdk by Qi4j.
the class MigrationTest method testMigration.
@Test
public void testMigration() throws UnitOfWorkCompletionException, IOException, ActivationException, AssemblyException {
// Set up version 1
String id;
StringInputOutput data_v1 = new StringInputOutput();
{
SingletonAssembler v1 = new SingletonAssembler() {
@Override
public void assemble(ModuleAssembly module) throws AssemblyException {
MigrationTest.this.assemble(module);
module.layer().application().setVersion("1.0");
}
};
UnitOfWork uow = v1.module().newUnitOfWork();
TestEntity1_0 entity = uow.newEntity(TestEntity1_0.class);
entity.foo().set("Some value");
entity.fooManyAssoc().add(entity);
entity.fooAssoc().set(entity);
id = entity.identity().get();
uow.complete();
BackupRestore backupRestore = v1.module().findService(BackupRestore.class).get();
backupRestore.backup().transferTo(data_v1);
}
// Set up version 1.1
StringInputOutput data_v1_1 = new StringInputOutput();
{
SingletonAssembler v1_1 = new SingletonAssembler() {
@Override
public void assemble(ModuleAssembly module) throws AssemblyException {
MigrationTest.this.assemble(module);
module.layer().application().setVersion("1.1");
}
};
BackupRestore testData = v1_1.module().findService(BackupRestore.class).get();
data_v1.transferTo(testData.restore());
UnitOfWork uow = v1_1.module().newUnitOfWork();
TestEntity1_1 entity = uow.get(TestEntity1_1.class, id);
assertThat("Property has been renamed", entity.newFoo().get(), CoreMatchers.equalTo("Some value"));
assertThat("ManyAssociation has been renamed", entity.newFooManyAssoc().count(), CoreMatchers.equalTo(1));
assertThat("Association has been renamed", entity.newFooAssoc().get(), CoreMatchers.equalTo(entity));
uow.complete();
testData.backup().transferTo(data_v1_1);
}
// Set up version 2.0
{
SingletonAssembler v2_0 = new SingletonAssembler() {
@Override
public void assemble(ModuleAssembly module) throws AssemblyException {
MigrationTest.this.assemble(module);
module.layer().application().setVersion("2.0");
}
};
BackupRestore testData = v2_0.module().findService(BackupRestore.class).get();
// Test migration from 1.0 -> 2.0
{
data_v1.transferTo(testData.restore());
UnitOfWork uow = v2_0.module().newUnitOfWork();
TestEntity2_0 entity = uow.get(TestEntity2_0.class, id);
assertThat("Property has been created", entity.bar().get(), CoreMatchers.equalTo("Some value"));
assertThat("Custom Property has been created", entity.customBar().get(), CoreMatchers.equalTo("Hello Some value"));
assertThat("ManyAssociation has been renamed", entity.newFooManyAssoc().count(), CoreMatchers.equalTo(1));
assertThat("Association has been renamed", entity.newFooAssoc().get(), CoreMatchers.equalTo(entity));
uow.complete();
}
}
// Set up version 3.0
{
SingletonAssembler v3_0 = new SingletonAssembler() {
@Override
public void assemble(ModuleAssembly module) throws AssemblyException {
MigrationTest.this.assemble(module);
module.layer().application().setVersion("3.0");
}
};
BackupRestore testData = v3_0.module().findService(BackupRestore.class).get();
data_v1_1.transferTo(testData.restore());
// Test migration from 1.0 -> 3.0
{
data_v1.transferTo(testData.restore());
UnitOfWork uow = v3_0.module().newUnitOfWork();
org.qi4j.migration.moved.TestEntity2_0 entity = uow.get(org.qi4j.migration.moved.TestEntity2_0.class, id);
uow.complete();
}
}
}
Aggregations