blob: 1dfe51f39aa707d454d8d422c85af92bda773029 [file] [log] [blame]
package org.apache.solr.pkg;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.lang.invoke.MethodHandles;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
import org.apache.solr.cloud.MiniSolrCloudCluster;
import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.util.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.solr.pkg.PackageLoader.ENABLED_LOCAL_PKGS_PROP;
import static org.apache.solr.pkg.PackageLoader.LOCAL_PKGS_DIR_PROP;
public class TestLocalPackages extends SolrCloudTestCase {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
public void testLocalPackagesAsDir() throws Exception {
String PKG_NAME = "mypkg";
String jarName = "mypkg1.jar";
String COLLECTION_NAME = "testLocalPkgsColl";
String localPackagesDir = "testpkgdir";
System.setProperty(ENABLED_LOCAL_PKGS_PROP, PKG_NAME);
System.setProperty(LOCAL_PKGS_DIR_PROP, localPackagesDir);
MiniSolrCloudCluster cluster =
configureCluster(4)
.withJettyConfig(builder -> builder.enableV2(true))
.withJettyConfig(it -> it.withPreStartupHook(jsr -> {
try {
File pkgDir = new File(jsr.getSolrHome() + File.separator + localPackagesDir);
if (!pkgDir.exists()) {
pkgDir.mkdir();
}
File subDir = new File(pkgDir, PKG_NAME);
if (!subDir.exists()) {
subDir.mkdir();
}
try (FileInputStream fis = new FileInputStream(getFile("runtimecode/runtimelibs.jar.bin"))) {
byte[] buf = new byte[fis.available()];
fis.read(buf);
try (FileOutputStream fos = new FileOutputStream(new File(subDir, jarName))) {
fos.write(buf, 0, buf.length);
}
}
} catch (Exception e) {
throw new RuntimeException("Unable to create files", e);
}
}))
.addConfig("conf", configset("conf2"))
.configure();
System.clearProperty(ENABLED_LOCAL_PKGS_PROP);
System.clearProperty(LOCAL_PKGS_DIR_PROP);
try {
for (JettySolrRunner jsr : cluster.getJettySolrRunners()) {
List<String> packageFiles = Arrays.asList(new File(jsr.getSolrHome() + File.separator + localPackagesDir + File.separator + PKG_NAME).list());
assertTrue(packageFiles.contains(jarName));
}
CollectionAdminRequest
.createCollection(COLLECTION_NAME, "conf", 2, 2)
.process(cluster.getSolrClient());
cluster.waitForActiveCollection(COLLECTION_NAME, 2, 4);
log.info("Collection created successfully");
TestPackages.verifyComponent(cluster.getSolrClient(), COLLECTION_NAME, "query", "filterCache", PKG_NAME, "0");
} finally {
cluster.shutdown();
}
}
public void testLocalPackages() throws Exception {
String PKG_NAME = "mypkg";
String jarName = "mypkg1.jar";
String COLLECTION_NAME = "testLocalPkgsColl";
String localPackagesDir = "local_packages";
PackageAPI.Packages p = new PackageAPI.Packages();
PackageAPI.PkgVersion pkgVersion = new PackageAPI.PkgVersion();
pkgVersion.files = Collections.singletonList(jarName);
pkgVersion.version = "0.1";
pkgVersion.pkg = PKG_NAME;
p.packages.put(PKG_NAME, Collections.singletonList(pkgVersion));
log.info("local_packages.json: {}" , Utils.toJSONString(p));
log.info("Local packages dir: {}" , localPackagesDir);
System.setProperty(ENABLED_LOCAL_PKGS_PROP, PKG_NAME);
System.setProperty(LOCAL_PKGS_DIR_PROP, localPackagesDir);
MiniSolrCloudCluster cluster =
configureCluster(4)
.withJettyConfig(builder -> builder.enableV2(true))
.withJettyConfig(it -> it.withPreStartupHook(jsr -> {
try {
File pkgDir = new File(jsr.getSolrHome() + File.separator + localPackagesDir);
if (!pkgDir.exists()) {
pkgDir.mkdir();
}
try (FileInputStream fis = new FileInputStream(getFile("runtimecode/runtimelibs.jar.bin"))) {
byte[] buf = new byte[fis.available()];
fis.read(buf);
try (FileOutputStream fos = new FileOutputStream(new File(pkgDir, jarName))) {
fos.write(buf, 0, buf.length);
}
}
try( FileOutputStream fos = new FileOutputStream( new File(pkgDir, PackageLoader.LOCAL_PACKAGES_JSON) )) {
fos.write(Utils.toJSON(p));
}
} catch (Exception e) {
throw new RuntimeException("Unable to create files", e);
}
}))
.addConfig("conf", configset("conf2"))
.configure();
System.clearProperty(ENABLED_LOCAL_PKGS_PROP);
System.clearProperty(LOCAL_PKGS_DIR_PROP);
try {
for (JettySolrRunner jsr : cluster.getJettySolrRunners()) {
List<String> packageFiles = Arrays.asList(new File(jsr.getSolrHome() + File.separator + localPackagesDir).list());
assertTrue(packageFiles.contains(PackageLoader.LOCAL_PACKAGES_JSON));
assertTrue(packageFiles.contains(jarName));
}
CollectionAdminRequest
.createCollection(COLLECTION_NAME, "conf", 2, 2)
.process(cluster.getSolrClient());
cluster.waitForActiveCollection(COLLECTION_NAME, 2, 4);
log.info("Collection created successfully");
TestPackages.verifyComponent(cluster.getSolrClient(), COLLECTION_NAME, "query", "filterCache", PKG_NAME, pkgVersion.version);
} finally {
cluster.shutdown();
}
}
}