org.forgerock.openidm.maintenance.upgrade.FileStateCheckerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.forgerock.openidm.maintenance.upgrade.FileStateCheckerTest.java

Source

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 2015 ForgeRock AS. All Rights Reserved
 *
 * The contents of this file are subject to the terms
 * of the Common Development and Distribution License
 * (the License). You may not use this file except in
 * compliance with the License.
 *
 * You can obtain a copy of the License at
 * http://forgerock.org/license/CDDLv1.0.html
 * See the License for the specific language governing
 * permission and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL
 * Header Notice in each file and include the License file
 * at http://forgerock.org/license/CDDLv1.0.html
 * If applicable, add the following below the CDDL Header,
 * with the fields enclosed by brackets [] replaced by
 * your own identifying information:
 * "Portions Copyrighted [year] [name of copyright owner]"
 */
package org.forgerock.openidm.maintenance.upgrade;

import static org.fest.assertions.api.Assertions.assertThat;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.security.NoSuchAlgorithmException;

import org.apache.commons.io.FileUtils;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;

/**
 * Test the FileStateChecker.
 */
public class FileStateCheckerTest {

    private Path tempPath;
    private Path tempFile;

    @BeforeSuite
    public void createTempDirPath() throws IOException {
        tempPath = Files.createTempDirectory(this.getClass().getSimpleName());
    }

    @AfterSuite
    public void destroyTempDirPath() throws IOException {
        FileUtils.deleteDirectory(tempPath.toFile());
    }

    @BeforeMethod
    public void setupTempChecksumFile() throws IOException, NoSuchAlgorithmException {
        tempFile = Files.createTempFile(tempPath, null, null);
    }

    @AfterMethod
    public void deleteCheckSumsCopy() throws IOException {
        Files.delete(tempFile);
    }

    @Test
    public void testUpdateStateNoChange() throws IOException, URISyntaxException, NoSuchAlgorithmException {
        Files.copy(Paths.get(getClass().getResource("/checksums.csv").toURI()), tempFile,
                StandardCopyOption.REPLACE_EXISTING);
        ChecksumFile tempChecksumFile = new ChecksumFile(tempFile);
        FileStateChecker checker = new FileStateChecker(tempChecksumFile);
        Path filepath = Paths.get("file1");
        checker.updateState(filepath);
        checker = new FileStateChecker(tempChecksumFile);
        assertThat(checker.getCurrentFileState(filepath).equals(FileState.UNCHANGED));
    }

    @Test
    public void testUpdateStateWithChange() throws IOException, URISyntaxException, NoSuchAlgorithmException {
        Files.copy(Paths.get(getClass().getResource("/checksums2.csv").toURI()), tempFile,
                StandardCopyOption.REPLACE_EXISTING);
        ChecksumFile tempChecksumFile = new ChecksumFile(tempFile);
        FileStateChecker checker = new FileStateChecker(tempChecksumFile);
        Path filepath = Paths.get("file1");
        checker.updateState(filepath);
        checker = new FileStateChecker(tempChecksumFile);
        assertThat(checker.getCurrentFileState(filepath).equals(FileState.DIFFERS));
    }

    @Test
    public void testUpdateStateRemoval() throws IOException, URISyntaxException, NoSuchAlgorithmException {
        Files.copy(Paths.get(getClass().getResource("/checksums2.csv").toURI()), tempFile,
                StandardCopyOption.REPLACE_EXISTING);
        ChecksumFile tempChecksumFile = new ChecksumFile(tempFile);
        FileStateChecker checker = new FileStateChecker(tempChecksumFile);
        Path filepath = Paths.get("file3");
        checker.updateState(filepath);
        checker = new FileStateChecker(tempChecksumFile);
        assertThat(checker.getCurrentFileState(filepath).equals(FileState.DELETED));
    }

    @Test
    public void testUpdateStateAddition() throws IOException, URISyntaxException, NoSuchAlgorithmException {
        Files.copy(Paths.get(getClass().getResource("/checksums2.csv").toURI()), tempFile,
                StandardCopyOption.REPLACE_EXISTING);
        ChecksumFile tempChecksumFile = new ChecksumFile(tempFile);
        FileStateChecker checker = new FileStateChecker(tempChecksumFile);
        Path filepath = Paths.get("badformat.csv");
        assertThat(checker.getCurrentFileState(filepath).equals(FileState.NONEXISTENT));
        checker.updateState(filepath);
        checker = new FileStateChecker(tempChecksumFile);
        assertThat(checker.getCurrentFileState(filepath).equals(FileState.UNCHANGED));
    }

    @Test
    public void testFileMissing() throws IOException, NoSuchAlgorithmException, URISyntaxException {
        Path path = Paths.get(getClass().getResource("/checksums.csv").toURI());
        ChecksumFile checksumFile = new ChecksumFile(path);
        FileStateChecker checker = new FileStateChecker(checksumFile);
        assertThat(checker.getCurrentFileState(path.resolveSibling("file0"))).isEqualTo(FileState.NONEXISTENT);
    }

    @Test
    public void testFileUnchanged() throws IOException, NoSuchAlgorithmException, URISyntaxException {
        FileStateChecker checker = new FileStateChecker(
                new ChecksumFile(Paths.get(getClass().getResource("/checksums.csv").toURI())));
        assertThat(checker.getCurrentFileState(Paths.get("file1"))).isEqualTo(FileState.UNCHANGED);
    }

    @Test
    public void testFileDiffers() throws IOException, NoSuchAlgorithmException, URISyntaxException {
        FileStateChecker checker = new FileStateChecker(
                new ChecksumFile(Paths.get(getClass().getResource("/checksums.csv").toURI())));
        assertThat(checker.getCurrentFileState(Paths.get("file2"))).isEqualTo(FileState.DIFFERS);
    }
}