com.thoughtworks.go.util.validators.LogDirectoryTest.java Source code

Java tutorial

Introduction

Here is the source code for com.thoughtworks.go.util.validators.LogDirectoryTest.java

Source

/*************************GO-LICENSE-START*********************************
 * Copyright 2014 ThoughtWorks, 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.
 *************************GO-LICENSE-END***********************************/

package com.thoughtworks.go.util.validators;

import java.io.File;
import java.io.IOException;

import com.googlecode.junit.ext.JunitExtRunner;
import com.googlecode.junit.ext.RunIf;
import com.thoughtworks.go.junitext.EnhancedOSChecker;
import com.thoughtworks.go.util.FileUtil;
import com.thoughtworks.go.util.OperatingSystem;
import com.thoughtworks.go.util.TestFileUtil;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import static com.thoughtworks.go.junitext.EnhancedOSChecker.DO_NOT_RUN_ON;
import static com.thoughtworks.go.junitext.EnhancedOSChecker.WINDOWS;
import static com.thoughtworks.go.util.FileUtil.writeContentToFile;
import static com.thoughtworks.go.util.OperatingSystem.LINUX;
import static com.thoughtworks.go.util.OperatingSystem.OSX;
import static com.thoughtworks.go.util.OperatingSystem.SUN_OS;
import static org.apache.commons.io.FileUtils.readFileToString;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.core.IsNot.not;
import static org.hamcrest.core.StringContains.containsString;
import static org.junit.Assert.assertThat;

@RunWith(JunitExtRunner.class)
public class LogDirectoryTest {
    private File configFolder;
    private File existingLogFolder;
    private File log4jPropertiesFile;

    @Before
    public void setUp() throws Exception {
        configFolder = TestFileUtil.createTempFolder("config-" + System.currentTimeMillis());
        existingLogFolder = TestFileUtil.createTempFolder("log-" + System.currentTimeMillis());
        log4jPropertiesFile = new File(configFolder, "log4j.properties");
        FileUtils.writeStringToFile(log4jPropertiesFile, LOG4J_CONFIG_FILE_CONTENTS);
    }

    @After
    public void tearDown() throws Exception {
        FileUtil.deleteFolder(configFolder);
        FileUtil.deleteFolder(existingLogFolder);
    }

    @Test
    public void shouldHaveCorrectPaths() throws Exception {
        assertThat(LogDirectory.fromEnvironment(LINUX), is(new LogDirectory("/var/log/go-server")));
        assertThat(LogDirectory.fromEnvironment(SUN_OS), is(new LogDirectory("/var/log/cruise-server")));
        assertThat(LogDirectory.fromEnvironment(OSX), is(new LogDirectory("/Library/Logs/GoServer")));
        assertThat(LogDirectory.fromEnvironment(OperatingSystem.WINDOWS), is(LogDirectory.CURRENT));
    }

    @Test
    @RunIf(value = EnhancedOSChecker.class, arguments = { DO_NOT_RUN_ON, WINDOWS })
    public void shouldAppendShineLog4jPropertiesToExistingFile() throws IOException {
        String dir = existingLogFolder.getAbsolutePath();
        LogDirectory logDirectory = new LogDirectory(dir);
        logDirectory.update(log4jPropertiesFile, new Validation());
        String upgradedFile = readFileToString(log4jPropertiesFile);
        assertThat(upgradedFile,
                containsString("log4j.logger.com.thoughtworks.studios.shine=WARN,ShineFileAppender\n"
                        + "# Rolling log file output for shine...\n"
                        + "log4j.appender.ShineFileAppender=org.apache.log4j.RollingFileAppender\n"
                        + "log4j.appender.ShineFileAppender.File=" + dir + "/go-shine.log\n"
                        + "log4j.appender.ShineFileAppender.MaxFileSize=10240KB\n"
                        + "log4j.appender.ShineFileAppender.MaxBackupIndex=50\n"
                        + "log4j.appender.ShineFileAppender.layout=org.apache.log4j.PatternLayout\n"
                        + "log4j.appender.ShineFileAppender.layout.conversionPattern=%d{ISO8601} %5p [%t] %c{1}:%L - %m%n"));
        assertThat(upgradedFile, not(containsString("#upgrade_check")));
    }

    @Test
    @RunIf(value = EnhancedOSChecker.class, arguments = { EnhancedOSChecker.WINDOWS })
    public void shouldAppendShineLog4jPropertiesToExistingFile_InWindows() throws IOException {//this exists just because of the case of \r\n line ending problem
        String dir = existingLogFolder.getAbsolutePath();
        LogDirectory logDirectory = new LogDirectory(dir);
        logDirectory.update(log4jPropertiesFile, new Validation());
        String upgradedFile = readFileToString(log4jPropertiesFile);
        assertThat(upgradedFile,
                containsString("log4j.logger.com.thoughtworks.studios.shine=WARN,ShineFileAppender\r\n"
                        + "# Rolling log file output for shine...\r\n"
                        + "log4j.appender.ShineFileAppender=org.apache.log4j.RollingFileAppender\r\n"
                        + "log4j.appender.ShineFileAppender.File=" + dir + "/go-shine.log\r\n"
                        + "log4j.appender.ShineFileAppender.MaxFileSize=10240KB\r\n"
                        + "log4j.appender.ShineFileAppender.MaxBackupIndex=50\r\n"
                        + "log4j.appender.ShineFileAppender.layout=org.apache.log4j.PatternLayout\r\n"
                        + "log4j.appender.ShineFileAppender.layout.conversionPattern=%d{ISO8601} %5p [%t] %c{1}:%L - %m%n"));
        assertThat(upgradedFile, not(containsString("#upgrade_check")));
    }

