/*
* 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.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import com.emc.storageos.db.client.impl.DbClientImpl;
import com.emc.storageos.db.server.upgrade.DbSimpleMigrationTestBase;
import org.junit.Assert;
import org.junit.BeforeClass;
import com.emc.storageos.db.client.URIUtil;
import com.emc.storageos.db.client.model.ExportGroup;
import com.emc.storageos.db.client.model.ExportGroup.ExportGroupType;
import com.emc.storageos.db.client.upgrade.BaseCustomMigrationCallback;
import com.emc.storageos.db.client.upgrade.callbacks.ExportGroupTypeConverter;
import com.emc.storageos.db.server.DbsvcTestBase;
/**
* Test proper conversion of the type field for ExportGroup
*/
public class ExportGroupTypeMigrationTest extends DbSimpleMigrationTestBase {
private static final String OLD_TYPE_VALUE = "Exclusive";
@BeforeClass
public static void setup() throws IOException {
customMigrationCallbacks.put("1.0", new ArrayList<BaseCustomMigrationCallback>() {
{
add(new ExportGroupTypeConverter());
}
});
DbsvcTestBase.setup();
}
@Override
protected String getSourceVersion() {
return "1.0";
}
@Override
protected String getTargetVersion() {
return "1.1";
}
@Override
protected void prepareData() throws Exception {
// make sure no existing export groups, so we can use label
deleteExportGroups();
// key - export group type string to be tested, value - expected
// ExportGroupType
Map<String, ExportGroupType> typeMap = new HashMap<String, ExportGroupType>();
typeMap.put(OLD_TYPE_VALUE, ExportGroupType.Initiator);
for (ExportGroupType type : ExportGroupType.values()) {
typeMap.put(type.name(), type);
}
for (Entry<String, ExportGroupType> entry : typeMap.entrySet()) {
ExportGroup exportGroup = new ExportGroup();
exportGroup.setId(URIUtil.createId(ExportGroup.class));
String type = entry.getKey();
exportGroup.setType(type);
exportGroup.setLabel(entry.getValue().name());
System.out.println("creating ExportGroup " + exportGroup.getId().toString());
_dbClient.createObject(exportGroup);
}
}
@Override
protected void verifyResults() throws Exception {
List<URI> exportGroupURIs = _dbClient.queryByType(ExportGroup.class,
false);
Iterator<ExportGroup> exportGroupsIter = _dbClient
.queryIterativeObjects(ExportGroup.class, exportGroupURIs);
while (exportGroupsIter.hasNext()) {
ExportGroup exportGroup = exportGroupsIter.next();
System.out.println("verifying ExportGroup " + exportGroup.getId().toString());
Assert.assertEquals(exportGroup.getLabel(), exportGroup.getType());
}
deleteExportGroups();
}
private void deleteExportGroups() {
List<URI> exportGroupURIs = _dbClient.queryByType(ExportGroup.class,
false);
Iterator<ExportGroup> exportGroupsIter = _dbClient.queryIterativeObjects(ExportGroup.class,
exportGroupURIs);
List<ExportGroup> exportGroups = new ArrayList<ExportGroup>();
while (exportGroupsIter.hasNext()) {
// add to list to be deleted
exportGroups.add(exportGroupsIter.next());
}
// delete all objects in the list
_dbClient.removeObject(exportGroups
.toArray(new ExportGroup[exportGroups.size()]));
}
// set dbClient from outside, so the class can be used in stand alone test
public void setDbClient(DbClientImpl dbClient) {
_dbClient = dbClient;
}
}