/** * 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)); } }