com.netflix.genie.web.configs.MvcConfigUnitTests.java Source code

Java tutorial

Introduction

Here is the source code for com.netflix.genie.web.configs.MvcConfigUnitTests.java

Source

/*
 *
 *  Copyright 2016 Netflix, Inc.
 *
 *     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 com.netflix.genie.web.configs;

import com.netflix.genie.core.properties.JobsProperties;
import com.netflix.genie.test.categories.UnitTest;
import com.netflix.genie.web.resources.handlers.GenieResourceHttpRequestHandler;
import com.netflix.genie.web.resources.writers.DefaultDirectoryWriter;
import com.netflix.genie.web.resources.writers.DirectoryWriter;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.mockito.Mockito;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;

import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.UUID;

/**
 * Unit tests for the MvcConfig beans.
 *
 * @author tgianos
 * @since 3.0.0
 */
@Category(UnitTest.class)
public class MvcConfigUnitTests {

    private MvcConfig mvcConfig;

    /**
     * Setup for the tests.
     */
    @Before
    public void setup() {
        this.mvcConfig = new MvcConfig();
    }

    /**
     * Make sure the suffix pattern matcher is turned off.
     */
    @Test
    public void doesTurnOffSuffixMatcher() {
        final PathMatchConfigurer configurer = Mockito.mock(PathMatchConfigurer.class);
        this.mvcConfig.configurePathMatch(configurer);
        Mockito.verify(configurer, Mockito.times(1)).setUseRegisteredSuffixPatternMatch(true);
    }

    /**
     * Make sure we get a valid resource loader.
     */
    @Test
    public void canGetResourceLoader() {
        Assert.assertTrue(this.mvcConfig.resourceLoader() instanceof DefaultResourceLoader);
    }

    /**
     * Make sure we get the correct host.
     *
     * @throws UnknownHostException When the host can't be calculated
     */
    @Test
    public void canGetHostname() throws UnknownHostException {
        final String expectedHostname = InetAddress.getLocalHost().getCanonicalHostName();
        Assert.assertThat(this.mvcConfig.hostName(), Matchers.is(expectedHostname));
    }

    /**
     * Make sure we get a valid rest template to use.
     */
    @Test
    public void canGetRestTemplate() {
        Assert.assertNotNull(this.mvcConfig.restTemplate(1, 1));
    }

    /**
     * Make sure the default implementation of a directory writer is used in this default configuration.
     */
    @Test
    public void canGetDirectoryWriter() {
        Assert.assertTrue(this.mvcConfig.directoryWriter() instanceof DefaultDirectoryWriter);
    }

    /**
     * Test to make sure we can't create a jobs dir resource if the directory can't be created when the input jobs
     * dir is invalid in any way.
     *
     * @throws IOException On error
     */
    @Test
    public void cantGetJobsDirWhenJobsDirInvalid() throws IOException {
        final ResourceLoader resourceLoader = Mockito.mock(ResourceLoader.class);
        final String jobsDirLocation = UUID.randomUUID().toString();
        final JobsProperties jobsProperties = new JobsProperties();
        jobsProperties.getLocations().setJobs(jobsDirLocation);

        final Resource tmpResource = Mockito.mock(Resource.class);
        Mockito.when(resourceLoader.getResource(jobsDirLocation)).thenReturn(tmpResource);
        Mockito.when(tmpResource.exists()).thenReturn(true);

        final File file = Mockito.mock(File.class);
        Mockito.when(tmpResource.getFile()).thenReturn(file);
        Mockito.when(file.isDirectory()).thenReturn(false);

        try {
            this.mvcConfig.jobsDir(resourceLoader, jobsProperties);
            Assert.fail();
        } catch (final IllegalStateException ise) {
            Assert.assertThat(ise.getMessage(),
                    Matchers.is(jobsDirLocation + " exists but isn't a directory. Unable to continue"));
        }

        final String localJobsDir = jobsDirLocation + "/";
        Mockito.when(file.isDirectory()).thenReturn(true);
        final Resource jobsDirResource = Mockito.mock(Resource.class);
        Mockito.when(resourceLoader.getResource(localJobsDir)).thenReturn(jobsDirResource);
        Mockito.when(tmpResource.exists()).thenReturn(false);

        Mockito.when(jobsDirResource.exists()).thenReturn(false);
        Mockito.when(jobsDirResource.getFile()).thenReturn(file);
        Mockito.when(file.mkdirs()).thenReturn(false);

        try {
            this.mvcConfig.jobsDir(resourceLoader, jobsProperties);
            Assert.fail();
        } catch (final IllegalStateException ise) {
            Assert.assertThat(ise.getMessage(),
                    Matchers.is("Unable to create jobs directory " + jobsDirLocation + " and it doesn't exist."));
        }
    }

    /**
     * Make sure we can get a valid job resource when all conditions are met.
     *
     * @throws IOException for any problem
     */
    @Test
    public void canGetJobsDir() throws IOException {
        final ResourceLoader resourceLoader = Mockito.mock(ResourceLoader.class);
        final String jobsDirLocation = UUID.randomUUID().toString() + "/";
        final JobsProperties jobsProperties = new JobsProperties();
        jobsProperties.getLocations().setJobs(jobsDirLocation);

        final Resource jobsDirResource = Mockito.mock(Resource.class);
        Mockito.when(resourceLoader.getResource(jobsDirLocation)).thenReturn(jobsDirResource);
        Mockito.when(jobsDirResource.exists()).thenReturn(true);

        final File file = Mockito.mock(File.class);
        Mockito.when(jobsDirResource.getFile()).thenReturn(file);
        Mockito.when(file.isDirectory()).thenReturn(true);

        final Resource jobsDir = this.mvcConfig.jobsDir(resourceLoader, jobsProperties);
        Assert.assertNotNull(jobsDir);
    }

    /**
     * Make sure we can get a valid genieResourceHttpRequestHandler.
     */
    @Test
    public void canGetGenieResourceHttpRequestHandler() {
        final DirectoryWriter directoryWriter = Mockito.mock(DirectoryWriter.class);
        final ApplicationContext context = Mockito.mock(ApplicationContext.class);
        final Resource jobsDir = Mockito.mock(Resource.class);

        final GenieResourceHttpRequestHandler handler = this.mvcConfig
                .genieResourceHttpRequestHandler(directoryWriter, context, jobsDir);
        Assert.assertThat(handler.getApplicationContext(), Matchers.is(context));
        Assert.assertThat(handler.getLocations(), Matchers.hasSize(1));
        Assert.assertThat(handler.getLocations(), Matchers.contains(jobsDir));
    }
}