xref: /OpenGrok/opengrok-web/src/test/java/org/opengrok/web/util/FileUtilTest.java (revision 5082f8ec5e11b8259d833bfd5e6749eb0030ddad)
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