This is an automated email from the ASF dual-hosted git repository.

sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 2f3d5e9  More testcases for LedgerHandle
2f3d5e9 is described below

commit 2f3d5e9acd75cbeb9b8c0cc543901b3d017eac7c
Author: Charan Reddy Guttapalem 
<[email protected]>
AuthorDate: Wed Jan 24 10:41:57 2018 -0800

    More testcases for LedgerHandle
    
    Descriptions of the changes in this PR:
    
    - New testcases for missing testcoverage in
    LedgerHandle and ReadOnlyLedgerHandle
    
    Author: Charan Reddy Guttapalem 
<[email protected]>
    
    Reviewers: Enrico Olivelli <[email protected]>
    
    This closes #1045 from reddycharan/ledgerhandlemissingtests
---
 .../bookkeeper/test/BookieReadWriteTest.java       | 192 ++++++++++++++++++++-
 1 file changed, 191 insertions(+), 1 deletion(-)

diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
index 06327fc..312af39 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookieReadWriteTest.java
@@ -38,16 +38,20 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.bookkeeper.client.AsyncCallback.AddCallback;
+import org.apache.bookkeeper.client.AsyncCallback.CloseCallback;
 import org.apache.bookkeeper.client.AsyncCallback.ReadCallback;
 import org.apache.bookkeeper.client.AsyncCallback.ReadLastConfirmedCallback;
 import org.apache.bookkeeper.client.BKException;
+import org.apache.bookkeeper.client.BKException.BKIllegalOpException;
 import org.apache.bookkeeper.client.BookKeeper.DigestType;
 import org.apache.bookkeeper.client.LedgerEntry;
 import org.apache.bookkeeper.client.LedgerHandle;
 import org.apache.bookkeeper.streaming.LedgerInputStream;
 import org.apache.bookkeeper.streaming.LedgerOutputStream;
+import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.Watcher;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -953,13 +957,139 @@ public class BookieReadWriteTest extends 
BookKeeperClusterTestCase
         }
     }
 
+    @Test
+    public void testWriteUsingReadOnlyHandle() throws Exception {
+        // Create a ledger
+        lh = bkc.createLedger(digestType, ledgerPassword);
+        ledgerId = lh.getId();
+        LOG.info("Ledger ID: " + lh.getId());
+
+        long lac = writeNEntriesLastWriteSync(lh, numEntriesToWrite);
+        LedgerHandle lhOpen = bkc.openLedgerNoRecovery(ledgerId, digestType, 
ledgerPassword);
+
+        // addEntry on ReadOnlyHandle should fail
+        CountDownLatch latch = new CountDownLatch(1);
+        final int[] rcArray = { 0 };
+        lhOpen.asyncAddEntry("".getBytes(), new AddCallback() {
+            @Override
+            public void addComplete(int rc, LedgerHandle lh, long entryId, 
Object ctx) {
+                CountDownLatch latch = (CountDownLatch) ctx;
+                rcArray[0] = rc;
+                latch.countDown();
+            }
+        }, latch);
+        latch.await();
+        if (rcArray[0] != BKException.Code.IllegalOpException) {
+            Assert.fail("Test1 - asyncAddOperation is supposed to be failed, 
but it got following rc - "
+                    + KeeperException.Code.get(rcArray[0]));
+        }
+
+        // addEntry on ReadOnlyHandle should fail
+        latch = new CountDownLatch(1);
+        rcArray[0] = 0;
+        lhOpen.asyncAddEntry("".getBytes(), 0, 0, new AddCallback() {
+            @Override
+            public void addComplete(int rc, LedgerHandle lh, long entryId, 
Object ctx) {
+                CountDownLatch latch = (CountDownLatch) ctx;
+                rcArray[0] = rc;
+                latch.countDown();
+            }
+        }, latch);
+        latch.await();
+        if (rcArray[0] != BKException.Code.IllegalOpException) {
+            Assert.fail(
+                    "Test2 - asyncAddOperation is supposed to fail with 
IllegalOpException, but it got following rc - "
+                            + KeeperException.Code.get(rcArray[0]));
+        }
+
+        // close readonlyhandle
+        latch = new CountDownLatch(1);
+        rcArray[0] = 0;
+        lhOpen.asyncClose(new CloseCallback() {
+            @Override
+            public void closeComplete(int rc, LedgerHandle lh, Object ctx) {
+                CountDownLatch latch = (CountDownLatch) ctx;
+                rcArray[0] = rc;
+                latch.countDown();
+            }
+        }, latch);
+        latch.await();
+        if (rcArray[0] != KeeperException.Code.OK.intValue()) {
+            Assert.fail("Test3 - asyncClose failed because of exception - " + 
KeeperException.Code.get(rcArray[0]));
+        }
+
+        // close of readonlyhandle should not affect the writehandle
+        writeNEntriesLastWriteSync(lh, 5);
+        lh.close();
+    }
+
+    @Test
+    public void testLedgerHandle() throws Exception {
+        // Create a ledger
+        lh = bkc.createLedger(digestType, ledgerPassword);
+        ledgerId = lh.getId();
+        LOG.info("Ledger ID: " + lh.getId());
+
+        long lac = writeNEntriesLastWriteSync(lh, 5);
+
+        // doing addEntry with entryid using regular Ledgerhandle should fail
+        CountDownLatch latch = new CountDownLatch(1);
+        final int[] rcArray = { 0 };
+        lh.asyncAddEntry(lac + 1, "".getBytes(), new AddCallback() {
+            @Override
+            public void addComplete(int rc, LedgerHandle lh, long entryId, 
Object ctx) {
+                CountDownLatch latch = (CountDownLatch) ctx;
+                rcArray[0] = rc;
+                latch.countDown();
+            }
+        }, latch);
+        latch.await();
+        if (rcArray[0] != BKException.Code.IllegalOpException) {
+            Assert.fail(
+                    "Test1 - addEntry with EntryID is expected to fail with 
IllegalOpException, "
+                    + "but it got following rc - " + 
KeeperException.Code.get(rcArray[0]));
+        }
+
+        // doing addEntry with entryid using regular Ledgerhandle should fail
+        latch = new CountDownLatch(1);
+        rcArray[0] = 0;
+        lh.asyncAddEntry(lac + 1, "".getBytes(), 0, 0, new AddCallback() {
+            @Override
+            public void addComplete(int rc, LedgerHandle lh, long entryId, 
Object ctx) {
+                CountDownLatch latch = (CountDownLatch) ctx;
+                rcArray[0] = rc;
+                latch.countDown();
+            }
+        }, latch);
+        latch.await();
+        if (rcArray[0] != BKException.Code.IllegalOpException) {
+            Assert.fail(
+                    "Test2 - addEntry with EntryID is expected to fail with 
IllegalOpException,"
+                    + "but it got following rc - " + 
KeeperException.Code.get(rcArray[0]));
+        }
+
+        // doing addEntry with entryid using regular Ledgerhandle should fail
+        try {
+            lh.addEntry(lac + 1, "".getBytes());
+            Assert.fail("Test3 - addEntry with EntryID is expected to fail");
+        } catch (BKIllegalOpException E) {
+        }
+
+        // doing addEntry with entryid using regular Ledgerhandle should fail
+        try {
+            lh.addEntry(lac + 1, "".getBytes(), 0, 0);
+            Assert.fail("Test4 - addEntry with EntryID is expected to fail");
+        } catch (BKIllegalOpException E) {
+        }
+
+        lh.close();
+    }
 
     @Test
     public void testLastConfirmedAdd() throws Exception {
         try {
             // Create a ledger
             lh = bkc.createLedger(digestType, ledgerPassword);
-            // bkc.initMessageDigest("SHA1");
             ledgerId = lh.getId();
             LOG.info("Ledger ID: " + lh.getId());
 
@@ -1005,6 +1135,66 @@ public class BookieReadWriteTest extends 
BookKeeperClusterTestCase
         }
     }
 
