/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ambari.server.orm.dao;
import java.sql.SQLException;
import java.util.List;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.H2DatabaseCleaner;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
import org.apache.ambari.server.orm.entities.ClusterEntity;
import org.apache.ambari.server.orm.entities.HostEntity;
import org.apache.ambari.server.orm.entities.RequestScheduleBatchRequestEntity;
import org.apache.ambari.server.orm.entities.RequestScheduleEntity;
import org.apache.ambari.server.orm.entities.ResourceEntity;
import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
import org.apache.ambari.server.security.authorization.ResourceType;
import org.apache.ambari.server.state.scheduler.BatchRequest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import junit.framework.Assert;
public class RequestScheduleDAOTest {
private Injector injector;
private HostDAO hostDAO;
private ClusterDAO clusterDAO;
private RequestScheduleDAO requestScheduleDAO;
private RequestScheduleBatchRequestDAO batchRequestDAO;
private ResourceTypeDAO resourceTypeDAO;
private String testUri = "http://localhost/blah";
private String testBody = "ValidJson";
private String testType = BatchRequest.Type.POST.name();
@Before
public void setup() throws Exception {
injector = Guice.createInjector(new InMemoryDefaultTestModule());
injector.getInstance(GuiceJpaInitializer.class);
// required to load stacks into the DB
injector.getInstance(AmbariMetaInfo.class);
clusterDAO = injector.getInstance(ClusterDAO.class);
hostDAO = injector.getInstance(HostDAO.class);
clusterDAO = injector.getInstance(ClusterDAO.class);
requestScheduleDAO = injector.getInstance(RequestScheduleDAO.class);
batchRequestDAO = injector.getInstance(RequestScheduleBatchRequestDAO.class);
resourceTypeDAO = injector.getInstance(ResourceTypeDAO.class);
}
@After
public void teardown() throws AmbariException, SQLException {
H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
}
private RequestScheduleEntity createScheduleEntity() {
RequestScheduleEntity scheduleEntity = new RequestScheduleEntity();
// create an admin resource to represent this cluster
ResourceTypeEntity resourceTypeEntity = resourceTypeDAO.findById(ResourceType.CLUSTER.getId());
if (resourceTypeEntity == null) {
resourceTypeEntity = new ResourceTypeEntity();
resourceTypeEntity.setId(ResourceType.CLUSTER.getId());
resourceTypeEntity.setName(ResourceType.CLUSTER.name());
resourceTypeEntity = resourceTypeDAO.merge(resourceTypeEntity);
}
StackDAO stackDAO = injector.getInstance(StackDAO.class);
StackEntity stackEntity = stackDAO.find("HDP", "2.2.0");
ResourceEntity resourceEntity = new ResourceEntity();
resourceEntity.setResourceType(resourceTypeEntity);
ClusterEntity clusterEntity = new ClusterEntity();
clusterEntity.setClusterName("c1");
clusterEntity.setResource(resourceEntity);
clusterEntity.setDesiredStack(stackEntity);
clusterDAO.create(clusterEntity);
scheduleEntity.setClusterEntity(clusterEntity);
scheduleEntity.setClusterId(clusterEntity.getClusterId());
scheduleEntity.setStatus("SCHEDULED");
scheduleEntity.setMinutes("30");
scheduleEntity.setHours("12");
scheduleEntity.setDayOfWeek("*");
scheduleEntity.setDaysOfMonth("*");
scheduleEntity.setYear("*");
requestScheduleDAO.create(scheduleEntity);
HostEntity hostEntity = new HostEntity();
hostEntity.setHostName("h1");
hostEntity.setOsType("centOS");
hostDAO.create(hostEntity);
RequestScheduleBatchRequestEntity batchRequestEntity = new
RequestScheduleBatchRequestEntity();
batchRequestEntity.setBatchId(1L);
batchRequestEntity.setScheduleId(scheduleEntity.getScheduleId());
batchRequestEntity.setRequestScheduleEntity(scheduleEntity);
batchRequestEntity.setRequestScheduleEntity(scheduleEntity);
batchRequestEntity.setRequestType(testType);
batchRequestEntity.setRequestUri(testUri);
batchRequestEntity.setRequestBody(testBody);
batchRequestDAO.create(batchRequestEntity);
scheduleEntity.getRequestScheduleBatchRequestEntities().add
(batchRequestEntity);
scheduleEntity = requestScheduleDAO.merge(scheduleEntity);
return scheduleEntity;
}
@Test
public void testCreateRequestSchedule() throws Exception {
RequestScheduleEntity scheduleEntity = createScheduleEntity();
Assert.assertTrue(scheduleEntity.getScheduleId() > 0);
Assert.assertEquals("SCHEDULED", scheduleEntity.getStatus());
Assert.assertEquals("12", scheduleEntity.getHours());
RequestScheduleBatchRequestEntity batchRequestEntity = scheduleEntity
.getRequestScheduleBatchRequestEntities().iterator().next();
Assert.assertNotNull(batchRequestEntity);
Assert.assertEquals(testUri, batchRequestEntity.getRequestUri());
Assert.assertEquals(testType, batchRequestEntity.getRequestType());
Assert.assertEquals(testBody, batchRequestEntity.getRequestBodyAsString());
}
@Test
public void testFindById() throws Exception {
RequestScheduleEntity scheduleEntity = createScheduleEntity();
RequestScheduleEntity testScheduleEntity = requestScheduleDAO.findById
(scheduleEntity.getScheduleId());
Assert.assertEquals(scheduleEntity, testScheduleEntity);
}
@Test
public void testFindByStatus() throws Exception {
RequestScheduleEntity scheduleEntity = createScheduleEntity();
List<RequestScheduleEntity> scheduleEntities = requestScheduleDAO
.findByStatus("SCHEDULED");
Assert.assertNotNull(scheduleEntities);
Assert.assertEquals(scheduleEntity, scheduleEntities.get(0));
}
}