/* * 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.Collections; 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.Network; import com.emc.storageos.db.client.model.VirtualArray; import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback; import com.emc.storageos.db.client.upgrade.callbacks.NetworkConnectedVirtualArraysMigration; import com.emc.storageos.db.server.DbsvcTestBase; import com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase; /** * Test proper population of the new assigned virtual arrays field * for Networks. */ public class NetworkConnectedVirtualArraysMigrationTest extends DbSimpleMigrationTestBase { // The URI of the varray array assigned to the test Network. private VirtualArray connectedVarray; private VirtualArray connectedAndassignedVarray; private VirtualArray assignedVarray; @BeforeClass public static void setup() throws IOException { customMigrationCallbacks.put("1.1", new ArrayList<BaseCustomMigrationCallback>() { { add(new NetworkConnectedVirtualArraysMigration()); } }); DbsvcTestBase.setup(); } @Override protected String getSourceVersion() { return "1.1"; } @Override protected String getTargetVersion() { return "2.0"; } @SuppressWarnings("deprecation") @Override protected void prepareData() throws Exception { Network networkAllNull; Network networkAssignedOnly; Network networkConnectedOnly; Network networkAssignedAndConnected; connectedVarray = new VirtualArray(); connectedVarray.setId(URIUtil.createId(VirtualArray.class)); connectedVarray.setLabel("connectedVarray"); _dbClient.createObject(connectedVarray); assignedVarray = new VirtualArray(); assignedVarray.setId(URIUtil.createId(VirtualArray.class)); assignedVarray.setLabel("assignedVarray"); _dbClient.createObject(assignedVarray); connectedAndassignedVarray = new VirtualArray(); connectedAndassignedVarray.setId(URIUtil.createId(VirtualArray.class)); connectedAndassignedVarray.setLabel("connectedAndassignedVarray"); _dbClient.createObject(connectedAndassignedVarray); networkAllNull = new Network(); networkAllNull.setId(URIUtil.createId(Network.class)); networkAllNull.setLabel("networkAllNull"); _dbClient.createObject(networkAllNull); networkAssignedOnly = new Network(); networkAssignedOnly.setId(URIUtil.createId(Network.class)); networkAssignedOnly.setLabel("networkAssignedOnly"); networkAssignedOnly.addAssignedVirtualArrays( Collections.singletonList(assignedVarray.getId().toString())); _dbClient.createObject(networkAssignedOnly); networkConnectedOnly = new Network(); networkConnectedOnly.setId(URIUtil.createId(Network.class)); networkConnectedOnly.setLabel("networkConnectedOnly"); networkConnectedOnly.addConnectedVirtualArrays( Collections.singletonList(connectedVarray.getId().toString())); _dbClient.createObject(networkConnectedOnly); networkAssignedAndConnected = new Network(); networkAssignedAndConnected.setId(URIUtil.createId(Network.class)); networkAssignedAndConnected.setLabel("networkAssignedAndConnected"); networkAssignedAndConnected.addAssignedVirtualArrays( Collections.singletonList(assignedVarray.getId().toString())); networkAssignedAndConnected.addAssignedVirtualArrays( Collections.singletonList(connectedAndassignedVarray.getId().toString())); networkAssignedAndConnected.addConnectedVirtualArrays( Collections.singletonList(connectedVarray.getId().toString())); networkAssignedAndConnected.addConnectedVirtualArrays( Collections.singletonList(connectedAndassignedVarray.getId().toString())); _dbClient.createObject(networkAssignedAndConnected); } @Override protected void verifyResults() throws Exception { List<URI> networkURIs = _dbClient.queryByType(Network.class, false); Iterator<Network> networksIter = _dbClient.queryIterativeObjects(Network.class, networkURIs); while (networksIter.hasNext()) { Network network = networksIter.next(); String networkLabel = network.getLabel(); if (network.getLabel().equals("networkAllNull")) { Assert.assertTrue(String.format("Network (label=%s) should have no assigned or connected varrays", networkLabel), ((network.getAssignedVirtualArrays() == null) && (network.getConnectedVirtualArrays() == null))); } else if (network.getLabel().equals("networkAssignedOnly")) { Assert.assertTrue(String.format("Network (label=%s) should have 1 assigned and 1 connected varray", networkLabel), ((network.getAssignedVirtualArrays().size() == 1) && (network.getConnectedVirtualArrays().size() == 1))); Assert.assertTrue(String.format("Network (label=%s) should have the same varray in assigned and connected", networkLabel), (network.getAssignedVirtualArrays().iterator().next().equals( network.getConnectedVirtualArrays().iterator().next()))); Assert.assertTrue(String.format("Network (label=%s) should have 'assignedVarray' in connected", networkLabel), (assignedVarray.getId().toString().equals( network.getConnectedVirtualArrays().iterator().next()))); } else if (network.getLabel().equals("networkConnectedOnly")) { Assert.assertTrue(String.format("Network (label=%s) should have no assigned varrays", networkLabel), (network.getAssignedVirtualArrays() == null)); Assert.assertTrue(String.format("Network (label=%s) should have 1 connected varray", networkLabel), (network.getConnectedVirtualArrays().size() == 1)); Assert.assertTrue(String.format("Network (label=%s) should have 'connectedVarray' in connected", networkLabel), (connectedVarray.getId().toString().equals( network.getConnectedVirtualArrays().iterator().next()))); } else if (network.getLabel().equals("networkAssignedAndConnected")) { Assert.assertTrue(String.format("Network (label=%s) should have 2 assigned varrays", networkLabel), (network.getAssignedVirtualArrays().size() == 2)); Assert.assertTrue(String.format("Network (label=%s) should have 3 connected varray", networkLabel), (network.getConnectedVirtualArrays().size() == 3)); Assert.assertTrue(String.format("Network (label=%s) should have 'assignedVarray' in connected", networkLabel), (network.getConnectedVirtualArrays().contains(assignedVarray.getId().toString()))); Assert.assertTrue(String.format("Network (label=%s) should have 'connectedVarray' in connected", networkLabel), (network.getConnectedVirtualArrays().contains(connectedVarray.getId().toString()))); Assert.assertTrue(String.format("Network (label=%s) should have 'connectedAndassignedVarray' in connected", networkLabel), (network.getConnectedVirtualArrays().contains(connectedAndassignedVarray.getId().toString()))); } } } }