/* * Copyright (c) 2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.server.upgrade.impl.callback; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.BeforeClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.db.client.model.Network; import com.emc.storageos.db.client.model.StringSet; import com.emc.storageos.db.client.model.VirtualArray; import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback; import com.emc.storageos.db.client.upgrade.callbacks.NetworkVarrayIndexMigration; import com.emc.storageos.db.client.util.CustomQueryUtility; import com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase; /** * @author cgarber * */ public class NetworkVarrayIndexMigrationTest extends DbSimpleMigrationTestBase { private static final Logger logger = LoggerFactory.getLogger(NetworkVarrayIndexMigrationTest.class); private VirtualArray virtualArray1; private VirtualArray virtualArray2; private Network network; @BeforeClass public static void setup() throws IOException { customMigrationCallbacks.put("1.1", new ArrayList<BaseCustomMigrationCallback>() { private static final long serialVersionUID = 1L; { // Add your implementation of migration callback below. add(new NetworkVarrayIndexMigration()); } }); DbSimpleMigrationTestBase.initialSetup(new AlterSchema() { @Override protected void process() { replaceIndexCf(Network.class, "assignedVirtualArrays", "RelationIndex"); replaceIndexCf(Network.class, "connectedVirtualArrays", "RelationIndex"); } }); } /* * (non-Javadoc) * * @see com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase#getSourceVersion() */ @Override protected String getSourceVersion() { return "1.1"; } /* * (non-Javadoc) * * @see com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase#getTargetVersion() */ @Override protected String getTargetVersion() { return "2.0"; } /* * (non-Javadoc) * * @see com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase#prepareData() */ @Override protected void prepareData() throws Exception { DbClient dbClient = getDbClient(); virtualArray1 = new VirtualArray(); virtualArray1.setId(URIUtil.createId(VirtualArray.class)); virtualArray1.setLabel("varray1"); dbClient.createObject(virtualArray1); network = new Network(); network.setId(URIUtil.createId(Network.class)); network.setLabel("networkObj"); StringSet varrayStrSet1 = new StringSet(); varrayStrSet1.add(virtualArray1.getId().toString()); network.setAssignedVirtualArrays(varrayStrSet1); virtualArray2 = new VirtualArray(); virtualArray2.setId(URIUtil.createId(VirtualArray.class)); virtualArray2.setLabel("varray2"); dbClient.createObject(virtualArray2); StringSet varrayStrSet2 = new StringSet(); varrayStrSet2.add(virtualArray1.getId().toString()); varrayStrSet2.add(virtualArray2.getId().toString()); network.setConnectedVirtualArrays(varrayStrSet2); dbClient.createObject(network); // prove that we've reproduced the problem List<Network> assignedNetworks = CustomQueryUtility.queryActiveResourcesByRelation( dbClient, virtualArray2.getId(), Network.class, "assignedVirtualArrays"); // should be false once the index is fixed Assert.assertTrue(assignedNetworks.iterator().hasNext()); } /* * (non-Javadoc) * * @see com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase#verifyResults() */ @Override protected void verifyResults() throws Exception { DbClient dbClient = getDbClient(); List<Network> assignedNetworks = CustomQueryUtility.queryActiveResourcesByRelation( dbClient, virtualArray1.getId(), Network.class, "assignedVirtualArrays"); Assert.assertTrue(assignedNetworks.iterator().hasNext()); Assert.assertEquals(assignedNetworks.size(), 1); List<Network> connectedNetworks = CustomQueryUtility.queryActiveResourcesByRelation( dbClient, virtualArray2.getId(), Network.class, "connectedVirtualArrays"); Assert.assertTrue(connectedNetworks.iterator().hasNext()); Assert.assertEquals(connectedNetworks.size(), 1); connectedNetworks.clear(); connectedNetworks = CustomQueryUtility.queryActiveResourcesByRelation( dbClient, virtualArray1.getId(), Network.class, "connectedVirtualArrays"); Assert.assertTrue(connectedNetworks.iterator().hasNext()); Assert.assertEquals(connectedNetworks.size(), 1); assignedNetworks.clear(); assignedNetworks = CustomQueryUtility.queryActiveResourcesByRelation( dbClient, virtualArray2.getId(), Network.class, "assignedVirtualArrays"); Assert.assertFalse(assignedNetworks.iterator().hasNext()); } }