/* * Universal Media Server, for streaming any media to DLNA * compatible renderers based on the http://www.ps3mediaserver.org. * Copyright (C) 2012 UMS developers. * * This program is a free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; version 2 * of the License only. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.pms.util; import java.io.File; 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.util.Random; import org.apache.commons.io.FileUtils; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; public class FilePermissionsTest { private final Class<?> CLASS = FilePermissionsTest.class; @Rule public ExpectedException exception = ExpectedException.none(); @Test public void throwsIllegalArgumentExceptionIfFileIsNull() throws FileNotFoundException { exception.expect(IllegalArgumentException.class); exception.expectMessage("File argument cannot be null"); File file = null; new FilePermissions(file); } public void throwsIllegalArgumentExceptionIfPathIsNull() throws FileNotFoundException { exception.expect(IllegalArgumentException.class); exception.expectMessage("File argument cannot be null"); Path path = null; new FilePermissions(path); } @Test public void throwsFileNotFoundExceptionIfFileDoesNotExist() throws FileNotFoundException { exception.expect(FileNotFoundException.class); new FilePermissions(new File("No such file")); } @Test public void throwsFileNotFoundExceptionIfPathDoesNotExist() throws FileNotFoundException { exception.expect(FileNotFoundException.class); new FilePermissions(Paths.get("No such file")); } @Test public void testFilePermissions() throws URISyntaxException, IOException { FilePermissions permissions = new FilePermissions(new File("")); assertTrue("CurrentFolderIsFolder", permissions.isFolder()); assertTrue("CurrentFolderIsReadable", permissions.isReadable()); assertTrue("CurrentFolderIsBrowsable", permissions.isBrowsable()); permissions = new FilePermissions(Paths.get("").toAbsolutePath()); assertTrue("CurrentFolderIsFolder", permissions.isFolder()); assertTrue("CurrentFolderIsReadable", permissions.isReadable()); assertTrue("CurrentFolderIsBrowsable", permissions.isBrowsable()); permissions = new FilePermissions(FileUtils.toFile(CLASS.getResource("english-utf8-with-bom.srt"))); assertTrue("FileIsReadable", permissions.isReadable()); assertTrue("FileIsWritable", permissions.isWritable()); assertFalse("FileIsNotFolder", permissions.isFolder()); assertFalse("FileIsNotBrowsable", permissions.isBrowsable()); permissions = new FilePermissions(permissions.getFile().getParentFile()); assertTrue("ParentIsFolder", permissions.isFolder()); assertTrue("ParentIsBrowsable", permissions.isBrowsable()); permissions = new FilePermissions(Paths.get(CLASS.getResource("english-utf8-with-bom.srt").toURI())); assertTrue("FileIsReadable", permissions.isReadable()); assertTrue("FileIsWritable", permissions.isWritable()); assertFalse("FileIsNotFolder", permissions.isFolder()); assertFalse("FileIsNotBrowsable", permissions.isBrowsable()); permissions = new FilePermissions(permissions.getPath().getParent()); assertTrue("ParentIsFolder", permissions.isFolder()); assertTrue("ParentIsBrowsable", permissions.isBrowsable()); File file = new File(System.getProperty("java.io.tmpdir"), String.format("UMS_temp_writable_file_%d.tmp", new Random().nextInt(10000))); if (file.createNewFile()) { try { assertTrue("TempFileIsReadable", new FilePermissions(file).isReadable()); assertTrue("TempFileIsWritable", new FilePermissions(file).isWritable()); assertFalse("TempFileIsNotFolder", new FilePermissions(file).isFolder()); assertFalse("TempFileIsNotBrowsable", new FilePermissions(file).isBrowsable()); } finally { file.delete(); } } Path path = Paths.get(System.getProperty("java.io.tmpdir"), String.format("UMS_temp_writable_file_%d.tmp", new Random().nextInt(10000))); Files.createFile(path); try { assertTrue("TempFileIsReadable", new FilePermissions(path).isReadable()); assertTrue("TempFileIsWritable", new FilePermissions(path).isWritable()); assertFalse("TempFileIsNotFolder", new FilePermissions(path).isFolder()); assertFalse("TempFileIsNotBrowsable", new FilePermissions(path).isBrowsable()); } finally { Files.delete(path); } } }