+    @Test
+    public void testReadLastConfirmed() throws Exception {
+        // Create a ledger and add entries
+        lh = bkc.createLedger(digestType, ledgerPassword);
+        // bkc.initMessageDigest("SHA1");
+        ledgerId = lh.getId();
+        LOG.info("Ledger ID: " + lh.getId());
+        long previousLAC = writeNEntriesLastWriteSync(lh, 5);
+
+        // add more entries after opening ReadonlyLedgerHandle
+        LedgerHandle lhOpen = bkc.openLedgerNoRecovery(ledgerId, digestType, 
ledgerPassword);
+        long currentLAC = writeNEntriesLastWriteSync(lh, 5);
+
+        // get LAC instance variable of ReadHandle and verify if it is equal 
to (previousLAC - 1)
+        long readLAC = lhOpen.getLastAddConfirmed();
+        Assert.assertEquals("Test1 - For ReadHandle LAC", (previousLAC - 1), 
readLAC);
+
+        // close the write LedgerHandle and sleep for 500 msec to make sure 
all close watchers are called
+        lh.close();
+        Thread.sleep(500);
+
+        // now call asyncReadLastConfirmed and verify if it is equal to 
currentLAC
+        CountDownLatch latch = new CountDownLatch(1);
+        final int[] rcArray = { 0 };
+        final long[] lastConfirmedArray = { 0 };
+        lhOpen.asyncReadLastConfirmed(new ReadLastConfirmedCallback() {
+            @Override
+            public void readLastConfirmedComplete(int rc, long lastConfirmed, 
Object ctx) {
+                CountDownLatch latch = (CountDownLatch) ctx;
+                rcArray[0] = rc;
+                lastConfirmedArray[0] = lastConfirmed;
+                latch.countDown();
+            }
+        }, latch);
+        latch.await();
+        Assert.assertEquals("Test3 - asyncReadLastConfirmed response", 
KeeperException.Code.OK.intValue(), rcArray[0]);
+        Assert.assertEquals("Test3 - ReadLAC", currentLAC, 
lastConfirmedArray[0]);
+
+        // similarly try calling asyncTryReadLastConfirmed and verify if it is 
equal to currentLAC
+        latch = new CountDownLatch(1);
+        rcArray[0] = 0;
+        lastConfirmedArray[0] = 0;
+        lhOpen.asyncTryReadLastConfirmed(new ReadLastConfirmedCallback() {
+            @Override
+            public void readLastConfirmedComplete(int rc, long lastConfirmed, 
Object ctx) {
+                CountDownLatch latch = (CountDownLatch) ctx;
+                rcArray[0] = rc;
+                lastConfirmedArray[0] = lastConfirmed;
+                latch.countDown();
+            }
+        }, latch);
+        latch.await();
+        Assert.assertEquals("Test4 - asyncTryReadLastConfirmed response", 
KeeperException.Code.OK.intValue(),
+                rcArray[0]);
+        Assert.assertEquals("Test4 - ReadLAC", currentLAC, 
lastConfirmedArray[0]);
+
+        // similarly try calling tryReadLastConfirmed and verify if it is 
equal to currentLAC
+        long tryReadLAC = lhOpen.tryReadLastConfirmed();
+        Assert.assertEquals("Test5 - ReadLAC", currentLAC, tryReadLAC);
+    }
 
     @Override
     public void addComplete(int rc, LedgerHandle lh, long entryId, Object ctx) 
{

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to