/* * Copyright (c) 2013-2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.server.upgrade.impl.callback; import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.junit.Assert; import org.junit.BeforeClass; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.db.client.model.DiscoveredDataObject.CompatibilityStatus; import com.emc.storageos.db.client.model.StoragePool; import com.emc.storageos.db.client.model.StoragePort; import com.emc.storageos.db.client.model.StorageSystem; import com.emc.storageos.db.server.DbsvcTestBase; import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback; import com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase; import com.emc.storageos.db.client.upgrade.callbacks.PoolsCompatibilityStatusMigration; import com.emc.storageos.db.client.upgrade.callbacks.PortsCompatibilityStatusMigration; public class PortPoolCompatibilityStatusMigrationTest extends DbSimpleMigrationTestBase { private final int INSTANCES_TO_CREATE = 5; @BeforeClass public static void setup() throws IOException { customMigrationCallbacks.put("1.0", new ArrayList<BaseCustomMigrationCallback>() { { add(new PoolsCompatibilityStatusMigration()); add(new PortsCompatibilityStatusMigration()); } }); DbsvcTestBase.setup(); } @Override protected String getSourceVersion() { return "1.0"; } @Override protected String getTargetVersion() { return "1.1"; } @Override protected void prepareData() throws Exception { createDataForCompatibilityStatus(CompatibilityStatus.COMPATIBLE.toString()); createDataForCompatibilityStatus(CompatibilityStatus.INCOMPATIBLE.toString()); createDataForCompatibilityStatus(CompatibilityStatus.UNKNOWN.toString()); createDataForCompatibilityStatus(null); } @Override protected void verifyResults() throws Exception { // verify ports data List<URI> portKeys = _dbClient.queryByType(StoragePort.class, false); int portCount = 0; Iterator<StoragePort> portObjs = _dbClient.queryIterativeObjects(StoragePort.class, portKeys); while (portObjs.hasNext()) { StoragePort port = portObjs.next(); portCount++; URI storageSystemURI = port.getStorageDevice(); StorageSystem storageSystem = _dbClient.queryObject(StorageSystem.class, storageSystemURI); Assert.assertNotNull("CompatibilityStatus shouldn't be null", port.getCompatibilityStatus()); Assert.assertEquals("CompatibilityStatus should equal parent storage system's compatibility status", storageSystem.getCompatibilityStatus(), port.getCompatibilityStatus()); } Assert.assertTrue("We should still have " + 4 * INSTANCES_TO_CREATE + " " + StoragePort.class.getSimpleName() + " after migration, not " + portCount, portCount == 4 * INSTANCES_TO_CREATE); // verify pools data List<URI> poolKeys = _dbClient.queryByType(StoragePool.class, false); int poolCount = 0; Iterator<StoragePool> poolObjs = _dbClient.queryIterativeObjects(StoragePool.class, poolKeys); while (poolObjs.hasNext()) { StoragePool pool = poolObjs.next(); poolCount++; URI storageSystemURI = pool.getStorageDevice(); StorageSystem storageSystem = _dbClient.queryObject(StorageSystem.class, storageSystemURI); Assert.assertNotNull("CompatibilityStatus shouldn't be null", pool.getCompatibilityStatus()); Assert.assertEquals("CompatibilityStatus should equal parent storage system's compatibility status", storageSystem.getCompatibilityStatus(), pool.getCompatibilityStatus()); } Assert.assertTrue("We should still have " + 4 * INSTANCES_TO_CREATE + " " + StoragePort.class.getSimpleName() + " after migration, not " + poolCount, poolCount == 4 * INSTANCES_TO_CREATE); } private void createDataForCompatibilityStatus(String compatibilityStatus) { // create storage system. StorageSystem parentSystem = new StorageSystem(); parentSystem.setId(URIUtil.createId(StorageSystem.class)); parentSystem.setCompatibilityStatus(compatibilityStatus); _dbClient.createObject(parentSystem); // create port data for (int i = 0; i < INSTANCES_TO_CREATE; i++) { StoragePort port = new StoragePort(); port.setId(URIUtil.createId(StoragePort.class)); port.setStorageDevice(parentSystem.getId()); port.setCompatibilityStatus("UNDEFINED"); _dbClient.createObject(port); } // create pool data for (int i = 0; i < INSTANCES_TO_CREATE; i++) { StoragePool port = new StoragePool(); port.setId(URIUtil.createId(StoragePool.class)); port.setStorageDevice(parentSystem.getId()); port.setCompatibilityStatus("UNDEFINED"); _dbClient.createObject(port); } } }