/*
* Copyright 2015 herd contributors
*
* Licensed 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.finra.herd.dao;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.Arrays;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.finra.herd.model.api.xml.EmrClusterDefinitionKey;
import org.finra.herd.model.jpa.EmrClusterDefinitionEntity;
import org.finra.herd.model.jpa.NamespaceEntity;
public class EmrClusterDefinitionDaoTest extends AbstractDaoTest
{
/**
* Tests the happy path scenario by providing all the parameters.
*/
@Test
public void testGetEmrClusterDefinitionByAltKey() throws IOException
{
// Create and persist an EMR cluster definition entity.
emrClusterDefinitionDaoTestHelper.createEmrClusterDefinitionEntity(namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE), EMR_CLUSTER_DEFINITION_NAME,
IOUtils.toString(resourceLoader.getResource(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH).getInputStream()));
// Call the API to query the newly added entity by providing the app and EMT cluster definition details
EmrClusterDefinitionEntity emrClusterDefinitionEntityResult =
emrClusterDefinitionDao.getEmrClusterDefinitionByAltKey(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME));
// Fail if there is any problem in the result
assertNotNull(emrClusterDefinitionEntityResult);
assertEquals(NAMESPACE, emrClusterDefinitionEntityResult.getNamespace().getCode());
assertEquals(EMR_CLUSTER_DEFINITION_NAME, emrClusterDefinitionEntityResult.getName());
}
/**
* Tests the scenario by providing a EMR Cluster name that doesn't exist.
*/
@Test
public void testGetEmrClusterDefinitionByAltKeyDefinitionNameNoExists() throws IOException
{
// Create and persist an EMR Cluster definition entity.
emrClusterDefinitionDaoTestHelper.createEmrClusterDefinitionEntity(namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE), EMR_CLUSTER_DEFINITION_NAME,
IOUtils.toString(resourceLoader.getResource(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH).getInputStream()));
// Call the API to query the newly added entity by providing the app and a definition name that doesn't exist.
EmrClusterDefinitionEntity emrClusterDefinitionEntityResult =
emrClusterDefinitionDao.getEmrClusterDefinitionByAltKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME_2);
// Validate the results.
assertNull(emrClusterDefinitionEntityResult);
}
/**
* Tests the scenario by providing the wrong app name.
*/
@Test
public void testGetEmrClusterDefinitionByAltKeyNamespaceNoExists() throws IOException
{
// Create namespace database entities.
NamespaceEntity namespaceEntity = namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE);
namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE_2);
// Create a EMR Cluster definition entity
emrClusterDefinitionDaoTestHelper.createEmrClusterDefinitionEntity(namespaceEntity, EMR_CLUSTER_DEFINITION_NAME,
IOUtils.toString(resourceLoader.getResource(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH).getInputStream()));
// Call the API to query the newly added entity by providing the app and a definition name that doesn't exist.
EmrClusterDefinitionEntity emrClusterDefinitionEntityResult =
emrClusterDefinitionDao.getEmrClusterDefinitionByAltKey(NAMESPACE_2, EMR_CLUSTER_DEFINITION_NAME_2);
// Validate the results.
assertNull(emrClusterDefinitionEntityResult);
}
/**
* Tests the scenario by finding multiple EMR Cluster definition records.
*/
@Test(expected = IllegalArgumentException.class)
public void testGetEmrClusterDefinitionByAltKeyMultipleRecordsFound() throws IOException
{
// Create namespace database entities.
NamespaceEntity namespaceEntity = namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE);
// Create two EMR cluster definitions different.
for (String definitionName : Arrays.asList(EMR_CLUSTER_DEFINITION_NAME.toUpperCase(), EMR_CLUSTER_DEFINITION_NAME.toLowerCase()))
{
// Create a EMR cluster definition entity.
emrClusterDefinitionDaoTestHelper.createEmrClusterDefinitionEntity(namespaceEntity, definitionName,
IOUtils.toString(resourceLoader.getResource(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH).getInputStream()));
}
// Try to retrieve the the job definition.
emrClusterDefinitionDao.getEmrClusterDefinitionByAltKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME);
}
@Test
public void testGetEmrClusterDefinitionsByNamespace() throws IOException
{
// Create and persist an EMR cluster definition entity.
emrClusterDefinitionDaoTestHelper.createEmrClusterDefinitionEntity(namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE), EMR_CLUSTER_DEFINITION_NAME,
IOUtils.toString(resourceLoader.getResource(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH).getInputStream()));
// Create an EMR cluster definition key.
EmrClusterDefinitionKey emrClusterDefinitionKey = new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME);
// Retrieve a list of EMR cluster definition keys.
assertEquals(Arrays.asList(emrClusterDefinitionKey), emrClusterDefinitionDao.getEmrClusterDefinitionsByNamespace(NAMESPACE));
// Get business object data attribute by passing namespace parameter value in uppercase.
assertEquals(Arrays.asList(emrClusterDefinitionKey), emrClusterDefinitionDao.getEmrClusterDefinitionsByNamespace(NAMESPACE.toUpperCase()));
// Get business object data attribute by passing namespace parameter value in lowercase.
assertEquals(Arrays.asList(emrClusterDefinitionKey), emrClusterDefinitionDao.getEmrClusterDefinitionsByNamespace(NAMESPACE.toLowerCase()));
// Try an invalid value for the namespace input parameter.
assertTrue(emrClusterDefinitionDao.getEmrClusterDefinitionsByNamespace("I_DO_NO_EXIST").isEmpty());
}
}