package com.redhat.lightblue.migrator;
import java.util.Map;
import org.junit.Test;
import org.junit.Assert;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.redhat.lightblue.client.LightblueClient;
import com.redhat.lightblue.client.Projection;
import com.redhat.lightblue.client.Query;
import com.redhat.lightblue.client.http.LightblueHttpClient;
import com.redhat.lightblue.client.request.data.DataDeleteRequest;
import com.redhat.lightblue.client.request.data.DataFindRequest;
import com.redhat.lightblue.client.response.LightblueResponse;
import static com.redhat.lightblue.util.test.AbstractJsonNodeTest.loadJsonNode;
public class FailTest extends AbstractMigratorController {
private String versionMigrationJob;
private String versionMigrationConfiguration;
private String versionSourceCustomer;
private String versionDestinationCustomer;
public FailTest() throws Exception {
}
@Override
protected JsonNode[] getMetadataJsonNodes() throws Exception {
ObjectNode jsonActiveExecution = (ObjectNode) loadJsonNode("./activeExecution.json");
ObjectNode jsonMigrationJob = (ObjectNode) loadJsonNode("./migrationJob.json");
ObjectNode jsonMigrationConfiguration = (ObjectNode) loadJsonNode("./migrationConfiguration.json");
ObjectNode jsonSourceCustomer = (ObjectNode) loadJsonNode("./test/metadata/source-customer.json");
ObjectNode jsonDestinationCustomer = (ObjectNode) loadJsonNode("./test/metadata/destination-customer.json");
versionMigrationJob = parseEntityVersion(jsonMigrationJob);
versionMigrationConfiguration = parseEntityVersion(jsonMigrationConfiguration);
versionSourceCustomer = parseEntityVersion(jsonSourceCustomer);
versionDestinationCustomer = parseEntityVersion(jsonDestinationCustomer);
return new JsonNode[]{
removeHooks(grantAnyoneAccess(jsonMigrationJob)),
removeHooks(grantAnyoneAccess(jsonMigrationConfiguration)),
removeHooks(grantAnyoneAccess(jsonActiveExecution)),
jsonSourceCustomer,
jsonDestinationCustomer
};
}
public void clearData() throws Exception {
LightblueClient cli = new LightblueHttpClient();
DataDeleteRequest req = new DataDeleteRequest("activeExecution", null);
req.where(Query.withValue("objectType", Query.BinOp.eq, "activeExecution"));
cli.data(req);
req = new DataDeleteRequest("migrationJob", null);
req.where(Query.withValue("objectType", Query.BinOp.eq, "migrationJob"));
cli.data(req);
req = new DataDeleteRequest("migrationConfiguration", null);
req.where(Query.withValue("objectType", Query.BinOp.eq, "migrationConfiguration"));
cli.data(req);
}
@Test
public void failTest() throws Exception {
clearData();
Breakpoint.clearAll();
loadData("migrationConfiguration", versionMigrationConfiguration, "./test/data/load-migration-configurations-failmigrator.json");
loadData("migrationJob", versionMigrationJob, "./test/data/load-migration-jobs.json");
MainConfiguration cfg = new MainConfiguration();
cfg.setName("continuum");
cfg.setHostName("hostname");
Controller controller = new Controller(cfg);
Breakpoint.stop("MigratorController::unlock");
System.out.println("failTest: Start controller");
controller.start();
System.out.println("failTest: controller started");
Map<String, Controller.MigrationProcess> prc = controller.getMigrationProcesses();
System.out.println("failTest: wait until unlock");
Breakpoint.waitUntil("MigratorController:unlock");
System.out.println("failTest: done");
// Here, it should have failed already
LightblueClient cli = new LightblueHttpClient();
DataFindRequest req = new DataFindRequest("migrationJob", null);
req.where(Query.withValue("objectType = migrationJob"));
req.select(Projection.includeFieldRecursively("jobExecutions.0.errorMsg"));
LightblueResponse resp = cli.data(req);
JsonNode node = resp.getJson();
System.out.println("Response:" + node);
JsonNode x = node.get("processed");
Assert.assertEquals(1, x.size());
x = x.get(0).get("jobExecutions").get(0).get("errorMsg");
Assert.assertNotNull(x.asText());
System.out.println("Error:" + x.asText());
Breakpoint.resume("MigratorController:unlock");
controller.getMigrationProcesses().get("customerMigration_0").mig.setStopped();
controller.interrupt();
Thread.sleep(100);
}
}