blob: 4c72e0f948ed651278aad3729438c9a7c2e9f9f9 [file] [log] [blame]
/*
* 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.sling.feature.io;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import org.junit.Test;
public class IOUtilsTest {
@Test public void testFileSort() {
final String[] files = new String[] {
"/different/path/app.json",
"/path/to/base.json",
"/path/to/feature.json",
"/path/to/amode/feature.json",
"/path/to/later/feature.json",
"http://sling.apache.org/features/one.json",
"http://sling.apache.org/features/two.json",
"http://sling.apache.org/features/amode/feature.json"
};
final List<String> l = new ArrayList<>(Arrays.asList(files));
Collections.sort(l, IOUtils.FEATURE_PATH_COMP);
for(int i=0; i<files.length; i++) {
assertEquals(files[i], l.get(i));
}
}
@Test public void testGetFileFromURL() throws IOException {
File file = File.createTempFile("IOUtilsTest \\\\+%23öäü^^^°$::", ".test");
try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"))) {
writer.println("Hello");
}
assertEquals(file, IOUtils.getFileFromURL(new URL("file:" + file.getPath()), false, null));
assertEquals(file, IOUtils.getFileFromURL(file.toURI().toURL(), false, null));
URL url = new URL(null,"bla:" + file.toURI().toURL(), new URLStreamHandler() {
@Override
protected URLConnection openConnection(URL u){
return new URLConnection(u) {
@Override
public void connect()
{
}
@Override
public InputStream getInputStream() throws IOException
{
return new FileInputStream(file);
}
};
}
});
assertNull(IOUtils.getFileFromURL(url, false, null));
File tmp = IOUtils.getFileFromURL(url, true, null);
assertNotEquals(file, tmp);
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(tmp), "UTF-8"))) {
assertEquals("Hello", reader.readLine());
}
File jarFile = File.createTempFile("\"IOUtilsTest \\\\\\\\+%23öäü^^^°$::\"", ".jar");
try (JarOutputStream output = new JarOutputStream(new FileOutputStream(jarFile))) {
output.putNextEntry(new JarEntry("test"));
output.write("Hello".getBytes());
output.closeEntry();
}
assertEquals(jarFile, IOUtils.getFileFromURL(new URL("jar:file:" + jarFile.getPath() + "!/"), false, null));
assertEquals(jarFile, IOUtils.getFileFromURL(new URL("jar:" + jarFile.toURI().toURL() + "!/"), false, null));
assertNull(IOUtils.getFileFromURL(new URL("jar:file:" + jarFile.getPath() + "!/test"), false, null));
File tmpJar = IOUtils.getFileFromURL(new URL("jar:" + jarFile.toURI().toURL() + "!/test"), true, null);
assertNotNull(tmpJar);
assertNotEquals(jarFile, tmpJar);
}
@Test public void testGetJarFileFromURL() throws IOException {
File jarFile = File.createTempFile("\"IOUtilsTest \\\\\\\\+%23öäü^^^°$::\"", ".jar");
try (JarOutputStream output = new JarOutputStream(new FileOutputStream(jarFile))) {
output.putNextEntry(new JarEntry("test"));
output.write("Hello".getBytes());
output.closeEntry();
output.putNextEntry(new JarEntry("test.jar"));
try (JarOutputStream inner = new JarOutputStream(output)) {
inner.putNextEntry(new JarEntry("inner"));
inner.write("Hello".getBytes());
inner.closeEntry();
}
}
JarFile jar = IOUtils.getJarFileFromURL(new URL("jar:" + jarFile.toURI().toURL() + "!/"), true, null);
assertNotNull(jar);
jar = IOUtils.getJarFileFromURL(jarFile.toURI().toURL(), true, null);
assertNotNull(jar);
assertNull(IOUtils.getFileFromURL(new URL("jar:" + jarFile.toURI().toURL() + "!/test"), false, null));
JarFile tmpJar = IOUtils.getJarFileFromURL(new URL("jar:" + jarFile.toURI().toURL() + "!/test.jar"), true, null);
assertNotNull(tmpJar);
assertNotNull(tmpJar.getEntry("inner"));
try {
IOUtils.getJarFileFromURL(new URL("jar:" + jarFile.toURI().toURL() + "!/test"), true, null);
fail();
} catch (IOException ex) {
// Expected
}
try {
IOUtils.getJarFileFromURL(new URL("jar:" + jarFile.toURI().toURL() + "!/test.jar"), false, null);
fail();
} catch (IOException ex) {
// Expected
}
}
}