/*
* Copyright (c) 2015 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.VirtualPoolAutoTieringPolicyMigration;
import com.emc.storageos.db.server.DbsvcTestBase;
import com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase;
public class VirtualPoolAutoTieringPolicyMigrationTest extends
DbSimpleMigrationTestBase {
private static final Logger logger = LoggerFactory.getLogger(VirtualPoolAutoTieringPolicyMigrationTest.class);
@BeforeClass
public static void setup() throws IOException {
customMigrationCallbacks.put("1.1", new ArrayList<BaseCustomMigrationCallback>() {
{
add(new VirtualPoolAutoTieringPolicyMigration());
}
});
DbsvcTestBase.setup();
}
@Override
protected String getSourceVersion() {
return "1.1";
}
@Override
protected String getTargetVersion() {
return "2.0";
}
@Override
protected void prepareData() throws Exception {
logger.info("Preparing data for virtual pool auto tiering policy migration test.");
// vpool with FAST policy set and uniquePolicyNames set to true
VirtualPool vpool1 = new VirtualPool();
URI vpool1URI = URIUtil.createId(VirtualPool.class);
vpool1.setId(vpool1URI);
vpool1.setAutoTierPolicyName("GOLD");
vpool1.setUniquePolicyNames(true);
_dbClient.createObject(vpool1);
// vpool with FAST policy set and uniquePolicyNames set to false
VirtualPool vpool2 = new VirtualPool();
URI vpool2URI = URIUtil.createId(VirtualPool.class);
vpool2.setId(vpool2URI);
vpool2.setAutoTierPolicyName("SILVER");
vpool2.setUniquePolicyNames(false);
_dbClient.createObject(vpool2);
// vpool without any FAST policy set
VirtualPool vpool3 = new VirtualPool();
URI vpool3URI = URIUtil.createId(VirtualPool.class);
vpool3.setId(vpool3URI);
_dbClient.createObject(vpool3);
VirtualPool vpool4 = new VirtualPool();
URI vpool4URI = URIUtil.createId(VirtualPool.class);
vpool4.setId(vpool4URI);
vpool4.setAutoTierPolicyName("SYMMETRIX+1234+FASTPOLICY+SILVER");
vpool4.setUniquePolicyNames(true);
_dbClient.createObject(vpool4);
VirtualPool vpool5 = new VirtualPool();
URI vpool5URI = URIUtil.createId(VirtualPool.class);
vpool5.setId(vpool5URI);
vpool5.setAutoTierPolicyName("SYMMETRIX+1234+FASTPOLICY+SILVER");
vpool5.setUniquePolicyNames(false);
_dbClient.createObject(vpool5);
}
@Override
protected void verifyResults() throws Exception {
logger.info("Verifying results for virtual pool auto tiering policy migration test.");
List<URI> vpoolUris = _dbClient.queryByType(VirtualPool.class, true);
Iterator<VirtualPool> vpools = _dbClient.queryIterativeObjects(VirtualPool.class, vpoolUris, true);
while (vpools.hasNext()) {
VirtualPool vpool = vpools.next();
if (vpool.getAutoTierPolicyName() != null
&& !vpool.getAutoTierPolicyName().isEmpty()) {
if (vpool.getAutoTierPolicyName().contains(VirtualPoolAutoTieringPolicyMigration.NATIVE_GUID_DELIMITER)) {
Assert.assertTrue(
"Unique policy names should be false if FAST policy nativeGuid is associated with the virtual pool",
!vpool.getUniquePolicyNames());
} else {
Assert.assertTrue(
"Unique policy names should be true if FAST policy is associated with the virtual pool",
vpool.getUniquePolicyNames());
}
}
}
}
}