diff options
Diffstat (limited to 'jimfs/src/test/java/com/google/common/jimfs/UrlTest.java')
-rw-r--r-- | jimfs/src/test/java/com/google/common/jimfs/UrlTest.java | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/jimfs/src/test/java/com/google/common/jimfs/UrlTest.java b/jimfs/src/test/java/com/google/common/jimfs/UrlTest.java new file mode 100644 index 0000000..f724c7f --- /dev/null +++ b/jimfs/src/test/java/com/google/common/jimfs/UrlTest.java @@ -0,0 +1,127 @@ +/* + * Copyright 2015 Google 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. + */ + +package com.google.common.jimfs; + +import static com.google.common.base.StandardSystemProperty.LINE_SEPARATOR; +import static com.google.common.truth.Truth.assertThat; +import static java.nio.charset.StandardCharsets.UTF_8; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Range; +import com.google.common.io.Resources; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.file.FileSystem; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.attribute.FileTime; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Tests that {@link URL} instances can be created and used from jimfs URIs. + * + * @author Colin Decker + */ +@RunWith(JUnit4.class) +public class UrlTest { + + private final FileSystem fs = Jimfs.newFileSystem(Configuration.unix()); + private Path path = fs.getPath("foo"); + + @Test + public void creatUrl() throws MalformedURLException { + URL url = path.toUri().toURL(); + assertThat(url).isNotNull(); + } + + @Test + public void readFromUrl() throws IOException { + Files.write(path, ImmutableList.of("Hello World"), UTF_8); + + URL url = path.toUri().toURL(); + assertThat(Resources.asCharSource(url, UTF_8).read()) + .isEqualTo("Hello World" + LINE_SEPARATOR.value()); + } + + @Test + public void readDirectoryContents() throws IOException { + Files.createDirectory(path); + Files.createFile(path.resolve("a.txt")); + Files.createFile(path.resolve("b.txt")); + Files.createDirectory(path.resolve("c")); + + URL url = path.toUri().toURL(); + assertThat(Resources.asCharSource(url, UTF_8).read()).isEqualTo("a.txt\nb.txt\nc\n"); + } + + @Test + public void headers() throws IOException { + byte[] bytes = {1, 2, 3}; + Files.write(path, bytes); + FileTime lastModified = Files.getLastModifiedTime(path); + + URL url = path.toUri().toURL(); + URLConnection conn = url.openConnection(); + + // read header fields directly + assertThat(conn.getHeaderFields()).containsEntry("content-length", ImmutableList.of("3")); + assertThat(conn.getHeaderFields()) + .containsEntry("content-type", ImmutableList.of("application/octet-stream")); + + if (lastModified != null) { + assertThat(conn.getHeaderFields()).containsKey("last-modified"); + assertThat(conn.getHeaderFields()).hasSize(3); + } else { + assertThat(conn.getHeaderFields()).hasSize(2); + } + + // use the specific methods for reading the expected headers + assertThat(conn.getContentLengthLong()).isEqualTo(Files.size(path)); + assertThat(conn.getContentType()).isEqualTo("application/octet-stream"); + + if (lastModified != null) { + // The HTTP date format does not include milliseconds, which means that the last modified time + // returned from the connection may not be exactly the same as that of the file system itself. + // The difference should less than 1000ms though, and should never be greater. + long difference = lastModified.toMillis() - conn.getLastModified(); + assertThat(difference).isIn(Range.closedOpen(0L, 1000L)); + } else { + assertThat(conn.getLastModified()).isEqualTo(0L); + } + } + + @Test + public void contentType() throws IOException { + path = fs.getPath("foo.txt"); + Files.write(path, ImmutableList.of("Hello World"), UTF_8); + + URL url = path.toUri().toURL(); + URLConnection conn = url.openConnection(); + + // Should be text/plain, but this is entirely dependent on the installed FileTypeDetectors + String detectedContentType = Files.probeContentType(path); + if (detectedContentType == null) { + assertThat(conn.getContentType()).isEqualTo("application/octet-stream"); + } else { + assertThat(conn.getContentType()).isEqualTo(detectedContentType); + } + } +} |