/* * Copyright (c) 2008-2013 EMC Corporation * All Rights Reserved */ package com.emc.storageos.db.server.upgrade.impl.callback; import java.net.URI; import java.util.Map; import java.util.HashMap; import java.util.List; import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.db.client.constraint.PrefixConstraint; import com.emc.storageos.db.client.model.Project; import com.emc.storageos.db.server.upgrade.DbMigrationTest; import com.emc.storageos.db.server.upgrade.util.DbSchemaChanger; /** * Add "@PrefixIndex" to Project.getOwner() */ public class AddPrefixToProjectOwner extends DbMigrationTest { private static final Logger log = LoggerFactory.getLogger(AddPrefixToProjectOwner.class); @Override public String getSourceSchemaVersion() { return "1.0"; } @Override public String getTargetSchemaVersion() { return "1.1"; } @Override public void changeSourceSchema() throws Exception { } @Override public void verifySourceSchema() throws Exception { } @Override public void changeTargetSchema() throws Exception { Map<String, Object> values = new HashMap(); values.put("cf", "foo"); changer = new DbSchemaChanger("com.emc.storageos.db.client.model.Project"); changer.beginChange() .addAnnotation("getOwner", "com.emc.storageos.db.client.model.PrefixIndex", values) .endChange(); } @Override public void verifyTargetSchema() throws Exception { changer.verifyAnnotation("getOwner", "com.emc.storageos.db.client.model.PrefixIndex"); } @Override protected void prepareData() throws Exception { // prepare a Project object for migration Project project = new Project(); project.setId(URIUtil.createId(Project.class)); project.setLabel("project1"); project.setOwner("foo1"); dbClient.createObject(project); } @Override protected void verifyPreparedData() throws Exception { // make sure that the Project object is persisted List<URI> ids = dbClient.queryByType(Project.class, true); Project project = null; int count = 0; for (URI id : ids) { project = dbClient.queryObject(Project.class, id); count++; } Assert.assertNotNull(project); Assert.assertEquals(count, 1); } @Override protected void verifyResults() throws Exception { // Check results after migration Class clazz = Class.forName("com.emc.storageos.db.client.model.Project"); List<URI> ids = dbClient.queryByConstraint(PrefixConstraint.Factory.getConstraint(clazz, "owner", "fo")); Assert.assertEquals(1, ids.size()); } }