/* * 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.funtest.server.tests; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import org.apache.ambari.funtest.server.ConnectionParams; import org.apache.ambari.funtest.server.WebResponse; import org.apache.ambari.funtest.server.api.cluster.DeleteClusterWebRequest; import org.apache.ambari.funtest.server.api.service.DeleteServiceWebRequest; import org.apache.ambari.funtest.server.api.service.GetServiceWebRequest; import org.apache.ambari.funtest.server.api.service.StopServiceWebRequest; import org.apache.ambari.funtest.server.utils.ClusterUtils; import org.apache.ambari.funtest.server.utils.RestApiUtils; import org.apache.ambari.server.orm.dao.ClusterServiceDAO; import org.apache.ambari.server.orm.dao.ServiceDesiredStateDAO; import org.apache.ambari.server.orm.dao.ServiceComponentDesiredStateDAO; import org.apache.ambari.server.orm.dao.HostComponentStateDAO; import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO; import org.apache.ambari.server.orm.entities.ClusterServiceEntity; import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity; import org.apache.ambari.server.orm.entities.ServiceComponentDesiredStateEntity; import org.apache.ambari.server.orm.entities.HostComponentStateEntity; import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntity; import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntityPK; import org.apache.ambari.server.state.State; import org.apache.http.HttpStatus; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.Test; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * Simple test that starts the local ambari server, * tests it's status and shuts down the server. */ public class DeleteServiceTest extends ServerTestBase { private static Log LOG = LogFactory.getLog(DeleteServiceTest.class); /** * Set up a test cluster with a service, a host and a few components. * Attempt to delete the service. Verify the state of the DB. * * @throws Exception */ @Test public void testDeleteService() throws Exception { String clusterName = "c1"; String serviceName = "HDFS"; ConnectionParams params = new ConnectionParams(); params.setServerName("localhost"); params.setServerApiPort(serverPort); params.setServerAgentPort(serverAgentPort); params.setUserName("admin"); params.setPassword("admin"); ClusterUtils clusterUtils = injector.getInstance(ClusterUtils.class); clusterUtils.createSampleCluster(params); /** * Verify the status of the service */ JsonElement jsonResponse = RestApiUtils.executeRequest(new GetServiceWebRequest(params, clusterName, serviceName)); assertTrue(!jsonResponse.isJsonNull()); JsonObject jsonServiceInfoObj = jsonResponse.getAsJsonObject().get("ServiceInfo").getAsJsonObject(); String cluster_name = jsonServiceInfoObj.get("cluster_name").getAsString(); assertEquals(cluster_name, clusterName); String service_name = jsonServiceInfoObj.get("service_name").getAsString(); assertEquals(service_name, serviceName); /** * Check the following: * ClusterServiceDAO * ServiceDesiredStateDAO * ServiceComponentDesiredStateDAO * HostComponentStateDAO * HostComponentDesiredStateDAO */ /** * Stop the service */ jsonResponse = RestApiUtils.executeRequest(new StopServiceWebRequest(params, clusterName, serviceName)); /** * clusterservice table */ ClusterServiceDAO clusterServiceDAO = injector.getInstance(ClusterServiceDAO.class); List<ClusterServiceEntity> clusterServiceEntities = clusterServiceDAO.findAll(); assertEquals(clusterServiceEntities.size(), 1); // Only one service in the sample cluster (HDFS) assertEquals(clusterServiceEntities.get(0).getServiceName(), serviceName); // Verify the only service name ClusterServiceEntity clusterServiceEntity = clusterServiceEntities.get(0); long clusterId = clusterServiceEntity.getClusterId(); /** * servicedesiredstate table */ ServiceDesiredStateDAO serviceDesiredStateDAO = injector.getInstance(ServiceDesiredStateDAO.class); List<ServiceDesiredStateEntity> serviceDesiredStateEntities = serviceDesiredStateDAO.findAll(); assertEquals(serviceDesiredStateEntities.size(), 1); ServiceDesiredStateEntity serviceDesiredStateEntity = serviceDesiredStateEntities.get(0); assertEquals(serviceDesiredStateEntity.getServiceName(), serviceName); assertEquals(serviceDesiredStateEntity.getDesiredState(), State.INSTALLED); /** * servicecomponentdesiredstate table */ ServiceComponentDesiredStateDAO serviceComponentDesiredStateDAO = injector.getInstance(ServiceComponentDesiredStateDAO.class); List<ServiceComponentDesiredStateEntity> serviceComponentDesiredStateEntities = serviceComponentDesiredStateDAO.findAll(); assertEquals(serviceComponentDesiredStateEntities.size(), 3); // NAMENODE, SECONDARY_NAMENODE, DATANODE. for (ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity : serviceComponentDesiredStateEntities) { assertEquals(serviceComponentDesiredStateEntity.getDesiredState(), State.INSTALLED); } /** * hostcomponentstate table */ HostComponentStateDAO hostComponentStateDAO = injector.getInstance(HostComponentStateDAO.class); List<HostComponentStateEntity> hostComponentStateEntities = hostComponentStateDAO.findAll(); assertEquals(hostComponentStateEntities.size(), 3); /** * hostcomponentdesiredstate table */ HostComponentDesiredStateDAO hostComponentDesiredStateDAO = injector.getInstance(HostComponentDesiredStateDAO.class); List<HostComponentDesiredStateEntity> hostComponentDesiredStateEntities = hostComponentDesiredStateDAO.findAll(); assertEquals(hostComponentDesiredStateEntities.size(), 3); /** * Delete the service */ jsonResponse = RestApiUtils.executeRequest(new DeleteServiceWebRequest(params, clusterName, serviceName)); WebResponse webResponse = new GetServiceWebRequest(params, clusterName, serviceName).getResponse(); assertEquals(webResponse.getStatusCode(), HttpStatus.SC_NOT_FOUND); /** * ClusterServiceDAO - the service entry should have been removed. */ clusterServiceEntity = clusterServiceDAO.findByClusterAndServiceNames(clusterName, serviceName); assertTrue(clusterServiceEntity == null); /** * ServiceDesiredStateDAO - the service entry should have been removed. */ ServiceDesiredStateEntityPK serviceDesiredStateEntityPK = injector.getInstance(ServiceDesiredStateEntityPK.class); serviceDesiredStateEntityPK.setClusterId(clusterId); serviceDesiredStateEntityPK.setServiceName(serviceName); serviceDesiredStateEntity = serviceDesiredStateDAO.findByPK(serviceDesiredStateEntityPK); assertTrue(serviceDesiredStateEntity == null); /** * ServiceComponentDesiredStateDAO */ ServiceComponentDesiredStateEntity serviceComponentDesiredStateEntity = serviceComponentDesiredStateDAO.findById(0L); assertTrue(serviceComponentDesiredStateEntity == null); /** * HostComponentStateDAO */ hostComponentStateEntities = hostComponentStateDAO.findByService(serviceName); assertEquals(hostComponentStateEntities.size(), 0); /** * HostComponentDesiredStateDAO */ hostComponentDesiredStateEntities = hostComponentDesiredStateDAO.findAll(); assertEquals(hostComponentDesiredStateEntities.size(), 0); jsonResponse = RestApiUtils.executeRequest(new DeleteClusterWebRequest(params, clusterName)); LOG.info(jsonResponse); } }