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 ee2f419  Use loopback network interface for testcases.
ee2f419 is described below

commit ee2f419b77564cca2bfbf8efed2b0f4c4615d542
Author: cguttapalem <cguttapa...@salesforce.com>
AuthorDate: Fri Feb 2 16:34:12 2018 -0800

    Use loopback network interface for testcases.
    
    Descriptions of the changes in this PR:
    
    - tests would be more reliable irrespective of the environment (and 
availability of network connection), if the loopback address is used in 
testsuites.
    - unless loopback address is set explicitly, in my env (while on company's 
VPN),
    UpdateCookieCmdTest is failing most of the times.
    - currently allowLoopback is set to true in BookKeeperClusterTestCase,
    but it doesn't make Bookies to use loopback interface address.
    - loopback network interface should be set explicitly as
    listening interface to use loopback address.
    
    Note:
    
    1) will create Issue for this depending on the PR feedback.
    2) in other places (where setAllowLoopback is set) also loopback interface 
needs to be set
    
    Author: cguttapalem <cguttapa...@salesforce.com>
    
    Reviewers: Samuel Just <sj...@salesforce.com>, Jia Zhai <None>, Sijie Guo 
<si...@apache.org>
    
    This closes #1097 from reddycharan/loopbackaddress
---
 .../bookie/BookieInitializationTest.java           | 11 +++---
 .../bookie/storage/ldb/ConversionRollbackTest.java |  4 +--
 .../bookie/storage/ldb/ConversionTest.java         |  4 +--
 .../bookie/storage/ldb/DbLedgerStorageTest.java    |  7 ++--
 .../storage/ldb/DbLedgerStorageWriteCacheTest.java |  4 +--
 .../storage/ldb/LocationsIndexRebuildTest.java     |  4 +--
 .../bookkeeper/client/UpdateLedgerCmdTest.java     |  1 -
 .../bookkeeper/conf/TestBKConfiguration.java       | 40 +++++++++++++++++++++-
 .../bookkeeper/test/BookKeeperClusterTestCase.java |  6 +++-
 9 files changed, 61 insertions(+), 20 deletions(-)

diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
index dbfb9ab..36406ce 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/BookieInitializationTest.java
@@ -155,7 +155,7 @@ public class BookieInitializationTest extends 
BookKeeperClusterTestCase {
         final ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setJournalDirName(tmpDir.getPath())
             .setLedgerDirNames(new String[] { tmpDir.getPath() })
-            .setZkServers(null);
+            .setZkServers(null).setListeningInterface(null);
 
         final String bkRegPath = conf.getZkAvailableBookiesPath() + "/"
                 + InetAddress.getLocalHost().getHostAddress() + ":"
@@ -188,7 +188,7 @@ public class BookieInitializationTest extends 
BookKeeperClusterTestCase {
         final ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setJournalDirName(tmpDir.getPath())
             .setLedgerDirNames(new String[] { tmpDir.getPath() })
-            .setZkServers(null);
+            .setZkServers(null).setListeningInterface(null);
 
         final String bkRegPath = conf.getZkAvailableBookiesPath() + "/"
                 + InetAddress.getLocalHost().getHostAddress() + ":"
@@ -250,7 +250,7 @@ public class BookieInitializationTest extends 
BookKeeperClusterTestCase {
 
         final ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration().setZkServers(null)
                 .setJournalDirName(tmpDir.getPath()).setLedgerDirNames(new 
String[] { tmpDir.getPath() })
-                .setUseHostNameAsBookieID(true);
+                .setUseHostNameAsBookieID(true).setListeningInterface(null);
 
         final String bkRegPath = conf.getZkAvailableBookiesPath() + "/"
                 + InetAddress.getLocalHost().getCanonicalHostName() + ":" + 
conf.getBookiePort();
@@ -271,7 +271,7 @@ public class BookieInitializationTest extends 
BookKeeperClusterTestCase {
 
         final ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration().setZkServers(null)
                 .setJournalDirName(tmpDir.getPath()).setLedgerDirNames(new 
String[] { tmpDir.getPath() })
-                .setUseHostNameAsBookieID(true).setUseShortHostName(true);
+                
.setUseHostNameAsBookieID(true).setUseShortHostName(true).setListeningInterface(null);
 
         final String bkRegPath = conf.getZkAvailableBookiesPath() + "/"
                 + 
(InetAddress.getLocalHost().getCanonicalHostName().split("\\.", 2)[0]) + ":" + 
conf.getBookiePort();
@@ -298,7 +298,8 @@ public class BookieInitializationTest extends 
BookKeeperClusterTestCase {
         final ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setJournalDirName(tmpDir.getPath())
             .setLedgerDirNames(new String[] { tmpDir.getPath() })
-            .setZkServers(zkUtil.getZooKeeperConnectString());
+            .setZkServers(zkUtil.getZooKeeperConnectString())
+            .setListeningInterface(null);
 
         String bkRegPath = conf.getZkAvailableBookiesPath() + "/"
                 + InetAddress.getLocalHost().getHostAddress() + ":"
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/ConversionRollbackTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/ConversionRollbackTest.java
index 75e061a..e3cec7c 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/ConversionRollbackTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/ConversionRollbackTest.java
@@ -40,6 +40,7 @@ import org.apache.bookkeeper.bookie.Checkpointer;
 import org.apache.bookkeeper.bookie.InterleavedLedgerStorage;
 import org.apache.bookkeeper.bookie.LedgerDirsManager;
 import org.apache.bookkeeper.conf.ServerConfiguration;
+import org.apache.bookkeeper.conf.TestBKConfiguration;
 import org.apache.bookkeeper.stats.NullStatsLogger;
 import org.apache.bookkeeper.util.DiskChecker;
 import org.apache.commons.io.FileUtils;
@@ -81,9 +82,8 @@ public class ConversionRollbackTest {
 
         log.info("Using temp directory: {}", tmpDir);
 
-        ServerConfiguration conf = new ServerConfiguration();
+        ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setLedgerDirNames(new String[] { tmpDir.toString() });
-        conf.setAllowLoopback(true);
         LedgerDirsManager ledgerDirsManager = new LedgerDirsManager(conf, 
conf.getLedgerDirs(),
                 new DiskChecker(conf.getDiskUsageThreshold(), 
conf.getDiskUsageWarnThreshold()));
 
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/ConversionTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/ConversionTest.java
index 1816945..dbc3c97 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/ConversionTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/ConversionTest.java
@@ -39,6 +39,7 @@ import org.apache.bookkeeper.bookie.Checkpointer;
 import org.apache.bookkeeper.bookie.InterleavedLedgerStorage;
 import org.apache.bookkeeper.bookie.LedgerDirsManager;
 import org.apache.bookkeeper.conf.ServerConfiguration;
+import org.apache.bookkeeper.conf.TestBKConfiguration;
 import org.apache.bookkeeper.stats.NullStatsLogger;
 import org.apache.bookkeeper.util.DiskChecker;
 import org.apache.commons.io.FileUtils;
@@ -78,9 +79,8 @@ public class ConversionTest {
 
         System.out.println(tmpDir);
 
-        ServerConfiguration conf = new ServerConfiguration();
+        ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setLedgerDirNames(new String[] { tmpDir.toString() });
-        conf.setAllowLoopback(true);
         LedgerDirsManager ledgerDirsManager = new LedgerDirsManager(conf, 
conf.getLedgerDirs(),
                 new DiskChecker(conf.getDiskUsageThreshold(), 
conf.getDiskUsageWarnThreshold()));
 
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageTest.java
index 1e91c2c..4b61a65 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageTest.java
@@ -40,6 +40,7 @@ import org.apache.bookkeeper.bookie.BookieException;
 import org.apache.bookkeeper.bookie.EntryLocation;
 import org.apache.bookkeeper.bookie.EntryLogger;
 import org.apache.bookkeeper.conf.ServerConfiguration;
+import org.apache.bookkeeper.conf.TestBKConfiguration;
 import org.apache.bookkeeper.proto.BookieProtocol;
 import org.junit.After;
 import org.junit.Before;
@@ -62,9 +63,8 @@ public class DbLedgerStorageTest {
         Bookie.checkDirectoryStructure(curDir);
 
         int gcWaitTime = 1000;
-        ServerConfiguration conf = new ServerConfiguration();
+        ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setGcWaitTime(gcWaitTime);
-        conf.setAllowLoopback(true);
         conf.setLedgerStorageClass(DbLedgerStorage.class.getName());
         conf.setLedgerDirNames(new String[] { tmpDir.toString() });
         Bookie bookie = new Bookie(conf);
@@ -229,9 +229,8 @@ public class DbLedgerStorageTest {
     @Test
     public void doubleDirectoryError() throws Exception {
         int gcWaitTime = 1000;
-        ServerConfiguration conf = new ServerConfiguration();
+        ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setGcWaitTime(gcWaitTime);
-        conf.setAllowLoopback(true);
         conf.setLedgerStorageClass(DbLedgerStorage.class.getName());
         conf.setLedgerDirNames(new String[] { "dir1", "dir2" });
 
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWriteCacheTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWriteCacheTest.java
index 0d3f5bb..c2281a7 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWriteCacheTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/DbLedgerStorageWriteCacheTest.java
@@ -31,6 +31,7 @@ import java.io.IOException;
 
 import org.apache.bookkeeper.bookie.Bookie;
 import org.apache.bookkeeper.conf.ServerConfiguration;
+import org.apache.bookkeeper.conf.TestBKConfiguration;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -79,9 +80,8 @@ public class DbLedgerStorageWriteCacheTest {
         Bookie.checkDirectoryStructure(curDir);
 
         int gcWaitTime = 1000;
-        ServerConfiguration conf = new ServerConfiguration();
+        ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setGcWaitTime(gcWaitTime);
-        conf.setAllowLoopback(true);
         conf.setLedgerStorageClass(MockedDbLedgerStorage.class.getName());
         conf.setProperty(DbLedgerStorage.WRITE_CACHE_MAX_SIZE_MB, 1);
         conf.setLedgerDirNames(new String[] { tmpDir.toString() });
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/LocationsIndexRebuildTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/LocationsIndexRebuildTest.java
index c1f7e39..9919dce 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/LocationsIndexRebuildTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/bookie/storage/ldb/LocationsIndexRebuildTest.java
@@ -39,6 +39,7 @@ import 
org.apache.bookkeeper.bookie.CheckpointSource.Checkpoint;
 import org.apache.bookkeeper.bookie.Checkpointer;
 import org.apache.bookkeeper.bookie.LedgerDirsManager;
 import org.apache.bookkeeper.conf.ServerConfiguration;
+import org.apache.bookkeeper.conf.TestBKConfiguration;
 import org.apache.bookkeeper.stats.NullStatsLogger;
 import org.apache.bookkeeper.util.DiskChecker;
 import org.apache.commons.io.FileUtils;
@@ -78,10 +79,9 @@ public class LocationsIndexRebuildTest {
 
         System.out.println(tmpDir);
 
-        ServerConfiguration conf = new ServerConfiguration();
+        ServerConfiguration conf = 
TestBKConfiguration.newServerConfiguration();
         conf.setLedgerDirNames(new String[] { tmpDir.toString() });
         conf.setLedgerStorageClass(DbLedgerStorage.class.getName());
-        conf.setAllowLoopback(true);
         LedgerDirsManager ledgerDirsManager = new LedgerDirsManager(conf, 
conf.getLedgerDirs(),
                 new DiskChecker(conf.getDiskUsageThreshold(), 
conf.getDiskUsageWarnThreshold()));
 
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerCmdTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerCmdTest.java
index 14c4b61..d773bda 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerCmdTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/UpdateLedgerCmdTest.java
@@ -53,7 +53,6 @@ public class UpdateLedgerCmdTest extends 
BookKeeperClusterTestCase {
 
     public UpdateLedgerCmdTest() {
         super(3);
-        baseConf.setAllowLoopback(true);
         baseConf.setGcWaitTime(100000);
     }
 
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/TestBKConfiguration.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/TestBKConfiguration.java
index 961cecc..aba12a7 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/TestBKConfiguration.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/conf/TestBKConfiguration.java
@@ -21,23 +21,61 @@
 
 package org.apache.bookkeeper.conf;
 
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Collections;
+import java.util.Enumeration;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * Test the BK configuration object.
  */
 public class TestBKConfiguration {
 
+    static final Logger LOG = 
LoggerFactory.getLogger(TestBKConfiguration.class);
+
+    /**
+     * Loopback interface is set as the listening interface and allowloopback 
is
+     * set to true in this server config.
+     *
+     * <p>If the caller doesn't want loopback address, then listeningInterface
+     * should be set back to null.
+     */
     public static ServerConfiguration newServerConfiguration() {
         ServerConfiguration confReturn = new ServerConfiguration();
         confReturn.setJournalFlushWhenQueueEmpty(true);
         // enable journal format version
         confReturn.setJournalFormatVersionToWrite(5);
-        confReturn.setAllowLoopback(true);
         confReturn.setAllowEphemeralPorts(true);
         confReturn.setBookiePort(0);
         confReturn.setGcWaitTime(1000);
         confReturn.setDiskUsageThreshold(0.999f);
         confReturn.setDiskUsageWarnThreshold(0.99f);
+        setLoopbackInterfaceAndAllowLoopback(confReturn);
         return confReturn;
     }
 
+    private static String getLoopbackInterfaceName() {
+        try {
+            Enumeration<NetworkInterface> nifs = 
NetworkInterface.getNetworkInterfaces();
+            for (NetworkInterface nif : Collections.list(nifs)) {
+                if (nif.isLoopback()) {
+                    return nif.getName();
+                }
+            }
+        } catch (SocketException se) {
+            LOG.warn("Exception while figuring out loopback interface. Will 
use null.", se);
+            return null;
+        }
+        LOG.warn("Unable to deduce loopback interface. Will use null");
+        return null;
+    }
+
+    public static ServerConfiguration 
setLoopbackInterfaceAndAllowLoopback(ServerConfiguration serverConf) {
+        serverConf.setListeningInterface(getLoopbackInterfaceName());
+        serverConf.setAllowLoopback(true);
+        return serverConf;
+    }
 }
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookKeeperClusterTestCase.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookKeeperClusterTestCase.java
index 526a4c7..6365c15 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookKeeperClusterTestCase.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/test/BookKeeperClusterTestCase.java
@@ -85,6 +85,11 @@ public abstract class BookKeeperClusterTestCase {
     protected int numBookies;
     protected BookKeeperTestClient bkc;
 
+    /*
+     * Loopback interface is set as the listening interface and allowloopback 
is
+     * set to true in this server config. So bookies in this test process would
+     * bind to loopback address.
+     */
     protected final ServerConfiguration baseConf = 
TestBKConfiguration.newServerConfiguration();
     protected final ClientConfiguration baseClientConf = new 
ClientConfiguration();
 
@@ -99,7 +104,6 @@ public abstract class BookKeeperClusterTestCase {
     public BookKeeperClusterTestCase(int numBookies, int testTimeoutSecs) {
         this.numBookies = numBookies;
         this.globalTimeout = Timeout.seconds(testTimeoutSecs);
-        baseConf.setAllowLoopback(true);
     }
 
     @Before

-- 
To stop receiving notification emails like this one, please contact
si...@apache.org.

Reply via email to