package org.arquillian.cube.impl.shrinkwrap.asset;
import java.io.ByteArrayOutputStream;
import java.io.File;
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 java.util.concurrent.TimeUnit;
import org.hamcrest.Matchers;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
public class CacheUrlAssetTest {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
private static String slurp(final InputStream in) throws IOException {
final ByteArrayOutputStream out = new ByteArrayOutputStream();
final byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) != -1) {
out.write(buffer, 0, length);
}
out.flush();
return new String(out.toByteArray());
}
@Test
public void shouldCacheFirstTime() throws IOException {
final File newFolder = temporaryFolder.newFolder();
CacheUrlAsset cacheUrlAsset =
new CacheUrlAsset(new URL("http://arquillian.org/images/arquillian_crown_icon_glossy_256.png"));
CacheUrlAsset.TEMP_LOCATION = newFolder.getAbsolutePath();
cacheUrlAsset.openStream();
assertThat(new File(newFolder, "arquillian_crown_icon_glossy_256.png").exists(), is(true));
}
@Test
public void shouldGetCachedResult() throws IOException {
final File newFolder = temporaryFolder.newFolder();
// Notice that arq.txt does not exists
CacheUrlAsset cacheUrlAsset = new CacheUrlAsset(new URL("http://arquillian.org/images/arq.txt"));
CacheUrlAsset.TEMP_LOCATION = newFolder.getAbsolutePath();
final Path path = Paths.get(newFolder.getAbsolutePath(), "arq.txt");
Files.write(path, "Hello".getBytes("UTF-8"));
InputStream is = cacheUrlAsset.openStream();
String content = slurp(is);
assertThat(content, is("Hello"));
}
@Test
public void shouldDownloadFileIfExpired() throws IOException, InterruptedException {
final File newFolder = temporaryFolder.newFolder();
final Path path = Paths.get(newFolder.getAbsolutePath(), "arquillian_crown_icon_glossy_256.png");
Files.write(path, "invalidchunk".getBytes("UTF-8"));
Thread.sleep(3000);
CacheUrlAsset cacheUrlAsset =
new CacheUrlAsset(new URL("http://arquillian.org/images/arquillian_crown_icon_glossy_256.png"), 2,
TimeUnit.SECONDS);
CacheUrlAsset.TEMP_LOCATION = newFolder.getAbsolutePath();
cacheUrlAsset.openStream();
File newFile = new File(newFolder, "arquillian_crown_icon_glossy_256.png");
assertThat(newFile.length(), is(Matchers.greaterThan(500L)));
}
}