Use TestHazelcastFactory

- Modified Hazelcast related tests to use TestHazelcastFactory.
  Hazelcast instances generated by it uses mocked network, which might resolve timing issue (ONOS-368).

  See: https://github.com/hazelcast/hazelcast/blob/master/hazelcast/src/test/java/com/hazelcast/test/TestHazelcastInstanceFactory.java

Change-Id: I18f1c2d855eebf679a4be97a53cea2c808acfd04
diff --git a/core/store/dist/pom.xml b/core/store/dist/pom.xml
index 83629da..6eb1a5f 100644
--- a/core/store/dist/pom.xml
+++ b/core/store/dist/pom.xml
@@ -107,6 +107,12 @@
           <groupId>com.hazelcast</groupId>
           <artifactId>hazelcast</artifactId>
         </dependency>
+        <dependency>
+          <groupId>com.hazelcast</groupId>
+          <artifactId>hazelcast</artifactId>
+          <classifier>tests</classifier>
+          <scope>test</scope>
+        </dependency>
 
         <!-- for shaded copycat -->
         <dependency>
diff --git a/core/store/dist/src/test/java/org/onosproject/store/hz/TestStoreManager.java b/core/store/dist/src/test/java/org/onosproject/store/hz/TestStoreManager.java
index b12aa66..2983687 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/hz/TestStoreManager.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/hz/TestStoreManager.java
@@ -15,22 +15,28 @@
  */
 package org.onosproject.store.hz;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
+
 import java.io.FileNotFoundException;
 import java.util.UUID;
 
 import com.hazelcast.config.Config;
 import com.hazelcast.config.FileSystemXmlConfig;
 import com.hazelcast.core.HazelcastInstance;
+import com.hazelcast.test.TestHazelcastInstanceFactory;
 
 /**
  * Dummy StoreManager to use specified Hazelcast instance.
  */
 public class TestStoreManager extends StoreManager {
 
+    private TestHazelcastInstanceFactory factory;
+
     /**
      * Gets the Hazelcast Config for testing.
      *
-     * @return
+     * @return Hazelcast Configuration for testing
      */
     public static Config getTestConfig() {
         Config config;
@@ -53,16 +59,44 @@
     }
 
     /**
-     * Constructor.
+     * Creates an instance of dummy Hazelcast instance for testing.
+     *
+     * @return HazelcastInstance
+     */
+    public HazelcastInstance initSingleInstance() {
+        return initInstances(1)[0];
+    }
+
+    /**
+     * Creates some instances of dummy Hazelcast instances for testing.
+     *
+     * @param count number of instances to create
+     * @return array of HazelcastInstances
+     */
+    public HazelcastInstance[] initInstances(int count) {
+        checkArgument(count > 0, "Cluster size must be > 0");
+        factory = new TestHazelcastInstanceFactory(count);
+        return factory.newInstances(getTestConfig());
+    }
+
+    /**
+     * Sets the Hazelast instance to return on #getHazelcastInstance().
      *
      * @param instance Hazelast instance to return on #getHazelcastInstance()
      */
-    public TestStoreManager(HazelcastInstance instance) {
+    public void setHazelcastInstance(HazelcastInstance instance) {
         this.instance = instance;
     }
 
     @Override
     public void activate() {
         // Hazelcast setup removed from original code.
+        checkState(this.instance != null, "HazelcastInstance needs to be set");
+    }
+
+    @Override
+    public void deactivate() {
+        // Hazelcast instance shutdown removed from original code.
+        factory.shutdownAll();
     }
 }
diff --git a/core/store/dist/src/test/java/org/onosproject/store/mastership/impl/DistributedMastershipStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/mastership/impl/DistributedMastershipStoreTest.java
index 3d993cd..1a96161 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/mastership/impl/DistributedMastershipStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/mastership/impl/DistributedMastershipStoreTest.java
@@ -19,8 +19,6 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.onosproject.net.MastershipRole.*;
-import static org.onosproject.net.intent.TestTools.delay;
-
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CountDownLatch;
@@ -51,8 +49,6 @@
 import org.onlab.packet.IpAddress;
 
 import com.google.common.collect.Sets;
-import com.hazelcast.config.Config;
-import com.hazelcast.core.Hazelcast;
 
 /**
  * Test of the Hazelcast-based distributed MastershipStore implementation.
@@ -87,9 +83,9 @@
     @Before
     public void setUp() throws Exception {
         // TODO should find a way to clean Hazelcast instance without shutdown.
-        Config config = TestStoreManager.getTestConfig();
-
-        storeMgr = new TestStoreManager(Hazelcast.newHazelcastInstance(config));
+        TestStoreManager testStoreMgr = new TestStoreManager();
+        testStoreMgr.setHazelcastInstance(testStoreMgr.initSingleInstance());
+        storeMgr = testStoreMgr;
         storeMgr.activate();
 
         serializationMgr = new KryoSerializer();
@@ -122,7 +118,6 @@
         assertTrue("wrong store state:", dms.roleMap.isEmpty());
 
         testStore.put(DID1, N1, true, false, false);
-        delay(10); //TODO there seems to be a race here.
         assertEquals("wrong master:", N1, dms.getMaster(DID1));
         assertNull("wrong master:", dms.getMaster(DID2));
     }
diff --git a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
index 53bef7e..cc577fe 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/HazelcastLinkResourceStoreTest.java
@@ -46,9 +46,6 @@
 
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
-import com.hazelcast.config.Config;
-import com.hazelcast.core.Hazelcast;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -92,9 +89,9 @@
     @Before
     public void setUp() throws Exception {
 
-        Config config = TestStoreManager.getTestConfig();
-
-        storeMgr = new TestStoreManager(Hazelcast.newHazelcastInstance(config));
+        TestStoreManager testStoreMgr = new TestStoreManager();
+        testStoreMgr.setHazelcastInstance(testStoreMgr.initSingleInstance());
+        storeMgr = testStoreMgr;
         storeMgr.activate();
 
 
diff --git a/pom.xml b/pom.xml
index 17414c6..01cb6fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -248,6 +248,13 @@
                 <version>3.4</version>
             </dependency>
             <dependency>
+                <groupId>com.hazelcast</groupId>
+                <artifactId>hazelcast</artifactId>
+                <version>3.4</version>
+                <classifier>tests</classifier>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
                 <groupId>com.eclipsesource.minimal-json</groupId>
                 <artifactId>minimal-json</artifactId>
                 <version>0.9.1</version>