From ef2f79f1a20e9229736fedc7c7e27e8ebf032c99 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Fri, 1 Dec 2006 05:02:37 +0000 Subject: Add Storable to CorruptEncodingException when loading from index. --- pom.xml | 2 +- .../com/amazon/carbonado/layout/TestLayout.java | 51 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e2592a6..9339634 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ com.amazon.carbonado carbonado - 1.1-BETA5 + 1.1-BETA6 test diff --git a/src/test/java/com/amazon/carbonado/layout/TestLayout.java b/src/test/java/com/amazon/carbonado/layout/TestLayout.java index f1edef3..98df0ee 100644 --- a/src/test/java/com/amazon/carbonado/layout/TestLayout.java +++ b/src/test/java/com/amazon/carbonado/layout/TestLayout.java @@ -36,6 +36,7 @@ import org.cojen.util.BeanPropertyAccessor; import org.cojen.util.ClassInjector; import com.amazon.carbonado.adapter.YesNoAdapter; +import com.amazon.carbonado.CorruptEncodingException; import com.amazon.carbonado.PrimaryKey; import com.amazon.carbonado.Repository; import com.amazon.carbonado.Storable; @@ -46,6 +47,8 @@ import com.amazon.carbonado.info.StorableIntrospector; import com.amazon.carbonado.info.StorableProperty; import com.amazon.carbonado.info.StorablePropertyAdapter; +import com.amazon.carbonado.repo.sleepycat.BDBRepositoryBuilder; + import com.amazon.carbonado.stored.FileInfo; import com.amazon.carbonado.stored.StorableDateIndex; import com.amazon.carbonado.stored.StorableTestBasic; @@ -747,6 +750,54 @@ public class TestLayout extends TestCase { } } + public void testCorruption() throws Exception { + // Forces corruption by deleting layout + // record. CorruptEncodingException should include Storable. + + // Create a persistent repository. + mRepository.close(); + BDBRepositoryBuilder builder = + (BDBRepositoryBuilder) TestUtilities.newTempRepositoryBuilder(); + System.out.println(builder.getEnvironmentHome()); + builder.setLogInMemory(false); + mRepository = builder.build(); + + Class type = + defineStorable(TEST_STORABLE_NAME, 0, TypeDesc.INT); + + StorableTestMinimal test = mRepository.storageFor(type).prepare(); + test.setId(1); + test.insert(); + + Class type2 = + defineStorable(TEST_STORABLE_NAME, 1, TypeDesc.INT); + + StorableTestMinimal test2 = mRepository.storageFor(type2).prepare(); + test2.setId(2); + type2.getMethod("setProp0", int.class).invoke(test2, 10); + test2.insert(); + + // Close and re-open. + mRepository.close(); + mRepository = builder.build(); + + test = mRepository.storageFor(type).prepare(); + test.setId(1); + test.load(); + + // Blow away layout data. + mRepository.storageFor(StoredLayout.class).query().deleteAll(); + + test2 = mRepository.storageFor(type2).prepare(); + test2.setId(2); + try { + test2.load(); + fail(); + } catch (CorruptEncodingException e) { + assertEquals(test2, e.getStorableWithPrimaryKey()); + } + } + private void compareInfo(StorableInfo expected, StorableInfo actual) { Map expectedProps = expected.getAllProperties(); Map actualProps = actual.getAllProperties(); -- cgit v1.2.3