From 608319e9fadb79dbcf828a175fa7a6c34bafdc26 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Fri, 18 Feb 2011 17:38:13 +0000 Subject: Add BDB verify support. --- .../java/com/amazon/carbonado/TestVerifyBDB.java | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 src/test/java/com/amazon/carbonado/TestVerifyBDB.java (limited to 'src/test/java') diff --git a/src/test/java/com/amazon/carbonado/TestVerifyBDB.java b/src/test/java/com/amazon/carbonado/TestVerifyBDB.java new file mode 100644 index 0000000..d6bf406 --- /dev/null +++ b/src/test/java/com/amazon/carbonado/TestVerifyBDB.java @@ -0,0 +1,139 @@ +/* + * Copyright 2011 Amazon Technologies, Inc. or its affiliates. + * Amazon, Amazon.com and Carbonado are trademarks or registered trademarks + * of Amazon Technologies, Inc. or its affiliates. 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 com.amazon.carbonado; + +import java.io.File; +import java.io.RandomAccessFile; + +import java.util.*; + +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import com.amazon.carbonado.repo.sleepycat.BDBRepositoryBuilder; +import com.amazon.carbonado.repo.sleepycat.CheckpointCapability; + +import com.amazon.carbonado.stored.StorableTestBasic; + +/** + * + * + * @author Brian S O'Neill + */ +public class TestVerifyBDB extends TestCase { + public static void main(String[] args) { + junit.textui.TestRunner.run(suite()); + } + + public static TestSuite suite() { + TestSuite suite = new TestSuite(); + suite.addTestSuite(TestVerifyBDB.class); + return suite; + } + + private List mTempDirs = new ArrayList(); + + protected void setUp() throws Exception { + super.setUp(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + if (mTempDirs != null) { + for (File dir : mTempDirs) { + TestUtilities.deleteTempDir(dir); + } + } + } + + public void testVerify() throws Exception { + File dir = makeTempDir(); + BDBRepositoryBuilder bob = newBuilder(dir, "test"); + Repository repo = bob.build(); + + // Fill up repository with some records. + Storage g = repo.storageFor(StorableTestBasic.class); + for (int i=0; i<1000; i++) { + StorableTestBasic stb = g.prepare(); + stb.setId(i); + stb.setStringProp("str-" + i); + stb.setIntProp(i); + stb.setLongProp(i); + stb.setDoubleProp(i); + stb.insert(); + } + + repo.getCapability(CheckpointCapability.class).forceCheckpoint(); + + repo.close(); + + boolean result = newBuilder(dir, null).verify(System.out); + + assertTrue(result); + + // Now corrupt one of the files. + + File victim = null; + for (File file : dir.listFiles()) { + if (file.getName().startsWith("log.")) { + continue; + } + if (file.getName().startsWith("_")) { + continue; + } + if (file.length() <= (4096 * 4)) { + continue; + } + victim = file; + break; + } + + System.out.println(victim); + RandomAccessFile raf = new RandomAccessFile(victim, "rw"); + raf.seek(9000); + for (int i=0; i<4000; i++) { + raf.writeInt(1475716342); + } + raf.close(); + + result = newBuilder(dir, null).verify(System.out); + + assertFalse(result); + } + + private File makeTempDir() throws Exception { + File dir = TestUtilities.makeTempDir("verify"); + mTempDirs.add(dir); + return dir; + } + + private BDBRepositoryBuilder newBuilder(File dir, String name) throws Exception { + BDBRepositoryBuilder bob = new BDBRepositoryBuilder(); + bob.setProduct("DB"); + if (name != null) { + bob.setName(name); + } + bob.setTransactionWriteNoSync(true); + bob.setCacheSize(1000000); + bob.setEnvironmentHomeFile(dir); + bob.setPrivate(false); + //bob.setChecksumEnabled(true); + return bob; + } +} -- cgit v1.2.3