    @Test
    public void shouldNotAppendShineLog4jPropertiesToExistingFileIfOneAlreadyExists() throws IOException {
        writeContentToFile(
                readFileToString(log4jPropertiesFile)
                        + "\nlog4j.logger.com.thoughtworks.studios.shine=INFO,FooFileAppender\n",
                log4jPropertiesFile);
        LogDirectory logDirectory = new LogDirectory(existingLogFolder.getAbsolutePath());
        logDirectory.update(log4jPropertiesFile, new Validation());
        String upgradedFile = readFileToString(log4jPropertiesFile);
        assertThat(upgradedFile,
                containsString("log4j.logger.com.thoughtworks.studios.shine=INFO,FooFileAppender\n"));
        assertThat(upgradedFile,
                not(containsString("log4j.logger.com.thoughtworks.studios.shine=WARN,ShineFileAppender\n")));
        assertThat(upgradedFile, not(containsString("#upgrade_check")));
    }

    @Test
    public void shouldAppendRailsWarnToExistingFile() throws IOException {
        LogDirectory logDirectory = new LogDirectory(existingLogFolder.getAbsolutePath());
        logDirectory.update(log4jPropertiesFile, new Validation());
        String upgradedFile = readFileToString(log4jPropertiesFile);
        assertThat(upgradedFile, containsString("log4j.logger.com.thoughtworks.go.server.Rails=WARN"));
        assertThat(upgradedFile, not(containsString("#upgrade_check")));
    }

    @Test
    public void shouldUpdateLog4jPropertiesFileWhenNewFolderExists() throws Exception {
        LogDirectory logDirectory = new LogDirectory(existingLogFolder.getAbsolutePath());
        logDirectory.update(log4jPropertiesFile, new Validation());

        assertThat(readFileToString(log4jPropertiesFile), containsString(
                "log4j.appender.FileAppender.File=" + existingLogFolder.getAbsolutePath() + "/go-server.log"));
    }

    @Test
    public void shouldLeaveLog4jPropertiesFileAloneWhenFolderDoesNotExist() throws Exception {
        File notExists = new File(existingLogFolder.getAbsolutePath() + "-not-exists");
        LogDirectory logDirectory = new LogDirectory(notExists.getAbsolutePath());
        logDirectory.update(log4jPropertiesFile, new Validation());

        assertThat(readFileToString(log4jPropertiesFile),
                containsString("log4j.appender.FileAppender.File=go-server.log"));
    }

    private static final String LOG4J_CONFIG_FILE_CONTENTS = "log4j.rootLogger=INFO, FileAppender\n"
            + "log4j.logger.org.apache.velocity=ERROR, FileAppender\n" + "\n"
            + "log4j.appender.FileAppender=org.apache.log4j.RollingFileAppender\n"
            + "log4j.appender.FileAppender.File=go-server.log\n"
            + "log4j.appender.FileAppender.MaxFileSize=10240KB\n"
            + "log4j.appender.FileAppender.MaxBackupIndex=50\n"
            + "log4j.appender.FileAppender.layout=org.apache.log4j.PatternLayout\n"
            + "log4j.appender.FileAppender.layout.conversionPattern=%d{ISO8601} %5p [%t] %c{1}:%L - %m%n\n" + "\n"
            + "log4j.appender.PerfAppender=org.apache.log4j.RollingFileAppender\n"
            + "log4j.appender.PerfAppender.File=go-perf.log\n" + "log4j.appender.PerfAppender.MaxFileSize=10240KB\n"
            + "log4j.appender.PerfAppender.MaxBackupIndex=20\n"
            + "log4j.appender.PerfAppender.layout=org.apache.log4j.PatternLayout\n"
            + "log4j.appender.PerfAppender.layout.conversionPattern=%d{ISO8601} %5p [%t] %c{1}:%L - %m%n\n" + "\n"
            + "log4j.appender.AgentServAppender=org.apache.log4j.RollingFileAppender\n"
            + "log4j.appender.AgentServAppender.File=cruise-agentserv.log\n"
            + "log4j.appender.AgentServAppender.MaxFileSize=10240KB\n"
            + "log4j.appender.AgentServAppender.MaxBackupIndex=20\n"
            + "log4j.appender.AgentServAppender.layout=org.apache.log4j.PatternLayout\n"
            + "log4j.appender.AgentServAppender.layout.conversionPattern=%d{ISO8601} %5p [%t] %c{1}:%L - %m%n";
}