--- /dev/null
+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.clustering.services_implementation.internal;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.fail;
+
+import java.net.InetAddress;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Properties;
+
+import org.infinispan.CacheImpl;
+import org.junit.Assert;
+import org.junit.Test;
+import org.opendaylight.controller.clustering.services.CacheConfigException;
+import org.opendaylight.controller.clustering.services.CacheExistException;
+import org.opendaylight.controller.clustering.services.IClusterServices;
+import org.opendaylight.controller.clustering.services.IClusterServices.cacheMode;
+
+public class ClusterManagerTest {
+
+ @Test
+ public void noManagerSetTest() throws CacheExistException,
+ CacheConfigException {
+ ClusterManager cm = new ClusterManager();
+ CacheImpl<String, Integer> c1 = null;
+ CacheImpl<String, Integer> c2 = null;
+ Assert.assertNull(cm.createCache("Container", "Cache", null));
+ Assert.assertNull(cm.getCacheProperties("Container", "Cache"));
+ Assert.assertNull(cm.getCache("Container", "Cache"));
+ Assert.assertFalse(cm.existCache("Container", "Cache"));
+ Assert.assertNull(cm.getCacheList("Container"));
+ Assert.assertTrue(cm.amIStandby());
+ Assert.assertNull(cm.getActiveAddress());
+ Assert.assertNull(cm.getMyAddress());
+ Assert.assertNull(cm.getClusteredControllers());
+ }
+
+ @Test
+ public void withManagerTest() throws CacheExistException,
+ CacheConfigException {
+
+ ClusterManager cm = new ClusterManager();
+ CacheImpl<String, Integer> c1 = null;
+ CacheImpl<String, Integer> c2 = null;
+
+ cm.start();
+
+ // Check no cache created yet
+ assertFalse(cm.existCache("NonExistantContainerName",
+ "NonExistantCacheName"));
+
+ String cacheName = "Cache1";
+ String containerName = "Container1";
+ // Create cache with no cacheMode set, expecting it to fail
+ HashSet<cacheMode> cacheModeSet = new HashSet<cacheMode>();
+ Assert.assertNull(cm.createCache(containerName,cacheName, cacheModeSet));
+
+ // Create first cache as transactional
+ cacheModeSet.add(cacheMode.TRANSACTIONAL);
+ try {
+ c1 = (CacheImpl<String, Integer>) cm.createCache(containerName,
+ cacheName, cacheModeSet);
+ } catch (CacheExistException | CacheConfigException cce) {
+ fail("Failed to create cache " + cacheName);
+ }
+
+ // Try creating exact same cache again
+ try {
+ c1 = (CacheImpl<String, Integer>) cm.createCache(containerName,
+ cacheName, cacheModeSet);
+ } catch (CacheExistException cee) {
+
+ } catch (CacheConfigException cce) {
+ fail("Creating cache failed with " + cce);
+ }
+
+ // Create second cache with both types of cacheMode, expecting it to
+ // complain
+ String cacheName2 = "Cache2";
+ cacheModeSet.add(cacheMode.NON_TRANSACTIONAL);
+ try {
+ c2 = (CacheImpl<String, Integer>) cm.createCache(containerName,
+ cacheName2, cacheModeSet);
+ } catch (CacheExistException cee) {
+ fail("Failed to create cache " + cacheName2 + cee);
+ } catch (CacheConfigException cce) {
+
+ }
+
+ // Create second cache NON_TRANSACTIONAL but with both ASYNC and SYNC,
+ // expect to complain
+ cacheModeSet.remove(cacheMode.TRANSACTIONAL);
+ cacheModeSet.add(cacheMode.SYNC);
+ cacheModeSet.add(cacheMode.ASYNC);
+ try {
+ c2 = (CacheImpl<String, Integer>) cm.createCache(containerName, cacheName2, cacheModeSet);
+ } catch (CacheExistException cee) {
+ fail("Attempted to create cache " + cacheName2 + " with illegal cache modes set " + cacheModeSet);
+ } catch (CacheConfigException cce) {
+
+ }
+
+ // Create second cache properly this time, as non_transactional and
+ // ASYNC
+ cacheModeSet.remove(cacheMode.SYNC);
+ try {
+ c2 = (CacheImpl<String, Integer>) cm.createCache(containerName,
+ cacheName2, cacheModeSet);
+ } catch (CacheExistException | CacheConfigException e) {
+ fail("Failed to create cache " + cacheName + " though it was supposed to succeed." + e);
+ }
+
+ // Make sure correct caches exists
+ Assert.assertTrue(cm.existCache(containerName, cacheName));
+ c1 = (CacheImpl<String, Integer>) cm.getCache(containerName, cacheName);
+ Assert.assertNotNull(c1);
+
+ Assert.assertTrue(cm.existCache(containerName, cacheName2));
+ c2 = (CacheImpl<String, Integer>) cm.getCache(containerName, cacheName2);
+ Assert.assertNotNull(c2);
+
+ Assert.assertNull(cm.getCache(containerName, "Cache3"));
+
+ // Get CacheList
+ HashSet<String> cacheList = (HashSet<String>) cm
+ .getCacheList("Container2");
+ Assert.assertEquals(0, cacheList.size());
+
+ cacheList = (HashSet<String>) cm.getCacheList(containerName);
+ Assert.assertEquals(2, cacheList.size());
+ Assert.assertTrue(cacheList.contains(cacheName));
+ Assert.assertTrue(cacheList.contains(cacheName2));
+
+ // Get CacheProperties
+ Assert.assertNull(cm.getCacheProperties(containerName, ""));
+ Properties p = cm.getCacheProperties(containerName, cacheName);
+ Assert.assertEquals(3, p.size());
+ Assert.assertNotNull(p
+ .getProperty(IClusterServices.cacheProps.TRANSACTION_PROP
+ .toString()));
+ Assert.assertNotNull(p
+ .getProperty(IClusterServices.cacheProps.CLUSTERING_PROP
+ .toString()));
+ Assert.assertNotNull(p
+ .getProperty(IClusterServices.cacheProps.LOCKING_PROP
+ .toString()));
+
+ // Destroy cache1 and make sure it's gone
+ cm.destroyCache(containerName, cacheName);
+ cm.destroyCache(containerName, "Cache3");
+ Assert.assertFalse(cm.existCache(containerName, cacheName));
+ Assert.assertTrue(cm.existCache(containerName, cacheName2));
+
+ // Check amIStandBy()
+ boolean standby = cm.amIStandby();
+ Assert.assertFalse(standby);
+
+ // Check addresses, which are all loopback
+ InetAddress activeAddress = cm.getActiveAddress();
+ Assert.assertEquals("/127.0.0.1", activeAddress.toString());
+ InetAddress myAddress = cm.getMyAddress();
+ Assert.assertEquals("/127.0.0.1", myAddress.toString());
+
+ List<InetAddress> cc = cm.getClusteredControllers();
+ Assert.assertEquals(0, cc.size());
+
+ cm.stop();
+ }
+
+}