io.uploader.drive.config.ConfigTest.java Source code

Java tutorial

Introduction

Here is the source code for io.uploader.drive.config.ConfigTest.java

Source

/*
 * Copyright 2014 Loic Merckel
 * 
 * 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 io.uploader.drive.config;

import io.uploader.drive.config.proxy.HasProxySettings;
import io.uploader.drive.config.proxy.Proxy;

import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Arrays;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.uploader.drive.config.Configuration;

import org.junit.Test;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class ConfigTest {

    final private static Logger logger = LoggerFactory.getLogger(ConfigTest.class);
    private File configSettingFile = null;
    private static boolean hasConfigBeenLoaded = false;

    @Rule
    public TemporaryFolder tmpFolder = new TemporaryFolder();

    @Before
    public void init() throws IOException {

        // generate the test config file
        File template = new File(
                new ConfigTest().getClass().getResource("/driveuploader-settings-test.xml").getFile());
        configSettingFile = tmpFolder.newFile();
        FileUtils.copyFile(template, configSettingFile);
        assertFalse(configSettingFile == null);
        assertTrue(io.uploader.drive.util.FileUtils.getFileAttr(Paths.get(configSettingFile.getPath())).size() > 0);

        // Check the default values before loading
        if (!hasConfigBeenLoaded) {
            assertTrue(80 == Configuration.INSTANCE.getHttpProxySettings().getPort());
            assertTrue(443 == Configuration.INSTANCE.getHttpsProxySettings().getPort());
        }

        // load the test settings
        try {
            Configuration.INSTANCE.load(configSettingFile.getPath());
            hasConfigBeenLoaded = true;
        } catch (ConfigurationException e) {
            logger.error("Error occurred while loading the cinfiguration file", e);
            assertTrue(false);
        }
    }

    @Test
    public void shouldHaveHttpProxy() {
        verifyProxy(Configuration.INSTANCE.getHttpProxySettings(), false, "host-http", 9000, "user-http",
                "password-http");
    }

    @Test
    public void shouldHaveHttpsProxy() {
        verifyProxy(Configuration.INSTANCE.getHttpsProxySettings(), false, "host-https", 9001, "user-https",
                "password-https");
    }

    private void verifyProxy(HasProxySettings proxySettings, boolean isActivate, String host, int port,
            String username, String password) {
        assertTrue(proxySettings.isActive() == isActivate);
        assertTrue(username.equals(proxySettings.getUsername()));
        assertTrue(password.equals(proxySettings.getPassword()));
        assertTrue(host.equals(proxySettings.getHost()));
        assertTrue(port == proxySettings.getPort());
    }

    @Test
    public void shouldUpdateHttpProxy() throws IOException {

        verifyProxy(Configuration.INSTANCE.getHttpProxySettings(), false, "host-http", 9000, "user-http",
                "password-http");

        byte[] initFileContents = FileUtils.readFileToByteArray(configSettingFile);

        boolean activated = true;
        String host = "host.of.the.new.proxy";
        String password = "the*new_password";
        String username = "the new user name";
        int port = 8567;
        Proxy newProxy = new Proxy.Builder("http").setActivated(activated).setHost(host).setPassword(password)
                .setUsername(username).setPort(port).build();

        Configuration.INSTANCE.updateProxy(newProxy);

        verifyProxy(Configuration.INSTANCE.getHttpProxySettings(), activated, host, port, username, password);

        byte[] updatedFileContents = FileUtils.readFileToByteArray(configSettingFile);
        assertFalse(Arrays.equals(updatedFileContents, initFileContents));
    }

    @Test
    public void shouldUpdateHttpsProxy() throws IOException {

        verifyProxy(Configuration.INSTANCE.getHttpsProxySettings(), false, "host-https", 9001, "user-https",
                "password-https");

        byte[] initFileContents = FileUtils.readFileToByteArray(configSettingFile);

        boolean activated = true;
        String host = "host.of.the.new.secured.proxy";
        String password = "the*new_password*https";
        String username = "the new user name for https";
        int port = 8577;
        Proxy newProxy = new Proxy.Builder("https").setActivated(activated).setHost(host).setPassword(password)
                .setUsername(username).setPort(port).build();

        Configuration.INSTANCE.updateProxy(newProxy);

        verifyProxy(Configuration.INSTANCE.getHttpsProxySettings(), activated, host, port, username, password);

        byte[] updatedFileContents = FileUtils.readFileToByteArray(configSettingFile);
        assertFalse(Arrays.equals(updatedFileContents, initFileContents));
    }
}