/**
* Copyright (c) 2006-2011 Floggy Open Source Group. All rights reserved.
*
* Licensed 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 net.sourceforge.floggy.persistence.fr2422928;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.microemu.MIDletBridge;
import org.microemu.MicroEmulator;
import net.sourceforge.floggy.persistence.FloggyBaseTest;
import net.sourceforge.floggy.persistence.FloggyException;
import net.sourceforge.floggy.persistence.RMSMemoryMicroEmulator;
import net.sourceforge.floggy.persistence.impl.PersistableMetadataManager;
import net.sourceforge.floggy.persistence.impl.RecordStoreManager;
import net.sourceforge.floggy.persistence.migration.Enumeration;
import net.sourceforge.floggy.persistence.migration.FieldPersistableInfo;
import net.sourceforge.floggy.persistence.migration.MigrationManager;
/**
* DOCUMENT ME!
*
* @author <a href="mailto:thiago.moreira@floggy.org">Thiago Moreira</a>
* @version $Revision$
*/
public abstract class FR2422928AbstractVersionTest extends FloggyBaseTest {
/**
* DOCUMENT ME!
*/
protected MicroEmulator emulator;
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public abstract String getVersion();
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testFreezedClassIteration() throws Exception {
Hashtable properties = new Hashtable();
properties.put(MigrationManager.MIGRATE_FROM_PREVIOUS_1_3_0_VERSION,
Boolean.TRUE);
properties.put(MigrationManager.ITERATION_MODE, Boolean.TRUE);
Enumeration enumeration =
MigrationManager.getInstance().start(Freezed.class, properties);
assertEquals(2, enumeration.getSize());
if (enumeration.hasMoreElements()) {
Hashtable data = enumeration.nextElement();
assertNull(data.get("uuid"));
assertNull(data.get("deadline"));
assertNull(data.get("description"));
assertNull(data.get("nested"));
assertEquals(0, ((Short) data.get("code")).shortValue());
}
if (enumeration.hasMoreElements()) {
Hashtable data = enumeration.nextElement();
assertEquals(Freezed.UUID, data.get("uuid"));
assertEquals(Freezed.DEADLINE, data.get("deadline"));
assertEquals(Freezed.DESCRIPTION, data.get("description"));
FieldPersistableInfo freezedInfo =
(FieldPersistableInfo) data.get("nested");
Freezed nested = new Freezed();
manager.load(nested, freezedInfo.getId());
assertEquals(Freezed.NESTED, nested);
assertEquals(Freezed.CODE, ((Short) data.get("code")).shortValue());
}
}
/**
* DOCUMENT ME!
*/
public void testGetRMSBasedMetadata() {
assertNull(PersistableMetadataManager.getRMSBasedMetadata(
FR2422928.class.getName()));
assertNull(PersistableMetadataManager.getRMSBasedMetadata(
Freezed.class.getName()));
}
/**
* DOCUMENT ME!
*/
public void testGetRMSVersion() {
assertEquals(getVersion(), PersistableMetadataManager.getRMSVersion());
}
/**
* DOCUMENT ME!
*/
public void testNoMigrationExecution() {
try {
manager.find(Freezed.class, null, null);
fail("Should throw a exception because no migration was made!");
} catch (Exception ex) {
assertEquals(ex.getClass(), FloggyException.class);
}
}
/**
* DOCUMENT ME!
*/
public void testNotThrowExceptionWhenMigratingFromPreviousVersion() {
Hashtable properties = new Hashtable();
properties.put(MigrationManager.MIGRATE_FROM_PREVIOUS_1_3_0_VERSION,
Boolean.TRUE);
try {
Enumeration enumeration =
MigrationManager.getInstance().start(FR2422928.class, properties);
assertNotNull(enumeration);
} catch (Exception ex) {
fail(ex.getMessage());
}
}
/**
* DOCUMENT ME!
*/
public void testQuickMigration() {
MigrationManager manager = MigrationManager.getInstance();
List notMigratedClasses = Arrays.asList(manager.getNotMigratedClasses());
assertTrue(notMigratedClasses.contains(Freezed.class.getName()));
try {
manager.quickMigration(Freezed.class);
notMigratedClasses = Arrays.asList(manager.getNotMigratedClasses());
assertFalse(notMigratedClasses.contains(Freezed.class.getName()));
} catch (Exception ex) {
fail(ex.getMessage());
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
public void testQuickMigrationOfAll() throws Exception {
MigrationManager manager = MigrationManager.getInstance();
String[] notMigratedClasses = manager.getNotMigratedClasses();
for (int i = 0; i < notMigratedClasses.length; i++) {
String className = notMigratedClasses[i];
manager.quickMigration(Class.forName(className));
}
notMigratedClasses = manager.getNotMigratedClasses();
assertNotNull(notMigratedClasses);
assertEquals(0, notMigratedClasses.length);
}
/**
* DOCUMENT ME!
*/
public void testThrowExceptionWhenMigratingFromPreviousVersion() {
try {
MigrationManager.getInstance().start(FR2422928.class, null);
fail(
"Should throw a exception because the property MigrationManager.MIGRATE_FROM_PREVIOUS_FLOGGY_VERSION is not set to true!");
} catch (Exception ex) {
assertEquals(ex.getClass(), FloggyException.class);
}
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
protected void setUp() throws Exception {
emulator = MIDletBridge.getMicroEmulator();
FileUtils.forceMkdir(new File("target/fr2422928/rms/" + getVersion()));
IOUtils.copy(new FileInputStream("src/test/rms/" + getVersion()
+ "/FloggyProperties.rms"),
new FileOutputStream("target/fr2422928/rms/" + getVersion()
+ "/FloggyProperties.rms"));
IOUtils.copy(new FileInputStream("src/test/rms/" + getVersion()
+ "/FR2422928-284317062.rms"),
new FileOutputStream("target/fr2422928/rms/" + getVersion()
+ "/FR2422928-284317062.rms"));
IOUtils.copy(new FileInputStream("src/test/rms/" + getVersion()
+ "/Freezed-1739440490.rms"),
new FileOutputStream("target/fr2422928/rms/" + getVersion()
+ "/Freezed-1739440490.rms"));
MIDletBridge.setMicroEmulator(new RMSMemoryMicroEmulator(
"target/fr2422928/rms/" + getVersion()));
PersistableMetadataManager.init();
RecordStoreManager.reset();
}
/**
* DOCUMENT ME!
*
* @throws Exception DOCUMENT ME!
*/
protected void tearDown() throws Exception {
MIDletBridge.setMicroEmulator(emulator);
PersistableMetadataManager.init();
}
}