/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.tika.io;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.tika.metadata.Metadata;
import org.junit.Test;
public class TikaInputStreamTest {
@Test
public void testFileBased() throws IOException {
Path path = createTempFile("Hello, World!");
InputStream stream = TikaInputStream.get(path);
assertEquals(
"The file returned by the getFile() method should"
+ " be the file used to instantiate a TikaInputStream",
path, TikaInputStream.get(stream).getPath());
assertEquals(
"The contents of the TikaInputStream should equal the"
+ " contents of the underlying file",
"Hello, World!", readStream(stream));
stream.close();
assertTrue(
"The close() method must not remove the file used to"
+ " instantiate a TikaInputStream",
Files.exists(path));
Files.delete(path);
}
@Test
public void testStreamBased() throws IOException {
InputStream input = IOUtils.toInputStream("Hello, World!", UTF_8.name());
InputStream stream = TikaInputStream.get(input);
Path file = TikaInputStream.get(stream).getPath();
assertTrue(file != null && Files.isRegularFile(file));
assertEquals(
"The contents of the file returned by the getFile method"
+ " should equal the contents of the TikaInputStream",
"Hello, World!", readFile(file));
assertEquals(
"The contents of the TikaInputStream should not get modified"
+ " by reading the file first",
"Hello, World!", readStream(stream));
stream.close();
assertFalse(
"The close() method must remove the temporary file created"
+ " by a TikaInputStream",
Files.exists(file));
}
private Path createTempFile(String data) throws IOException {
Path file = Files.createTempFile("tika-", ".tmp");
Files.write(file, data.getBytes(UTF_8));
return file;
}
private String readFile(Path file) throws IOException {
return new String(Files.readAllBytes(file), UTF_8);
}
private String readStream(InputStream stream) throws IOException {
return IOUtils.toString(stream, UTF_8.name());
}
@Test
public void testGetMetadata() throws Exception {
URL url = TikaInputStreamTest.class.getResource("test.txt");
Metadata metadata = new Metadata();
TikaInputStream.get(url, metadata).close();
assertEquals("test.txt", metadata.get(Metadata.RESOURCE_NAME_KEY));
assertEquals(
Long.toString(Files.size(Paths.get(url.toURI()))),
metadata.get(Metadata.CONTENT_LENGTH));
}
}