/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.server.upgrade.impl.callback; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.db.client.model.VirtualPool; import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback; import com.emc.storageos.db.client.upgrade.callbacks.VirtualPoolExpandableMigration; import com.emc.storageos.db.server.DbsvcTestBase; import com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase; import org.junit.Assert; import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Unit test for VirtualPoolExpandableMigration procedure */ public class VirtualPoolExpandableMigrationTest extends DbSimpleMigrationTestBase { private static final Logger log = LoggerFactory.getLogger(VirtualPoolExpandableMigrationTest.class); @BeforeClass public static void setup() throws IOException { /** * Define a custom migration callback map. * The key should be the source version from getSourceVersion(). * The value should be a list of migration callbacks under test. */ customMigrationCallbacks.put("1.1", new ArrayList<BaseCustomMigrationCallback>() { { add(new VirtualPoolExpandableMigration()); } }); DbsvcTestBase.setup(); } @Override protected String getSourceVersion() { return "1.1"; } @Override protected String getTargetVersion() { return "2.0"; } @Override protected void prepareData() throws Exception { // clean up before the test log.info("Start data preparation for VirtualPool instances. "); deleteVirtualPools(); List<VirtualPool> vpList = new ArrayList<VirtualPool>(); VirtualPool vpExpandable = new VirtualPool(); vpExpandable.setId(URIUtil.createId(VirtualPool.class)); VirtualPool vpNonExpandable = new VirtualPool(); vpNonExpandable.setId(URIUtil.createId(VirtualPool.class)); VirtualPool vpNonExpandableWithMirrors = new VirtualPool(); vpNonExpandableWithMirrors.setId(URIUtil.createId(VirtualPool.class)); vpList.add(vpExpandable); vpList.add(vpNonExpandable); vpList.add(vpNonExpandableWithMirrors); vpExpandable.setNonDisruptiveExpansion(true); vpNonExpandable.setNonDisruptiveExpansion(false); vpNonExpandableWithMirrors.setNonDisruptiveExpansion(false); vpNonExpandableWithMirrors.setMaxNativeContinuousCopies(3); _dbClient.createObject(vpList); log.info("End data preparation for VirtualPool instances. "); } @Override protected void verifyResults() throws Exception { List<URI> vpURIs = _dbClient.queryByType(VirtualPool.class, false); Iterator<VirtualPool> vpIter = _dbClient.queryIterativeObjects(VirtualPool.class, vpURIs); while (vpIter.hasNext()) { VirtualPool vp = vpIter.next(); log.info(String.format( "Verifying VirtualPool %s, nonDisruptiveExpansion: %s, local mirrors: %s, expandable: %s, fastExpansion; %s", vp.getId().toString(), vp.getNonDisruptiveExpansion(), vp.getMaxNativeContinuousCopies(), vp.getExpandable(), vp.getFastExpansion())); if (vp.getNonDisruptiveExpansion()) { Assert.assertTrue("For vpool with nonDisruptiveExpansion true, expandable and fastExpansion properties should be true.", vp.getExpandable() && vp.getFastExpansion()); } else if (VirtualPool.vPoolSpecifiesMirrors(vp, _dbClient)) { Assert.assertTrue("For vpool which specifies local mirrors, expandable and fastExpansion properties should be both false.", !(vp.getExpandable() || vp.getFastExpansion())); } else { Assert.assertTrue( "For vpool with nonDisruptiveExpansion false and no local mirrors, expandable should be false and fastExpansion" + " should be false.", !(vp.getExpandable() || vp.getFastExpansion())); } } // clean up after the test deleteVirtualPools(); } private void deleteVirtualPools() { List<URI> vpURIs = _dbClient.queryByType(VirtualPool.class, false); Iterator<VirtualPool> vpIter = _dbClient.queryIterativeObjects(VirtualPool.class, vpURIs); while (vpIter.hasNext()) { _dbClient.removeObject(vpIter.next()); } } }