summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2011-02-18 17:38:13 +0000
committerBrian S. O'Neill <bronee@gmail.com>2011-02-18 17:38:13 +0000
commit608319e9fadb79dbcf828a175fa7a6c34bafdc26 (patch)
tree4122796b2795175bbd340b426aa8146e8ad23471 /src
parent5f8479d8d71460c9f25fc1f2b2a69a754cfc0451 (diff)
Add BDB verify support.
Diffstat (limited to 'src')
-rw-r--r--src/test/java/com/amazon/carbonado/TestVerifyBDB.java139
1 files changed, 139 insertions, 0 deletions
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<File> mTempDirs = new ArrayList<File>();
+
+ 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<StorableTestBasic> 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;
+ }
+}