/* * Copyright (c) 2008-2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.client.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import com.emc.storageos.coordinator.client.model.Constants; import com.emc.storageos.coordinator.client.model.Site; import com.emc.storageos.coordinator.client.service.CoordinatorClient; import com.emc.storageos.coordinator.client.service.impl.CoordinatorClientImpl; import com.emc.storageos.coordinator.common.Configuration; import com.emc.storageos.coordinator.common.impl.ConfigurationImpl; import com.emc.storageos.db.client.model.StringMap; // These tests cannot run without services running on the system. It is ignored by default for the benefit of CoprHD and public unit testing. @Ignore public class VdcConfigUtilTest { private static VdcConfigUtil vdcConfigUtil; @BeforeClass public static void setup() { CoordinatorClient coordinatorClient = new VdcCoordinatorClient(); vdcConfigUtil = new VdcConfigUtil(coordinatorClient); } @Test public void testGenProperties() { Map<String, String> vdcConfig = vdcConfigUtil.genVdcProperties(); // the signature is assertEquals(String expected, String actual) Assert.assertEquals("vdc2", vdcConfig.get(VdcConfigUtil.VDC_MYID)); Assert.assertEquals("vdc1,vdc2,vdc3", vdcConfig.get(VdcConfigUtil.VDC_IDS)); Assert.assertEquals("3", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_NODE_COUNT_PTN, "vdc1", "site1"))); Assert.assertEquals("5", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_NODE_COUNT_PTN, "vdc2", "site1"))); Assert.assertEquals("1", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_NODE_COUNT_PTN, "vdc3", "site1"))); Assert.assertEquals("1.1.1.1", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc1", "site1", 1))); Assert.assertEquals("1.1.1.2", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc1", "site1", 2))); Assert.assertEquals("1.1.1.3", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc1", "site1", 3))); Assert.assertEquals("2.1.1.1", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc2", "site1", 1))); Assert.assertEquals("2.1.1.2", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc2", "site1", 2))); Assert.assertEquals("2.1.1.3", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc2", "site1", 3))); Assert.assertEquals("2.1.1.4", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc2", "site1", 4))); Assert.assertEquals("2.1.1.5", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc2", "site1", 5))); Assert.assertEquals("3.1.1.1", vdcConfig.get(String.format(VdcConfigUtil.VDC_SITE_IPADDR_PTN, "vdc3", "site1", 1))); Assert.assertEquals("site1", vdcConfig.get(VdcConfigUtil.SITE_IDS)); Assert.assertEquals("false", vdcConfig.get(VdcConfigUtil.SITE_IS_STANDBY)); Assert.assertEquals("site1", vdcConfig.get(VdcConfigUtil.SITE_MYID)); } private static class VdcCoordinatorClient extends CoordinatorClientImpl { private Map<String, List<Configuration>> vdcSiteMap = new HashMap<>(); public VdcCoordinatorClient() { String siteId = "11111111-1111-1111-1111-111111111111"; Site site = new Site(); site.setUuid(siteId); site.setVdcShortId("vdc1"); site.setNodeCount(3); site.setSiteShortId("site1"); site.setHostIPv4AddressMap(new StringMap() { { put("node1", "1.1.1.1"); put("node2", "1.1.1.2"); put("node3", "1.1.1.3"); } }); List<Configuration> siteList = new ArrayList<>(); siteList.add(site.toConfiguration()); vdcSiteMap.put("vdc1", siteList); siteId = "22222222-2222-2222-2222-222222222222"; site = new Site(); site.setUuid(siteId); site.setVdcShortId("vdc2"); site.setNodeCount(5); site.setSiteShortId("site1"); site.setHostIPv4AddressMap(new StringMap() { { put("node1", "2.1.1.1"); put("node2", "2.1.1.2"); put("node3", "2.1.1.3"); put("node4", "2.1.1.4"); put("node5", "2.1.1.5"); } }); siteList = new ArrayList<>(); siteList.add(site.toConfiguration()); vdcSiteMap.put("vdc2", siteList); siteId = "33333333-3333-3333-3333-333333333333"; site = new Site(); site.setUuid(siteId); site.setVdcShortId("vdc3"); site.setNodeCount(1); site.setSiteShortId("site1"); site.setHostIPv4AddressMap(new StringMap() { { put("node1", "3.1.1.1"); } }); siteList = new ArrayList<>(); siteList.add(site.toConfiguration()); vdcSiteMap.put("vdc3", siteList); } @Override public String getSiteId() { return "22222222-2222-2222-2222-222222222222"; } @Override public Configuration queryConfiguration(String kind, String id) { ConfigurationImpl configuration = new ConfigurationImpl(); switch(kind) { case Constants.CONFIG_DR_ACTIVE_KIND: switch(id) { case "vdc1": configuration.setConfig(Constants.CONFIG_DR_ACTIVE_SITEID, "11111111-1111-1111-1111-111111111111"); break; case "vdc2": configuration.setConfig(Constants.CONFIG_DR_ACTIVE_SITEID, "22222222-2222-2222-2222-222222222222"); break; case "vdc3": configuration.setConfig(Constants.CONFIG_DR_ACTIVE_SITEID, "33333333-3333-3333-3333-333333333333"); break; } break; case Constants.CONFIG_GEO_LOCAL_VDC_KIND: configuration.setConfig(Constants.CONFIG_GEO_LOCAL_VDC_SHORT_ID, "vdc2"); break; default: String[] kindSplits = kind.split("/"); if (kindSplits.length == 2 && kindSplits[0].equals(Site.CONFIG_KIND)) { List<Configuration> siteList = vdcSiteMap.get(kindSplits[1]); for (Configuration site : siteList) { if (site.getId().equals(id)) { return site; } } return null; } throw new UnsupportedOperationException(String.format("Unsupported configuration kind: %s", kind)); } return configuration; } @Override public List<Configuration> queryAllConfiguration(String kind) { String[] kindSplits = kind.split("/"); if (!kindSplits[0].equals(Site.CONFIG_KIND)) { throw new UnsupportedOperationException(String.format("Unsupported configuration kind: %s", kind)); } if (kindSplits.length == 1) { // return a list of VDCs List<Configuration> vdcConfigs = new ArrayList<>(); ConfigurationImpl config = new ConfigurationImpl(); config.setId("vdc1"); vdcConfigs.add(config); config = new ConfigurationImpl(); config.setId("vdc2"); vdcConfigs.add(config); config = new ConfigurationImpl(); config.setId("vdc3"); vdcConfigs.add(config); return vdcConfigs; } // return a list of sites return vdcSiteMap.get(kindSplits[1]); } } }