/*
* Copyright (c) 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.DiscoveryStatus;
import com.emc.storageos.db.client.model.StoragePool;
import com.emc.storageos.db.client.model.StoragePort;
import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback;
import com.emc.storageos.db.client.upgrade.callbacks.StoragePoolDiscoveryStatusMigration;
import com.emc.storageos.db.client.upgrade.callbacks.StoragePortDiscoveryStatusMigration;
import com.emc.storageos.db.server.DbsvcTestBase;
import com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase;
public class PoolPortDiscoveryStatusMigrationTest extends
DbSimpleMigrationTestBase {
private final int INSTANCES_TO_CREATE = 5;
@BeforeClass
public static void setup() throws IOException {
customMigrationCallbacks.put("2.1", new ArrayList<BaseCustomMigrationCallback>() {
{
add(new StoragePoolDiscoveryStatusMigration());
add(new StoragePortDiscoveryStatusMigration());
}
});
DbsvcTestBase.setup();
}
@Override
protected String getSourceVersion() {
return "2.1";
}
@Override
protected String getTargetVersion() {
return "2.2";
}
@Override
protected void prepareData() throws Exception {
createDataForDiscoveryStatus(DiscoveryStatus.VISIBLE.name());
createDataForDiscoveryStatus(DiscoveryStatus.NOTVISIBLE.name());
createDataForDiscoveryStatus(null);
}
private void createDataForDiscoveryStatus(String discoveryStatus) {
// create port data
for (int i = 0; i < INSTANCES_TO_CREATE; i++) {
StoragePort port = new StoragePort();
port.setId(URIUtil.createId(StoragePort.class));
port.setDiscoveryStatus(discoveryStatus);
_dbClient.createObject(port);
}
// create pool data
for (int i = 0; i < INSTANCES_TO_CREATE; i++) {
StoragePool pool = new StoragePool();
pool.setId(URIUtil.createId(StoragePool.class));
pool.setDiscoveryStatus(discoveryStatus);
_dbClient.createObject(pool);
}
}
@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++;
Assert.assertNotNull("DiscoveryStatus shouldn't be null", port.getDiscoveryStatus());
Assert.assertEquals("DiscoveryStatus should be VISIBLE", DiscoveryStatus.VISIBLE.name(),
port.getDiscoveryStatus());
}
Assert.assertTrue("We should still have " + 3 * INSTANCES_TO_CREATE + " " + StoragePort.class.getSimpleName()
+ " after migration, not " + portCount, portCount == 3 * 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++;
Assert.assertNotNull("DiscoveryStatus shouldn't be null", pool.getDiscoveryStatus());
Assert.assertEquals("DiscoveryStatus should equal VISIBLE", DiscoveryStatus.VISIBLE.name(),
pool.getDiscoveryStatus());
}
Assert.assertTrue("We should still have " + 3 * INSTANCES_TO_CREATE + " " + StoragePool.class.getSimpleName()
+ " after migration, not " + poolCount, poolCount == 3 * INSTANCES_TO_CREATE);
}
}