13c7c9b2aSChris Fraire /* 23c7c9b2aSChris Fraire * CDDL HEADER START 33c7c9b2aSChris Fraire * 43c7c9b2aSChris Fraire * The contents of this file are subject to the terms of the 53c7c9b2aSChris Fraire * Common Development and Distribution License (the "License"). 63c7c9b2aSChris Fraire * You may not use this file except in compliance with the License. 73c7c9b2aSChris Fraire * 83c7c9b2aSChris Fraire * See LICENSE.txt included in this distribution for the specific 93c7c9b2aSChris Fraire * language governing permissions and limitations under the License. 103c7c9b2aSChris Fraire * 113c7c9b2aSChris Fraire * When distributing Covered Code, include this CDDL HEADER in each 123c7c9b2aSChris Fraire * file and include the License file at LICENSE.txt. 133c7c9b2aSChris Fraire * If applicable, add the following below this CDDL HEADER, with the 143c7c9b2aSChris Fraire * fields enclosed by brackets "[]" replaced with your own identifying 153c7c9b2aSChris Fraire * information: Portions Copyright [yyyy] [name of copyright owner] 163c7c9b2aSChris Fraire * 173c7c9b2aSChris Fraire * CDDL HEADER END 183c7c9b2aSChris Fraire */ 193c7c9b2aSChris Fraire 203c7c9b2aSChris Fraire /* 21*5082f8ecSVladimir Kotal * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. 223c7c9b2aSChris Fraire * Copyright (c) 2020, Chris Fraire <cfraire@me.com>. 233c7c9b2aSChris Fraire */ 243c7c9b2aSChris Fraire package org.opengrok.web.util; 253c7c9b2aSChris Fraire 26712a1733SAdam Hornacek import org.junit.jupiter.api.Test; 27*5082f8ecSVladimir Kotal import org.junit.jupiter.params.ParameterizedTest; 28*5082f8ecSVladimir Kotal import org.junit.jupiter.params.provider.ValueSource; 29*5082f8ecSVladimir Kotal import org.opengrok.indexer.configuration.RuntimeEnvironment; 30712a1733SAdam Hornacek 31*5082f8ecSVladimir Kotal import static org.junit.jupiter.api.Assertions.assertNotNull; 323c7c9b2aSChris Fraire import static org.junit.jupiter.api.Assertions.assertThrows; 33*5082f8ecSVladimir Kotal import static org.junit.jupiter.api.Assertions.assertTrue; 343c7c9b2aSChris Fraire 35*5082f8ecSVladimir Kotal import java.io.File; 363c7c9b2aSChris Fraire import java.io.FileNotFoundException; 37*5082f8ecSVladimir Kotal import java.io.IOException; 38*5082f8ecSVladimir Kotal import java.nio.file.Files; 39*5082f8ecSVladimir Kotal import java.nio.file.InvalidPathException; 40*5082f8ecSVladimir Kotal import java.nio.file.Path; 41*5082f8ecSVladimir Kotal import java.nio.file.Paths; 423c7c9b2aSChris Fraire import java.util.UUID; 433c7c9b2aSChris Fraire 443c7c9b2aSChris Fraire /** 453c7c9b2aSChris Fraire * Represents a container for tests of {@link FileUtil}. 463c7c9b2aSChris Fraire */ 47*5082f8ecSVladimir Kotal class FileUtilTest { 48*5082f8ecSVladimir Kotal 49*5082f8ecSVladimir Kotal RuntimeEnvironment env = RuntimeEnvironment.getInstance(); 503c7c9b2aSChris Fraire 513c7c9b2aSChris Fraire @Test shouldThrowOnNullArgument()52*5082f8ecSVladimir Kotal void shouldThrowOnNullArgument() { 533c7c9b2aSChris Fraire assertThrows(NoPathParameterException.class, () -> FileUtil.toFile(null), 543c7c9b2aSChris Fraire "toFile(null)"); 553c7c9b2aSChris Fraire } 563c7c9b2aSChris Fraire setSourceRoot(String id)57*5082f8ecSVladimir Kotal private String setSourceRoot(String id) throws IOException { 58*5082f8ecSVladimir Kotal String origRoot = env.getSourceRootPath(); 59*5082f8ecSVladimir Kotal Path dir = Files.createTempDirectory(id); 60*5082f8ecSVladimir Kotal dir.toFile().deleteOnExit(); 61*5082f8ecSVladimir Kotal env.setSourceRoot(dir.toString()); 62*5082f8ecSVladimir Kotal assertTrue(env.getSourceRootFile().isDirectory()); 63*5082f8ecSVladimir Kotal return origRoot; 64*5082f8ecSVladimir Kotal } 65*5082f8ecSVladimir Kotal 663c7c9b2aSChris Fraire @Test shouldThrowOnInvalidFile()67*5082f8ecSVladimir Kotal void shouldThrowOnInvalidFile() throws IOException { 68*5082f8ecSVladimir Kotal String origRoot = setSourceRoot("shouldThrowOnInvalidFile"); 69*5082f8ecSVladimir Kotal String rndPath = ".." + File.separator + UUID.randomUUID(); 70*5082f8ecSVladimir Kotal assertThrows(InvalidPathException.class, () -> FileUtil.toFile(rndPath), 71*5082f8ecSVladimir Kotal "toFile(randomUUID)"); 72*5082f8ecSVladimir Kotal env.setSourceRoot(origRoot); 73*5082f8ecSVladimir Kotal } 74*5082f8ecSVladimir Kotal 75*5082f8ecSVladimir Kotal @ParameterizedTest 76*5082f8ecSVladimir Kotal @ValueSource(booleans = {true, false}) shouldThrowOnMissingFile(boolean isPresent)77*5082f8ecSVladimir Kotal void shouldThrowOnMissingFile(boolean isPresent) throws IOException, NoPathParameterException { 78*5082f8ecSVladimir Kotal String origRoot = setSourceRoot("shouldThrowOnMissingFile"); 79*5082f8ecSVladimir Kotal if (isPresent) { 80*5082f8ecSVladimir Kotal String fileName = "existent"; 81*5082f8ecSVladimir Kotal Path filePath = Paths.get(env.getSourceRootPath(), fileName); 82*5082f8ecSVladimir Kotal Files.createFile(filePath); 83*5082f8ecSVladimir Kotal filePath.toFile().deleteOnExit(); 84*5082f8ecSVladimir Kotal assertTrue(filePath.toFile().exists()); 85*5082f8ecSVladimir Kotal assertNotNull(FileUtil.toFile(fileName)); 86*5082f8ecSVladimir Kotal } else { 87*5082f8ecSVladimir Kotal assertThrows(FileNotFoundException.class, () -> FileUtil.toFile("nonexistent"), 88*5082f8ecSVladimir Kotal "toFile(nonexistent)"); 89*5082f8ecSVladimir Kotal } 90*5082f8ecSVladimir Kotal env.setSourceRoot(origRoot); 913c7c9b2aSChris Fraire } 923c7c9b2aSChris Fraire } 93