diff options
| author | Brian S. O'Neill <bronee@gmail.com> | 2012-03-29 15:22:18 +0000 | 
|---|---|---|
| committer | Brian S. O'Neill <bronee@gmail.com> | 2012-03-29 15:22:18 +0000 | 
| commit | 66ede0fed04c965b0e1cbcb5a368cd47e0f66f75 (patch) | |
| tree | 11300e60fa33d58c529ec3c96f961450d36bb0dc /src/test | |
| parent | 19a4047514edca6dc5d8ee4159f5217058964254 (diff) | |
Added BDB panic handling support.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/java/com/amazon/carbonado/repo/sleepycat/DBPanicTest.java | 146 | ||||
| -rw-r--r-- | src/test/java/com/amazon/carbonado/repo/sleepycat/JEPanicTest.java | 145 | 
2 files changed, 291 insertions, 0 deletions
diff --git a/src/test/java/com/amazon/carbonado/repo/sleepycat/DBPanicTest.java b/src/test/java/com/amazon/carbonado/repo/sleepycat/DBPanicTest.java new file mode 100644 index 0000000..9ce307d --- /dev/null +++ b/src/test/java/com/amazon/carbonado/repo/sleepycat/DBPanicTest.java @@ -0,0 +1,146 @@ +/* + * Copyright 2012 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.repo.sleepycat; + +import java.io.FileWriter; + +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import com.amazon.carbonado.Cursor; +import com.amazon.carbonado.Repository; +import com.amazon.carbonado.Storage; +import com.amazon.carbonado.TestUtilities; +import com.amazon.carbonado.stored.StorableTestBasic; + +/** + * Tests the panic handler with BDB-Core. + *  + * @author Jesse Morgan + * + */ +public class DBPanicTest extends TestCase { +    public static void main(String[] args) { +        junit.textui.TestRunner.run(suite()); +    } + +    public static TestSuite suite() { +        return new TestSuite(DBPanicTest.class); +    } + +    public DBPanicTest(String s) { +        super(s); +    } + +    private Repository mRepo; +    private String mEnvHome; +    private volatile boolean mPanicked; +    private volatile boolean mTestDone; + +    protected void setUp() throws Exception { +        BDBRepositoryBuilder bob = new BDBRepositoryBuilder(); +        bob.setProduct("DB"); +        bob.setName("test"); +        bob.setTransactionNoSync(false); +        mEnvHome = TestUtilities.makeTestDirectoryString("test"); +        bob.setEnvironmentHome(mEnvHome); +        bob.setLockTimeout(5.0); +        bob.setCacheSize(100000); +        bob.setPanicHandler(new TestPanicHandler()); +        mRepo = bob.build(); +        mPanicked = false; +        mTestDone = false; +    } + +    protected void tearDown() throws Exception { +        if (mRepo != null) { +            try { +                mRepo.close(); +                                 +            } catch (Exception e) { +                                 +            } +        } +        mRepo = null; +    } + +    /** +     * Test the panic handler as follows: +     *  - Open the repository +     *  - In a new thread, write random data to the repository +     *  - In the main thread, perform reads and writes +     *  - Fail if 1000 reads/writes succeed +     *  - Succeed if panic handler fires +     */ +    public void testPanicHandler() throws Exception { +        Storage<StorableTestBasic> storage = mRepo.storageFor(StorableTestBasic.class); +        StorableTestBasic stb; +         +        Thread destroyer = new Thread(new Runnable() { +                public void run() { +                    try { +                        FileWriter fwriter = new FileWriter(mEnvHome + "/__db.001"); +                                         +                        while (!mPanicked && !mTestDone) { +                            fwriter.append('0'); +                            fwriter.flush(); +                        } +                                         +                        fwriter.close(); +                                         +                    } catch (Exception e) { +                        e.printStackTrace(); +                    } +                } +            }); +         +         +        try { +            for (int i = 0; i < 1000; i++) { +                stb = storage.prepare(); +                stb.initPropertiesRandomly(i); +                stb.insert(); +            } +                 +            destroyer.start(); +            Thread.sleep(1000); +                 +            Cursor<StorableTestBasic> c = storage.query().fetch(); +                 +            int i = 0; +            while (!mPanicked && c.hasNext()) { +                stb = c.next(); +                assertEquals(stb.getId(), i); +                i++; +            } +                 +        } catch (Exception e) { +            // We expect exceptions to occur +        } +         +        mTestDone = true; +        assertTrue("Panic Handler did not fire", mPanicked); +    } +         +    private class TestPanicHandler implements BDBPanicHandler { +        public void onPanic(Object environment, Exception exception) { +            mPanicked = true; +        }                +    } +} diff --git a/src/test/java/com/amazon/carbonado/repo/sleepycat/JEPanicTest.java b/src/test/java/com/amazon/carbonado/repo/sleepycat/JEPanicTest.java new file mode 100644 index 0000000..2682666 --- /dev/null +++ b/src/test/java/com/amazon/carbonado/repo/sleepycat/JEPanicTest.java @@ -0,0 +1,145 @@ +/* + * Copyright 2012 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.repo.sleepycat; + +import java.io.FileWriter; + +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import com.amazon.carbonado.Cursor; +import com.amazon.carbonado.Repository; +import com.amazon.carbonado.Storage; +import com.amazon.carbonado.TestUtilities; +import com.amazon.carbonado.stored.StorableTestBasic; + +/** + * Tests the panic handler with BDB JE. + *  + * @author Jesse Morgan + * + */ +public class JEPanicTest extends TestCase { +    public static void main(String[] args) { +        junit.textui.TestRunner.run(suite()); +    } + +    public static TestSuite suite() { +        return new TestSuite(JEPanicTest.class); +    } + +    public JEPanicTest(String s) { +        super(s); +    } + +    private Repository mRepo; +    private String mEnvHome; +    private volatile boolean mPanicked; +    private volatile boolean mRunning; + +    protected void setUp() throws Exception { +        BDBRepositoryBuilder bob = new BDBRepositoryBuilder(); +        bob.setProduct("JE"); +        bob.setName("test"); +        bob.setTransactionNoSync(false); +        mEnvHome = TestUtilities.makeTestDirectoryString("test"); +        bob.setEnvironmentHome(mEnvHome); +        bob.setLockTimeout(5.0); +        bob.setCacheSize(100000); +        bob.setPanicHandler(new TestPanicHandler()); +        mRepo = bob.build(); +        mPanicked = false; +    } + +    protected void tearDown() throws Exception { +        if (mRepo != null) { +            try { +                mRepo.close(); +                                 +            } catch (Exception e) { +                                 +            } +        } +        mRepo = null; +    } + +    /** +     * Test the panic handler as follows: +     *  - Open the repository +     *  - In a new thread, write random data to the repository +     *  - In the main thread, perform reads and writes +     *  - Fail if 1000 reads/writes succeed  +     *  - Succeed if panic handler fires +     */ +    public void testPanicHandler() throws Exception { +        Storage<StorableTestBasic> storage = mRepo.storageFor(StorableTestBasic.class); +        StorableTestBasic stb; +         +        Thread destroyer = new Thread(new Runnable() { +                public void run() { +                    mRunning = true; +                                 +                    try { +                        FileWriter fwriter = new FileWriter(mEnvHome + "/00000000.jdb"); +                                         +                        while (!mPanicked && mRunning) { +                            fwriter.append('0'); +                            fwriter.flush(); +                        } +                                         +                        fwriter.close(); +                                         +                    } catch (Exception e) { +                        e.printStackTrace(); +                    } +                } +            }); +         +         +        try { +            for (int i = 0; i < 1000 && !mPanicked; i++) { +                stb = storage.prepare(); +                stb.initPropertiesRandomly(i); +                stb.insert(); +            } +                 +            destroyer.start(); +                 +            Cursor<StorableTestBasic> c = storage.query().fetch(); +                 +            int i = 0; +            while (!mPanicked && c.hasNext()) { +                assertEquals(c.next().getId(), i); +                i++; +            } +                 +        } catch (Exception e) { +            // We expect exceptions to occur +        } +         +        mRunning = false; +        assertTrue("Panic Handler fired", mPanicked); +    } +         +    private class TestPanicHandler implements BDBPanicHandler { +        public void onPanic(Object environment, Exception exception) { +            mPanicked = true; +        }                +    } +}  | 
