/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.sa.model.suite;
import java.net.URI;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.junit.Assert;
import org.junit.Test;
import com.emc.sa.model.BaseModelTest;
import com.emc.storageos.db.client.model.uimodels.CatalogService;
import com.emc.storageos.db.client.model.uimodels.ExecutionLog;
import com.emc.storageos.db.client.model.uimodels.ExecutionLog.LogLevel;
import com.emc.storageos.db.client.model.uimodels.ExecutionState;
import com.emc.storageos.db.client.model.uimodels.ExecutionStatus;
import com.emc.storageos.db.client.model.uimodels.ExecutionWindow;
import com.emc.storageos.db.client.model.uimodels.Order;
import com.emc.storageos.db.client.model.uimodels.OrderStatus;
import com.emc.sa.model.dao.ModelClient;
import com.emc.storageos.db.client.URIUtil;
import com.emc.storageos.db.client.model.NamedURI;
public class OrderTest extends BaseModelTest<Order> {
private static final Logger _logger = Logger.getLogger(OrderTest.class);
public OrderTest() {
super(Order.class);
}
@Test
public void testPersistObject() throws Exception {
_logger.info("Starting persist Order test");
Order model = new Order();
model.setLabel("foo");
URI catalogServiceId = URIUtil.createId(CatalogService.class);
model.setCatalogServiceId(catalogServiceId);
Date d = new Date();
model.setDateCompleted(d);
URI executionStateId = URIUtil.createId(ExecutionState.class);
model.setExecutionStateId(executionStateId);
model.setMessage("my message");
model.setOrderStatus(OrderStatus.CANCELLED.name());
model.setSummary("my summary");
model.setSubmittedByUserId("my user");
model.setTenant(DEFAULT_TENANT);
save(model);
model = findById(model.getId());
Assert.assertNotNull(model);
Assert.assertEquals("foo", model.getLabel());
Assert.assertEquals(catalogServiceId, model.getCatalogServiceId());
Assert.assertEquals(d, model.getDateCompleted());
Assert.assertEquals(executionStateId, model.getExecutionStateId());
Assert.assertEquals("my message", model.getMessage());
Assert.assertEquals(OrderStatus.CANCELLED.name(), model.getOrderStatus());
Assert.assertEquals("my user", model.getSubmittedByUserId());
Assert.assertEquals("my summary", model.getSummary());
Assert.assertEquals(DEFAULT_TENANT, model.getTenant());
}
@Test
public void testSaveOrderAndExecutionState() throws Exception {
_logger.info("Starting save Order and Execution State test");
ModelClient modelClient = getModelClient();
Order model = new Order();
model.setLabel("foo");
URI catalogServiceId = new URI("urn:CatalogService:1");
model.setCatalogServiceId(catalogServiceId);
Date d = new Date();
model.setDateCompleted(d);
model.setMessage("my message");
model.setOrderStatus(OrderStatus.CANCELLED.name());
model.setSubmittedByUserId("urn:User:1");
model.setSummary("my summary");
ExecutionState executionState = new ExecutionState();
executionState.setExecutionStatus(ExecutionStatus.NONE.name());
executionState.setStartDate(d);
executionState.setCurrentTask("my task");
modelClient.save(executionState);
model.setExecutionStateId(executionState.getId());
ExecutionLog executionLog1 = new ExecutionLog();
executionLog1.setLevel(LogLevel.DEBUG.name());
executionLog1.setMessage("my message 1");
modelClient.save(executionLog1);
executionState.addExecutionLog(executionLog1);
ExecutionLog executionLog2 = new ExecutionLog();
executionLog2.setLevel(LogLevel.ERROR.name());
executionLog2.setMessage("my message 2");
modelClient.save(executionLog2);
executionState.addExecutionLog(executionLog2);
modelClient.save(executionState);
save(model);
Order order = findById(model.getId());
Assert.assertNotNull(order);
Assert.assertEquals("foo", order.getLabel());
Assert.assertEquals(catalogServiceId, order.getCatalogServiceId());
Assert.assertEquals(d, order.getDateCompleted());
Assert.assertEquals(executionState.getId(), order.getExecutionStateId());
Assert.assertEquals("my message", order.getMessage());
Assert.assertEquals(OrderStatus.CANCELLED.name(), order.getOrderStatus());
Assert.assertEquals("urn:User:1", order.getSubmittedByUserId());
Assert.assertEquals("my summary", order.getSummary());
ExecutionState exeState = modelClient.executionStates().findById(order.getExecutionStateId());
Assert.assertNotNull(exeState);
Assert.assertEquals(ExecutionStatus.NONE.name(), exeState.getExecutionStatus());
Assert.assertEquals(d, exeState.getStartDate());
Assert.assertEquals(2, exeState.getLogIds().size());
List<ExecutionLog> logs = modelClient.executionLogs().findByIds(exeState.getLogIds());
Assert.assertNotNull(logs);
Assert.assertEquals(2, logs.size());
}
@Test
public void testFindScheduledByExecutionWindow() {
_logger.info("Starting save Order and Execution State test");
ModelClient modelClient = getModelClient();
NamedURI ewId1 = new NamedURI(URIUtil.createId(ExecutionWindow.class), "ewId1");
NamedURI ewId2 = new NamedURI(URIUtil.createId(ExecutionWindow.class), "ewId2");
Order o1 = createOrder(OrderStatus.PENDING);
o1.setExecutionWindowId(ewId1);
modelClient.save(o1);
Order o2 = createOrder(OrderStatus.SCHEDULED);
o2.setExecutionWindowId(ewId2);
modelClient.save(o2);
Order o3 = createOrder(OrderStatus.SCHEDULED);
o3.setExecutionWindowId(ewId1);
modelClient.save(o3);
List<Order> orders = modelClient.orders().findScheduledByExecutionWindow(ewId2.getURI().toString());
Assert.assertNotNull(orders);
Assert.assertEquals(1, orders.size());
orders = modelClient.orders().findScheduledByExecutionWindow(ewId1.getURI().toString());
Assert.assertNotNull(orders);
Assert.assertEquals(1, orders.size());
}
@Test
public void testFindByOrderStatus() {
_logger.info("Starting findByOrderStatus test");
ModelClient modelClient = getModelClient();
Order o1 = create("t1", OrderStatus.APPROVAL);
modelClient.save(o1);
Order o2 = create("t1", OrderStatus.APPROVAL);
modelClient.save(o2);
Order o3 = create("t1", OrderStatus.PENDING);
modelClient.save(o3);
Order o4 = create("t2", OrderStatus.APPROVAL);
modelClient.save(o4);
Order o5 = create("t2", OrderStatus.PENDING);
modelClient.save(o5);
Order o6 = create("t3", OrderStatus.PENDING);
modelClient.save(o6);
List<Order> orders = modelClient.orders().findByOrderStatus("t1", OrderStatus.APPROVAL);
Assert.assertNotNull(orders);
Assert.assertEquals(2, orders.size());
orders = modelClient.orders().findByOrderStatus("t1", OrderStatus.PENDING);
Assert.assertNotNull(orders);
Assert.assertEquals(1, orders.size());
orders = modelClient.orders().findByOrderStatus("t1", OrderStatus.SCHEDULED);
Assert.assertNotNull(orders);
Assert.assertEquals(0, orders.size());
orders = modelClient.orders().findByOrderStatus("t2", OrderStatus.APPROVAL);
Assert.assertNotNull(orders);
Assert.assertEquals(1, orders.size());
orders = modelClient.orders().findByOrderStatus("t2", OrderStatus.PENDING);
Assert.assertNotNull(orders);
Assert.assertEquals(1, orders.size());
orders = modelClient.orders().findByOrderStatus("t2", OrderStatus.SCHEDULED);
Assert.assertNotNull(orders);
Assert.assertEquals(0, orders.size());
orders = modelClient.orders().findByOrderStatus("t3", OrderStatus.APPROVAL);
Assert.assertNotNull(orders);
Assert.assertEquals(0, orders.size());
orders = modelClient.orders().findByOrderStatus("t3", OrderStatus.PENDING);
Assert.assertNotNull(orders);
Assert.assertEquals(1, orders.size());
orders = modelClient.orders().findByOrderStatus("t3", OrderStatus.SCHEDULED);
Assert.assertNotNull(orders);
Assert.assertEquals(0, orders.size());
}
private static Order createOrder(OrderStatus status) {
return create(DEFAULT_TENANT, status);
}
private static Order create(String tenant, OrderStatus status) {
Order model = new Order();
model.setLabel("foo");
URI catalogServiceId = URIUtil.createId(CatalogService.class);
model.setCatalogServiceId(catalogServiceId);
Date d = new Date();
model.setDateCompleted(d);
model.setMessage("my message");
model.setOrderStatus(status.name());
model.setSubmittedByUserId("urn:User:1");
model.setSummary("my summary");
model.setTenant(tenant);
return model;
}
}