org.pentaho.hadoop.shim.HadoopRunningOnClusterTest.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.hadoop.shim.HadoopRunningOnClusterTest.java

Source

/*******************************************************************************
 * Pentaho Big Data
 * <p>
 * Copyright (C) 2002-2017 by Hitachi Vantara : http://www.pentaho.com
 * <p>
 * ******************************************************************************
 * <p>
 * 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
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * 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.pentaho.hadoop.shim;

import org.apache.commons.vfs2.AllFileSelector;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.VFS;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class HadoopRunningOnClusterTest {

    private static String CONFIG_PROPERTY_CLASSPATH = System.getProperty("java.io.tmpdir")
            + "/opt/mapr/hadoop/hadoop-2.7.0/share/hadoop/mapreduce";
    private int count;
    private static String PMR_PROPERTIES = "pmr.properties";
    private static File pmrFolder;
    private static URL urlTestResources;

    @ClassRule
    public static TemporaryFolder tempFolder = new TemporaryFolder();

    @BeforeClass
    public static void setup() throws Exception {
        // Create a test hadoop configuration
        FileObject ramRoot = VFS.getManager().resolveFile(CONFIG_PROPERTY_CLASSPATH);
        if (ramRoot.exists()) {
            ramRoot.delete(new AllFileSelector());
        }
        ramRoot.createFolder();

        // Create the implementation jars
        ramRoot.resolveFile("hadoop-mapreduce-client-app-2.7.0-mapr-1602.jar").createFile();
        ramRoot.resolveFile("hadoop-mapreduce-client-common-2.7.0-mapr-1602.jar").createFile();
        ramRoot.resolveFile("hadoop-mapreduce-client-contrib-2.7.0-mapr-1602.jar").createFile();
        ramRoot.resolveFile("hadoop-mapreduce-client-core-2.7.0-mapr-1602.jar").createFile();
        ramRoot.resolveFile("hadoop-mapreduce-client-hs-2.7.0-mapr-1602.jar").createFile();

        pmrFolder = tempFolder.newFolder("pmr");
        urlTestResources = Thread.currentThread().getContextClassLoader().getResource(PMR_PROPERTIES);
        Files.copy(Paths.get(urlTestResources.toURI()), Paths.get(pmrFolder.getAbsolutePath(), PMR_PROPERTIES));
    }

    private void activatePmrFile() throws URISyntaxException, IOException {
        if (!Files.exists(Paths.get(urlTestResources.toURI()))) {
            Files.copy(Paths.get(pmrFolder.getAbsolutePath(), PMR_PROPERTIES), Paths.get(urlTestResources.toURI()));
        }
    }

    private void disablePmrFile() throws URISyntaxException, IOException {
        Files.deleteIfExists(Paths.get(urlTestResources.toURI()));
    }

    @Test
    public void isRunningOnCluster_PmrFalse() throws Exception {
        HadoopConfigurationLocator locator = new HadoopConfigurationLocator();

        try {
            disablePmrFile();
            Assert.assertEquals(false, locator.isRunningOnCluster());
        } finally {
            activatePmrFile();
        }
    }

    @Test
    public void isRunningOnCluster_PmrTrue() throws Exception {
        HadoopConfigurationLocator locator = new HadoopConfigurationLocator();

        activatePmrFile();
        Assert.assertEquals(true, locator.isRunningOnCluster());
    }

    @Test
    public void runningLocally_withLinuxClassPathProperty() throws Exception {
        HadoopConfigurationLocator locator = new HadoopConfigurationLocator();
        FileObject folder = VFS.getManager().resolveFile(CONFIG_PROPERTY_CLASSPATH);

        try {
            disablePmrFile();
            List<URL> classpathElements = null;
            if (!locator.isRunningOnCluster()) {
                classpathElements = locator.parseURLs(folder, folder.toString());
                count = classpathElements.size();
            }
            Assert.assertNotNull(classpathElements);
            Assert.assertEquals(6, count);
        } finally {
            activatePmrFile();
        }
    }

    @Test
    public void runningOnCluster_ignoreLinuxClassPathProperty() throws Exception {
        HadoopConfigurationLocator locator = new HadoopConfigurationLocator();
        FileObject folder = VFS.getManager().resolveFile(CONFIG_PROPERTY_CLASSPATH);

        activatePmrFile();
        List<URL> classpathElements = null;
        if (!locator.isRunningOnCluster()) {
            classpathElements = locator.parseURLs(folder, folder.toString());
            count = classpathElements.size();
        }
        Assert.assertEquals(null, classpathElements);
        Assert.assertEquals(0, count);
    }
}