blob: dfe58753591b52befe961c6c2be397ec659d786e [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.camel.component.ipfs;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import io.nessus.utils.StreamUtils;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test;
public class SimpleIPFSTest {
@Test
public void ipfsVersion() throws Exception {
CamelContext camelctx = new DefaultCamelContext();
camelctx.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:startA").to("ipfs:version");
from("direct:startB").to("ipfs:127.0.0.1/version");
from("direct:startC").to("ipfs:127.0.0.1:5001/version");
}
});
camelctx.start();
assumeIPFSAvailable(camelctx);
try {
ProducerTemplate producer = camelctx.createProducerTemplate();
String resA = producer.requestBody("direct:startA", null, String.class);
String resB = producer.requestBody("direct:startB", null, String.class);
String resC = producer.requestBody("direct:startC", null, String.class);
Arrays.asList(resA, resB, resC).forEach(res -> {
Assert.assertTrue("Expecting 0.4 in: " + resA, resA.startsWith("0.4"));
});
} finally {
camelctx.stop();
}
}
@Test
public void ipfsAddSingle() throws Exception {
String hash = "QmYgjSRbXFPdPYKqQSnUjmXLYLudVahEJQotMaAJKt6Lbd";
CamelContext camelctx = new DefaultCamelContext();
camelctx.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").to("ipfs:add");
}
});
camelctx.start();
assumeIPFSAvailable(camelctx);
try {
Path path = Paths.get("src/test/resources/html/index.html");
ProducerTemplate producer = camelctx.createProducerTemplate();
String res = producer.requestBody("direct:start", path, String.class);
Assert.assertEquals(hash, res);
} finally {
camelctx.stop();
}
}
@Test
@SuppressWarnings("unchecked")
public void ipfsAddRecursive() throws Exception {
String hash = "Qme6hd6tYXTFb7bb7L3JZ5U6ygktpAHKxbaeffYyQN85mW";
CamelContext camelctx = new DefaultCamelContext();
camelctx.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").to("ipfs:add");
}
});
camelctx.start();
assumeIPFSAvailable(camelctx);
try {
Path path = Paths.get("src/test/resources/html");
ProducerTemplate producer = camelctx.createProducerTemplate();
List<String> res = producer.requestBody("direct:start", path, List.class);
Assert.assertEquals(10, res.size());
Assert.assertEquals(hash, res.get(9));
} finally {
camelctx.stop();
}
}
@Test
public void ipfsCat() throws Exception {
String hash = "QmUD7uG5prAMHbcCfp4x1G1mMSpywcSMHTGpq62sbpDAg6";
CamelContext camelctx = new DefaultCamelContext();
camelctx.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").to("ipfs:cat");
}
});
camelctx.start();
assumeIPFSAvailable(camelctx);
try {
ProducerTemplate producer = camelctx.createProducerTemplate();
InputStream res = producer.requestBody("direct:start", hash, InputStream.class);
verifyFileContent(res);
} finally {
camelctx.stop();
}
}
@Test
public void ipfsGetSingle() throws Exception {
String hash = "QmUD7uG5prAMHbcCfp4x1G1mMSpywcSMHTGpq62sbpDAg6";
CamelContext camelctx = new DefaultCamelContext();
camelctx.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").to("ipfs:get?outdir=target");
}
});
camelctx.start();
assumeIPFSAvailable(camelctx);
try {
ProducerTemplate producer = camelctx.createProducerTemplate();
Path res = producer.requestBody("direct:start", hash, Path.class);
Assert.assertEquals(Paths.get("target", hash), res);
verifyFileContent(new FileInputStream(res.toFile()));
} finally {
camelctx.stop();
}
}
@Test
public void ipfsGetRecursive() throws Exception {
String hash = "Qme6hd6tYXTFb7bb7L3JZ5U6ygktpAHKxbaeffYyQN85mW";
CamelContext camelctx = new DefaultCamelContext();
camelctx.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").to("ipfs:get?outdir=target");
}
});
camelctx.start();
assumeIPFSAvailable(camelctx);
try {
ProducerTemplate producer = camelctx.createProducerTemplate();
Path res = producer.requestBody("direct:start", hash, Path.class);
Assert.assertEquals(Paths.get("target", hash), res);
Assert.assertTrue(res.toFile().isDirectory());
Assert.assertTrue(res.resolve("index.html").toFile().exists());
} finally {
camelctx.stop();
}
}
private void verifyFileContent(InputStream ins) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
StreamUtils.copyStream(ins, baos);
Assert.assertEquals("The quick brown fox jumps over the lazy dog.", new String(baos.toByteArray()));
}
private void assumeIPFSAvailable(CamelContext camelctx) throws Exception {
IPFSEndpoint ipfsEp = camelctx.getEndpoints().stream()
.filter(ep -> ep instanceof IPFSEndpoint)
.map(ep -> (IPFSEndpoint)ep)
.findFirst().get();
Assume.assumeTrue(ipfsEp.getIPFSClient().hasConnection());
}
}