| /* |
| * 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; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.lang.reflect.Method; |
| import java.text.MessageFormat; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.UUID; |
| import java.util.concurrent.atomic.AtomicInteger; |
| |
| import javax.persistence.EntityManager; |
| |
| import org.apache.ambari.server.AmbariException; |
| import org.apache.ambari.server.Role; |
| import org.apache.ambari.server.RoleCommand; |
| import org.apache.ambari.server.actionmanager.HostRoleStatus; |
| import org.apache.ambari.server.api.services.AmbariMetaInfo; |
| import org.apache.ambari.server.orm.dao.AlertDefinitionDAO; |
| import org.apache.ambari.server.orm.dao.AlertDispatchDAO; |
| import org.apache.ambari.server.orm.dao.AlertsDAO; |
| import org.apache.ambari.server.orm.dao.ClusterDAO; |
| import org.apache.ambari.server.orm.dao.HostDAO; |
| import org.apache.ambari.server.orm.dao.HostRoleCommandDAO; |
| import org.apache.ambari.server.orm.dao.HostVersionDAO; |
| import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; |
| import org.apache.ambari.server.orm.dao.RequestDAO; |
| import org.apache.ambari.server.orm.dao.ResourceTypeDAO; |
| import org.apache.ambari.server.orm.dao.StackDAO; |
| import org.apache.ambari.server.orm.dao.StageDAO; |
| import org.apache.ambari.server.orm.dao.UserDAO; |
| import org.apache.ambari.server.orm.entities.AlertDefinitionEntity; |
| import org.apache.ambari.server.orm.entities.AlertGroupEntity; |
| import org.apache.ambari.server.orm.entities.AlertTargetEntity; |
| import org.apache.ambari.server.orm.entities.ClusterEntity; |
| import org.apache.ambari.server.orm.entities.ClusterServiceEntity; |
| import org.apache.ambari.server.orm.entities.ClusterStateEntity; |
| import org.apache.ambari.server.orm.entities.HostEntity; |
| import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; |
| import org.apache.ambari.server.orm.entities.HostStateEntity; |
| import org.apache.ambari.server.orm.entities.HostVersionEntity; |
| import org.apache.ambari.server.orm.entities.PrincipalEntity; |
| import org.apache.ambari.server.orm.entities.PrincipalTypeEntity; |
| import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; |
| import org.apache.ambari.server.orm.entities.RequestEntity; |
| 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.orm.entities.StageEntity; |
| import org.apache.ambari.server.orm.entities.UserEntity; |
| import org.apache.ambari.server.security.authorization.ResourceType; |
| import org.apache.ambari.server.security.authorization.UserName; |
| import org.apache.ambari.server.state.Cluster; |
| import org.apache.ambari.server.state.Clusters; |
| import org.apache.ambari.server.state.Host; |
| import org.apache.ambari.server.state.HostState; |
| import org.apache.ambari.server.state.RepositoryVersionState; |
| import org.apache.ambari.server.state.Service; |
| import org.apache.ambari.server.state.ServiceComponent; |
| import org.apache.ambari.server.state.ServiceComponentFactory; |
| import org.apache.ambari.server.state.ServiceComponentHost; |
| import org.apache.ambari.server.state.ServiceComponentHostFactory; |
| import org.apache.ambari.server.state.ServiceFactory; |
| import org.apache.ambari.server.state.StackId; |
| import org.apache.ambari.server.state.State; |
| import org.apache.ambari.server.state.alert.Scope; |
| import org.apache.ambari.server.state.alert.SourceType; |
| import org.apache.ambari.server.state.cluster.ClustersImpl; |
| import org.junit.Assert; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| import org.springframework.security.crypto.password.PasswordEncoder; |
| |
| import com.google.inject.Inject; |
| import com.google.inject.Injector; |
| import com.google.inject.Provider; |
| import com.google.inject.Singleton; |
| import com.google.inject.persist.Transactional; |
| |
| @Singleton |
| public class OrmTestHelper { |
| |
| private static final Logger LOG = LoggerFactory.getLogger(OrmTestHelper.class); |
| |
| private AtomicInteger uniqueCounter = new AtomicInteger(); |
| |
| @Inject |
| public Provider<EntityManager> entityManagerProvider; |
| |
| @Inject |
| public Injector injector; |
| |
| @Inject |
| public UserDAO userDAO; |
| |
| @Inject |
| public AlertDefinitionDAO alertDefinitionDAO; |
| |
| @Inject |
| public AlertDispatchDAO alertDispatchDAO; |
| |
| @Inject |
| public AlertsDAO alertsDAO; |
| |
| @Inject |
| public RepositoryVersionDAO repositoryVersionDAO; |
| |
| @Inject |
| public HostVersionDAO hostVersionDAO; |
| |
| @Inject |
| public HostDAO hostDAO; |
| |
| @Inject |
| private StackDAO stackDAO; |
| |
| public static final String CLUSTER_NAME = "test_cluster1"; |
| |
| public EntityManager getEntityManager() { |
| return entityManagerProvider.get(); |
| } |
| |
| /** |
| * creates some test data |
| */ |
| @Transactional |
| public void createDefaultData() { |
| StackEntity stackEntity = stackDAO.find("HDP", "2.2.0"); |
| |
| ResourceTypeEntity resourceTypeEntity = new ResourceTypeEntity(); |
| resourceTypeEntity.setId(ResourceType.CLUSTER.getId()); |
| resourceTypeEntity.setName(ResourceType.CLUSTER.name()); |
| |
| ResourceEntity resourceEntity = new ResourceEntity(); |
| resourceEntity.setResourceType(resourceTypeEntity); |
| |
| ClusterEntity clusterEntity = new ClusterEntity(); |
| clusterEntity.setClusterName("test_cluster1"); |
| clusterEntity.setResource(resourceEntity); |
| clusterEntity.setClusterInfo("test_cluster_info1"); |
| clusterEntity.setDesiredStack(stackEntity); |
| |
| HostEntity host1 = new HostEntity(); |
| HostEntity host2 = new HostEntity(); |
| HostEntity host3 = new HostEntity(); |
| |
| host1.setHostName("test_host1"); |
| host2.setHostName("test_host2"); |
| host3.setHostName("test_host3"); |
| host1.setIpv4("192.168.0.1"); |
| host2.setIpv4("192.168.0.2"); |
| host3.setIpv4("192.168.0.3"); |
| |
| List<HostEntity> hostEntities = new ArrayList<>(); |
| hostEntities.add(host1); |
| hostEntities.add(host2); |
| |
| clusterEntity.setHostEntities(hostEntities); |
| |
| // both sides of relation should be set when modifying in runtime |
| host1.setClusterEntities(Arrays.asList(clusterEntity)); |
| host2.setClusterEntities(Arrays.asList(clusterEntity)); |
| |
| HostStateEntity hostStateEntity1 = new HostStateEntity(); |
| hostStateEntity1.setCurrentState(HostState.HEARTBEAT_LOST); |
| hostStateEntity1.setHostEntity(host1); |
| HostStateEntity hostStateEntity2 = new HostStateEntity(); |
| hostStateEntity2.setCurrentState(HostState.HEALTHY); |
| hostStateEntity2.setHostEntity(host2); |
| host1.setHostStateEntity(hostStateEntity1); |
| host2.setHostStateEntity(hostStateEntity2); |
| |
| ClusterServiceEntity clusterServiceEntity = new ClusterServiceEntity(); |
| clusterServiceEntity.setServiceName("HDFS"); |
| clusterServiceEntity.setClusterEntity(clusterEntity); |
| List<ClusterServiceEntity> clusterServiceEntities = new ArrayList<>(); |
| clusterServiceEntities.add(clusterServiceEntity); |
| clusterEntity.setClusterServiceEntities(clusterServiceEntities); |
| |
| getEntityManager().persist(host1); |
| getEntityManager().persist(host2); |
| getEntityManager().persist(resourceTypeEntity); |
| getEntityManager().persist(resourceEntity); |
| getEntityManager().persist(clusterEntity); |
| getEntityManager().persist(hostStateEntity1); |
| getEntityManager().persist(hostStateEntity2); |
| getEntityManager().persist(clusterServiceEntity); |
| } |
| |
| @Transactional |
| public void createTestUsers() { |
| PrincipalTypeEntity principalTypeEntity = new PrincipalTypeEntity(); |
| principalTypeEntity.setName(PrincipalTypeEntity.USER_PRINCIPAL_TYPE_NAME); |
| getEntityManager().persist(principalTypeEntity); |
| |
| PrincipalEntity principalEntity = new PrincipalEntity(); |
| principalEntity.setPrincipalType(principalTypeEntity); |
| |
| getEntityManager().persist(principalEntity); |
| |
| PasswordEncoder encoder = injector.getInstance(PasswordEncoder.class); |
| |
| UserEntity admin = new UserEntity(); |
| admin.setUserName(UserName.fromString("administrator")); |
| admin.setUserPassword(encoder.encode("admin")); |
| admin.setPrincipal(principalEntity); |
| |
| Set<UserEntity> users = new HashSet<>(); |
| |
| users.add(admin); |
| |
| userDAO.create(admin); |
| |
| principalEntity = new PrincipalEntity(); |
| principalEntity.setPrincipalType(principalTypeEntity); |
| getEntityManager().persist(principalEntity); |
| |
| UserEntity userWithoutRoles = new UserEntity(); |
| userWithoutRoles.setUserName(UserName.fromString("userWithoutRoles")); |
| userWithoutRoles.setUserPassword(encoder.encode("test")); |
| userWithoutRoles.setPrincipal(principalEntity); |
| userDAO.create(userWithoutRoles); |
| |
| } |
| |
| @Transactional |
| public void performTransactionMarkedForRollback() { |
| ClusterDAO clusterDAO = injector.getInstance(ClusterDAO.class); |
| clusterDAO.removeByName("test_cluster1"); |
| getEntityManager().getTransaction().setRollbackOnly(); |
| } |
| |
| @Transactional |
| public void createStageCommands() { |
| ClusterDAO clusterDAO = injector.getInstance(ClusterDAO.class); |
| StageDAO stageDAO = injector.getInstance(StageDAO.class); |
| HostRoleCommandDAO hostRoleCommandDAO = injector.getInstance(HostRoleCommandDAO.class); |
| HostDAO hostDAO = injector.getInstance(HostDAO.class); |
| RequestDAO requestDAO = injector.getInstance(RequestDAO.class); |
| RequestEntity requestEntity = new RequestEntity(); |
| requestEntity.setRequestId(1L); |
| requestEntity.setClusterId(clusterDAO.findByName("test_cluster1").getClusterId()); |
| |
| StageEntity stageEntity = new StageEntity(); |
| stageEntity.setRequest(requestEntity); |
| stageEntity.setClusterId(clusterDAO.findByName("test_cluster1").getClusterId()); |
| stageEntity.setRequestId(1L); |
| stageEntity.setStageId(1L); |
| |
| requestEntity.setStages(Collections.singletonList(stageEntity)); |
| |
| HostRoleCommandEntity commandEntity = new HostRoleCommandEntity(); |
| HostRoleCommandEntity commandEntity2 = new HostRoleCommandEntity(); |
| HostRoleCommandEntity commandEntity3 = new HostRoleCommandEntity(); |
| HostEntity host1 = hostDAO.findByName("test_host1"); |
| HostEntity host2 = hostDAO.findByName("test_host2"); |
| commandEntity.setHostEntity(host1); |
| host1.getHostRoleCommandEntities().add(commandEntity); |
| commandEntity.setRoleCommand(RoleCommand.INSTALL); |
| commandEntity.setStatus(HostRoleStatus.QUEUED); |
| commandEntity.setRole(Role.DATANODE); |
| commandEntity2.setHostEntity(host2); |
| host2.getHostRoleCommandEntities().add(commandEntity2); |
| commandEntity2.setRoleCommand(RoleCommand.EXECUTE); |
| commandEntity2.setRole(Role.NAMENODE); |
| commandEntity2.setStatus(HostRoleStatus.COMPLETED); |
| commandEntity3.setHostEntity(host1); |
| host1.getHostRoleCommandEntities().add(commandEntity3); |
| commandEntity3.setRoleCommand(RoleCommand.START); |
| commandEntity3.setRole(Role.SECONDARY_NAMENODE); |
| commandEntity3.setStatus(HostRoleStatus.IN_PROGRESS); |
| commandEntity.setStage(stageEntity); |
| commandEntity2.setStage(stageEntity); |
| commandEntity3.setStage(stageEntity); |
| |
| stageEntity.setHostRoleCommands(new ArrayList<HostRoleCommandEntity>()); |
| stageEntity.getHostRoleCommands().add(commandEntity); |
| stageEntity.getHostRoleCommands().add(commandEntity2); |
| stageEntity.getHostRoleCommands().add(commandEntity3); |
| |
| requestDAO.create(requestEntity); |
| stageDAO.create(stageEntity); |
| hostRoleCommandDAO.create(commandEntity3); |
| hostRoleCommandDAO.create(commandEntity); |
| hostRoleCommandDAO.create(commandEntity2); |
| hostDAO.merge(host1); |
| hostDAO.merge(host2); |
| } |
| |
| @Transactional |
| public StackEntity createStack(StackId stackId) throws AmbariException { |
| StackEntity stackEntity = stackDAO.find(stackId.getStackName(), stackId.getStackVersion()); |
| |
| if (null == stackEntity) { |
| stackEntity = new StackEntity(); |
| stackEntity.setStackName(stackId.getStackName()); |
| stackEntity.setStackVersion(stackId.getStackVersion()); |
| stackDAO.create(stackEntity); |
| } |
| |
| return stackEntity; |
| } |
| |
| /** |
| * Creates an empty cluster with an ID. |
| * |
| * @return the cluster ID. |
| */ |
| @Transactional |
| public Long createCluster() throws Exception { |
| return createCluster(CLUSTER_NAME); |
| } |
| |
| /** |
| * Creates an empty cluster with an ID using the specified cluster name. |
| * |
| * @return the cluster ID. |
| */ |
| @Transactional |
| public Long createCluster(String clusterName) throws Exception { |
| // required to populate the database with stacks |
| injector.getInstance(AmbariMetaInfo.class); |
| |
| ResourceTypeDAO resourceTypeDAO = injector.getInstance(ResourceTypeDAO.class); |
| |
| ResourceTypeEntity resourceTypeEntity = new ResourceTypeEntity(); |
| resourceTypeEntity.setId(ResourceType.CLUSTER.getId()); |
| resourceTypeEntity.setName(ResourceType.CLUSTER.name()); |
| resourceTypeEntity = resourceTypeDAO.merge(resourceTypeEntity); |
| |
| ResourceEntity resourceEntity = new ResourceEntity(); |
| resourceEntity.setResourceType(resourceTypeEntity); |
| |
| ClusterDAO clusterDAO = injector.getInstance(ClusterDAO.class); |
| StackDAO stackDAO = injector.getInstance(StackDAO.class); |
| |
| StackEntity stackEntity = stackDAO.find("HDP", "2.0.6"); |
| assertNotNull(stackEntity); |
| |
| ClusterEntity clusterEntity = new ClusterEntity(); |
| clusterEntity.setClusterName(clusterName); |
| clusterEntity.setClusterInfo("test_cluster_info1"); |
| clusterEntity.setResource(resourceEntity); |
| clusterEntity.setDesiredStack(stackEntity); |
| |
| clusterDAO.create(clusterEntity); |
| |
| ClusterStateEntity clusterStateEntity = new ClusterStateEntity(); |
| clusterStateEntity.setCurrentStack(stackEntity); |
| clusterStateEntity.setClusterEntity(clusterEntity); |
| getEntityManager().persist(clusterStateEntity); |
| |
| clusterEntity = clusterDAO.findByName(clusterEntity.getClusterName()); |
| assertNotNull(clusterEntity); |
| assertTrue(clusterEntity.getClusterId() > 0); |
| |
| clusterEntity.setClusterStateEntity(clusterStateEntity); |
| clusterDAO.merge(clusterEntity); |
| |
| // because this test method goes around the Clusters business object, we |
| // forcefully will refresh the internal state so that any tests which |
| // incorrect use Clusters after calling this won't be affected |
| Clusters clusters = injector.getInstance(Clusters.class); |
| Method method = ClustersImpl.class.getDeclaredMethod("loadClustersAndHosts"); |
| method.setAccessible(true); |
| method.invoke(clusters); |
| |
| return clusterEntity.getClusterId(); |
| } |
| |
| public Cluster buildNewCluster(Clusters clusters, |
| ServiceFactory serviceFactory, ServiceComponentFactory componentFactory, |
| ServiceComponentHostFactory schFactory, String hostName) throws Exception { |
| String clusterName = "cluster-" + System.currentTimeMillis(); |
| StackId stackId = new StackId("HDP", "2.0.6"); |
| |
| createStack(stackId); |
| |
| clusters.addCluster(clusterName, stackId); |
| Cluster cluster = clusters.getCluster(clusterName); |
| cluster = initializeClusterWithStack(cluster); |
| |
| addHost(clusters, cluster, hostName); |
| |
| installHdfsService(cluster, serviceFactory, componentFactory, schFactory, hostName); |
| installYarnService(cluster, serviceFactory, componentFactory, schFactory, |
| hostName); |
| return cluster; |
| } |
| |
| public Cluster initializeClusterWithStack(Cluster cluster) throws Exception { |
| StackId stackId = new StackId("HDP", "2.0.6"); |
| cluster.setDesiredStackVersion(stackId); |
| getOrCreateRepositoryVersion(stackId, stackId.getStackVersion()); |
| return cluster; |
| } |
| |
| /** |
| * @throws Exception |
| */ |
| public void addHost(Clusters clusters, Cluster cluster, String hostName) |
| throws Exception { |
| clusters.addHost(hostName); |
| |
| Host host = clusters.getHost(hostName); |
| Map<String, String> hostAttributes = new HashMap<>(); |
| hostAttributes.put("os_family", "redhat"); |
| hostAttributes.put("os_release_version", "6.4"); |
| host.setHostAttributes(hostAttributes); |
| host.setState(HostState.HEALTHY); |
| |
| clusters.mapAndPublishHostsToCluster(Collections.singleton(hostName), cluster.getClusterName()); |
| } |
| |
| public void addHostComponent(Cluster cluster, String hostName, String serviceName, String componentName) throws AmbariException { |
| Service service = cluster.getService(serviceName); |
| ServiceComponent serviceComponent = service.getServiceComponent(componentName); |
| ServiceComponentHost serviceComponentHost = serviceComponent.addServiceComponentHost(hostName); |
| serviceComponentHost.setDesiredState(State.INSTALLED); |
| } |
| |
| public void installHdfsService(Cluster cluster, |
| ServiceFactory serviceFactory, ServiceComponentFactory componentFactory, |
| ServiceComponentHostFactory schFactory, String hostName) throws Exception { |
| |
| RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion( |
| cluster.getDesiredStackVersion(), cluster.getDesiredStackVersion().getStackVersion()); |
| |
| String serviceName = "HDFS"; |
| Service service = serviceFactory.createNew(cluster, serviceName, repositoryVersion); |
| service = cluster.getService(serviceName); |
| assertNotNull(service); |
| |
| ServiceComponent datanode = componentFactory.createNew(service, "DATANODE"); |
| |
| service.addServiceComponent(datanode); |
| datanode.setDesiredState(State.INSTALLED); |
| |
| ServiceComponentHost sch = schFactory.createNew(datanode, hostName); |
| |
| datanode.addServiceComponentHost(sch); |
| sch.setDesiredState(State.INSTALLED); |
| sch.setState(State.INSTALLED); |
| |
| ServiceComponent namenode = componentFactory.createNew(service, "NAMENODE"); |
| |
| service.addServiceComponent(namenode); |
| namenode.setDesiredState(State.INSTALLED); |
| |
| sch = schFactory.createNew(namenode, hostName); |
| namenode.addServiceComponentHost(sch); |
| sch.setDesiredState(State.INSTALLED); |
| sch.setState(State.INSTALLED); |
| } |
| |
| public void installYarnService(Cluster cluster, |
| ServiceFactory serviceFactory, ServiceComponentFactory componentFactory, |
| ServiceComponentHostFactory schFactory, String hostName) throws Exception { |
| |
| RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion( |
| cluster.getDesiredStackVersion(), cluster.getDesiredStackVersion().getStackVersion()); |
| |
| String serviceName = "YARN"; |
| Service service = serviceFactory.createNew(cluster, serviceName, repositoryVersion); |
| service = cluster.getService(serviceName); |
| assertNotNull(service); |
| |
| ServiceComponent resourceManager = componentFactory.createNew(service, |
| "RESOURCEMANAGER"); |
| |
| service.addServiceComponent(resourceManager); |
| resourceManager.setDesiredState(State.INSTALLED); |
| |
| ServiceComponentHost sch = schFactory.createNew(resourceManager, hostName); |
| |
| resourceManager.addServiceComponentHost(sch); |
| sch.setDesiredState(State.INSTALLED); |
| sch.setState(State.INSTALLED); |
| } |
| |
| /** |
| * Creates an alert target. |
| * |
| * @return |
| */ |
| public AlertTargetEntity createAlertTarget() throws Exception { |
| AlertTargetEntity target = new AlertTargetEntity(); |
| target.setDescription("Target Description"); |
| target.setNotificationType("EMAIL"); |
| target.setProperties("Target Properties"); |
| target.setTargetName("Target Name " + System.currentTimeMillis()); |
| |
| alertDispatchDAO.create(target); |
| return target; |
| } |
| |
| /** |
| * Creates a global alert target. |
| * |
| * @return |
| */ |
| public AlertTargetEntity createGlobalAlertTarget() throws Exception { |
| AlertTargetEntity target = new AlertTargetEntity(); |
| target.setDescription("Target Description"); |
| target.setNotificationType("EMAIL"); |
| target.setProperties("Target Properties"); |
| target.setTargetName("Target Name " + System.currentTimeMillis()); |
| target.setGlobal(true); |
| |
| alertDispatchDAO.create(target); |
| return target; |
| } |
| |
| /** |
| * Creates an alert definition. |
| * |
| * @param clusterId |
| * @return |
| * @throws Exception |
| */ |
| public AlertDefinitionEntity createAlertDefinition(long clusterId) |
| throws Exception { |
| AlertDefinitionEntity definition = new AlertDefinitionEntity(); |
| definition.setDefinitionName("Alert Definition " |
| + System.currentTimeMillis()); |
| definition.setServiceName("AMBARI"); |
| definition.setComponentName(null); |
| definition.setClusterId(clusterId); |
| definition.setHash(UUID.randomUUID().toString()); |
| definition.setScheduleInterval(60); |
| definition.setScope(Scope.SERVICE); |
| definition.setSource("{\"type\" : \"SCRIPT\"}"); |
| definition.setSourceType(SourceType.SCRIPT); |
| |
| alertDefinitionDAO.create(definition); |
| return alertDefinitionDAO.findById(definition.getDefinitionId()); |
| } |
| |
| /** |
| * Creates an alert group. |
| * |
| * @param clusterId |
| * @param targets |
| * @return |
| * @throws Exception |
| */ |
| public AlertGroupEntity createAlertGroup(long clusterId, |
| Set<AlertTargetEntity> targets) throws Exception { |
| AlertGroupEntity group = new AlertGroupEntity(); |
| group.setDefault(false); |
| group.setGroupName("Group Name " + System.currentTimeMillis() + uniqueCounter.incrementAndGet()); |
| group.setClusterId(clusterId); |
| group.setAlertTargets(targets); |
| |
| alertDispatchDAO.create(group); |
| return group; |
| } |
| |
| /** |
| * Creates some default alert groups for various services used in the tests. |
| * |
| * @param clusterId |
| * @return |
| * @throws Exception |
| */ |
| public List<AlertGroupEntity> createDefaultAlertGroups(long clusterId) |
| throws Exception { |
| AlertGroupEntity hdfsGroup = new AlertGroupEntity(); |
| hdfsGroup.setDefault(true); |
| hdfsGroup.setClusterId(clusterId); |
| hdfsGroup.setGroupName("HDFS"); |
| hdfsGroup.setServiceName("HDFS"); |
| |
| AlertGroupEntity oozieGroup = new AlertGroupEntity(); |
| oozieGroup.setDefault(true); |
| oozieGroup.setClusterId(clusterId); |
| oozieGroup.setGroupName("OOZIE"); |
| oozieGroup.setServiceName("OOZIE"); |
| |
| alertDispatchDAO.create(hdfsGroup); |
| alertDispatchDAO.create(oozieGroup); |
| |
| List<AlertGroupEntity> defaultGroups = alertDispatchDAO.findAllGroups(clusterId); |
| assertEquals(2, defaultGroups.size()); |
| assertNotNull(alertDispatchDAO.findDefaultServiceGroup(clusterId, "HDFS")); |
| assertNotNull(alertDispatchDAO.findDefaultServiceGroup(clusterId, "OOZIE")); |
| |
| return defaultGroups; |
| } |
| |
| /** |
| * Convenient method to create or to get repository version for given cluster. The repository |
| * version string is based on the cluster's stack version. |
| * |
| * @return repository version |
| */ |
| public RepositoryVersionEntity getOrCreateRepositoryVersion(Cluster cluster) { |
| StackId stackId = cluster.getCurrentStackVersion(); |
| String version = stackId.getStackVersion() + ".1"; |
| |
| StackDAO stackDAO = injector.getInstance(StackDAO.class); |
| StackEntity stackEntity = stackDAO.find(stackId.getStackName(), |
| stackId.getStackVersion()); |
| |
| assertNotNull(stackEntity); |
| |
| RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion( |
| stackId, version); |
| |
| if (repositoryVersion == null) { |
| try { |
| repositoryVersion = repositoryVersionDAO.create(stackEntity, version, |
| String.valueOf(System.currentTimeMillis()) + uniqueCounter.incrementAndGet(), ""); |
| } catch (Exception ex) { |
| LOG.error("Caught exception", ex); |
| ex.printStackTrace(); |
| Assert.fail(MessageFormat.format("Unable to create Repo Version for Stack {0} and version {1}", |
| stackEntity.getStackName() + "-" + stackEntity.getStackVersion(), version)); |
| } |
| } |
| return repositoryVersion; |
| } |
| |
| /** |
| * Convenient method to create or to get repository version for given stack. |
| * |
| * @param stackId stack object |
| * @param version stack version |
| * @return repository version |
| */ |
| public RepositoryVersionEntity getOrCreateRepositoryVersion(StackId stackId, |
| String version) { |
| StackEntity stackEntity = null; |
| try { |
| stackEntity = createStack(stackId); |
| } catch (Exception e) { |
| LOG.error("Expected successful repository", e); |
| } |
| |
| assertNotNull(stackEntity); |
| |
| RepositoryVersionEntity repositoryVersion = repositoryVersionDAO.findByStackAndVersion( |
| stackId, version); |
| |
| if (repositoryVersion == null) { |
| try { |
| String operatingSystems = "[{\"OperatingSystems/ambari_managed_repositories\":\"true\",\"repositories\":[{\"Repositories/repo_id\":\"HDP\",\"Repositories/base_url\":\"\",\"Repositories/repo_name\":\"HDP\"},{\"Repositories/repo_id\":\"HDP-UTILS\",\"Repositories/base_url\":\"\",\"Repositories/repo_name\":\"HDP-UTILS\"}],\"OperatingSystems/os_type\":\"redhat6\"}]"; |
| |
| repositoryVersion = repositoryVersionDAO.create(stackEntity, version, |
| String.valueOf(System.currentTimeMillis()) + uniqueCounter.incrementAndGet(), operatingSystems); |
| } catch (Exception ex) { |
| LOG.error("Caught exception", ex); |
| |
| Assert.fail(MessageFormat.format("Unable to create Repo Version for Stack {0} and version {1}", |
| stackEntity.getStackName() + "-" + stackEntity.getStackVersion(), version)); |
| } |
| } |
| return repositoryVersion; |
| } |
| |
| /** |
| * Convenient method to create host version for given stack. |
| */ |
| public HostVersionEntity createHostVersion(String hostName, RepositoryVersionEntity repositoryVersionEntity, |
| RepositoryVersionState repositoryVersionState) { |
| HostEntity hostEntity = hostDAO.findByName(hostName); |
| HostVersionEntity hostVersionEntity = new HostVersionEntity(hostEntity, repositoryVersionEntity, repositoryVersionState); |
| hostVersionEntity.setHostId(hostEntity.getHostId()); |
| hostVersionDAO.create(hostVersionEntity); |
| |
| hostEntity.getHostVersionEntities().add(hostVersionEntity); |
| hostDAO.merge(hostEntity); |
| |
| return hostVersionEntity; |
| } |
| } |