You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dw...@apache.org on 2021/03/10 09:45:44 UTC
[lucene] 03/21: added tests
This is an automated email from the ASF dual-hosted git repository.
dweiss pushed a commit to branch jira/solr14155
in repository https://gitbox.apache.org/repos/asf/lucene.git
commit eacbc1c10c6c02d7f12e76a55cda0a3d17e9a3fe
Author: noble <no...@apache.org>
AuthorDate: Thu Dec 26 16:38:04 2019 +1100
added tests
---
.../apache/solr/schema/FieldTypePluginLoader.java | 6 +-
.../java/org/apache/solr/schema/IndexSchema.java | 20 ++--
.../test-files/runtimecode/schema-plugins.jar.bin | Bin 0 -> 6814 bytes
solr/core/src/test-files/runtimecode/sig.txt | 10 +-
.../src/test/org/apache/solr/pkg/TestPackages.java | 114 ++++++++++++++++++---
5 files changed, 121 insertions(+), 29 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
index b72b835..89c6ff2 100644
--- a/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
+++ b/solr/core/src/java/org/apache/solr/schema/FieldTypePluginLoader.java
@@ -36,7 +36,6 @@ import org.apache.solr.analysis.TokenizerChain;
import org.apache.solr.common.SolrException;
import org.apache.solr.core.PluginLoader;
import org.apache.solr.core.SolrConfig;
-import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.util.DOMUtil;
import org.apache.solr.util.plugin.AbstractPluginLoader;
import org.slf4j.Logger;
@@ -192,8 +191,7 @@ public final class FieldTypePluginLoader
//
private Analyzer readAnalyzer(Node node) throws XPathExpressionException {
- final SolrResourceLoader loader = schema.getResourceLoader();
- final PluginLoader pluginLoader = schema.getPluginLoader();
+ final PluginLoader loader = schema.getPluginLoader();
// parent node used to be passed in as "fieldtype"
// if (!fieldtype.hasChildNodes()) return null;
@@ -228,7 +226,7 @@ public final class FieldTypePluginLoader
try {
// No need to be core-aware as Analyzers are not in the core-aware list
- final Class<? extends Analyzer> clazz = pluginLoader.findClass(analyzerName, Analyzer.class);
+ final Class<? extends Analyzer> clazz = loader.findClass(analyzerName, Analyzer.class);
Analyzer analyzer = clazz.getConstructor().newInstance();
final String matchVersionStr = DOMUtil.getAttr(attrs, LUCENE_MATCH_VERSION_PARAM);
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index 407c4d1..24f7a64 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -39,6 +39,7 @@ import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.TreeSet;
+import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -218,18 +219,21 @@ public class IndexSchema implements Closeable {
@Override
public <T> T newInstance(String cname, Class<T> expectedType, String... subpackages) {
- return getIt(cname, expectedType, pkgloader -> pkgloader.newInstance(cname, expectedType, subpackages));
+ return getIt(cname, expectedType,
+ (pkgloader, name) -> {
+ return pkgloader.newInstance(name, expectedType, subpackages);
+ });
}
- private <T> T getIt(String cname, Class expectedType, Function<SolrResourceLoader, T> fun) {
+ private <T> T getIt(String cname, Class expectedType, BiFunction<SolrResourceLoader, String, T> fun) {
PluginInfo.ClassName className = new PluginInfo.ClassName(cname);
if (className.pkg == null) {
- return fun.apply(loader);
+ return fun.apply(loader, className.klas);
} else {
SolrResourceLoader pkgloader = core.getResourceLoader(className.pkg);
- T inst = fun.apply(pkgloader);
+ T inst = fun.apply(pkgloader,className.klas);
PackageListeners.Listener listener = new PackageListeners.Listener() {
- PluginInfo info = new PluginInfo(expectedType.getSimpleName(), singletonMap("class", cname));
+ PluginInfo info = new PluginInfo(expectedType.getSimpleName(), singletonMap("class", className.klas));
@Override
public String packageName() {
@@ -260,12 +264,12 @@ public class IndexSchema implements Closeable {
@Override
public <T> Class<? extends T> findClass(String cname, Class<T> expectedType) {
- return getIt(cname, expectedType, (Function<SolrResourceLoader, Class<? extends T>>) loader -> loader.findClass(cname, expectedType));
+ return getIt(cname, expectedType, (BiFunction<SolrResourceLoader, String ,Class<? extends T>>) (loader, name) -> loader.findClass(name, expectedType));
}
@Override
public <T> T newInstance(String cName, Class<T> expectedType, String[] subPackages, Class[] params, Object[] args) {
- return getIt(cName, expectedType, loader -> loader.newInstance(cName, expectedType, subPackages, params, args));
+ return getIt(cName, expectedType, (pkgloader, name) -> loader.newInstance(name, expectedType, subPackages, params, args));
}
@@ -579,7 +583,7 @@ public class IndexSchema implements Closeable {
final FieldTypePluginLoader typeLoader = new FieldTypePluginLoader(this, fieldTypes, schemaAware);
expression = getFieldTypeXPathExpressions();
NodeList nodes = (NodeList) xpath.evaluate(expression, document, XPathConstants.NODESET);
- typeLoader.load(loader, nodes);
+ typeLoader.load(pluginLoader, nodes);
// load the fields
Map<String,Boolean> explicitRequiredProp = loadFields(document, xpath);
diff --git a/solr/core/src/test-files/runtimecode/schema-plugins.jar.bin b/solr/core/src/test-files/runtimecode/schema-plugins.jar.bin
new file mode 100644
index 0000000..4effbba
Binary files /dev/null and b/solr/core/src/test-files/runtimecode/schema-plugins.jar.bin differ
diff --git a/solr/core/src/test-files/runtimecode/sig.txt b/solr/core/src/test-files/runtimecode/sig.txt
index 74bb942..b32204e 100644
--- a/solr/core/src/test-files/runtimecode/sig.txt
+++ b/solr/core/src/test-files/runtimecode/sig.txt
@@ -65,10 +65,14 @@ openssl dgst -sha1 -sign ../cryptokeys/priv_key512.pem testurp_v2.jar.bin | open
P/ptFXRvQMd4oKPvadSpd+A9ffwY3gcex5GVFVRy3df0/OF8XT5my8rQz7FZva+2ORbWxdXS8NKwNrbPVHLGXw==
-openssl dgst -sha1 -sign ../cryptokeys/priv_key512.pem expressible.jar.bin | openssl enc -base64 | openssl enc -base64 | tr -d \\n | sed
+openssl dgst -sha1 -sign ../cryptokeys/priv_key512.pem expressible.jar.bin | openssl enc -base64 | tr -d \\n | sed
ZOT11arAiPmPZYOHzqodiNnxO9pRyRozWZEBX8XGjU1/HJptFnZK+DI7eXnUtbNaMcbXE2Ze8hh4M/eGyhY8BQ==
+openssl dgst -sha1 -sign ../cryptokeys/priv_key512.pem schema-plugins.jar.bin | openssl enc -base64 | tr -d \\n | sed
+
+iSRhrogDyt9P1htmSf/krh1kx9oty3TYyWm4GKHQGlb8a+X4tKCe9kKk+3tGs+bU9zq5JBZ5txNXsn96aZem5A==
+
====================sha512====================
openssl dgst -sha512 runtimelibs.jar.bin
@@ -104,6 +108,10 @@ openssl dgst -sha512 expressible.jar.bin
3474a1414c8329c71ef5db2d3eb6e870363bdd7224a836aab561dccf5e8bcee4974ac799e72398c7e0b0c01972bab1c7454c8a4e791a8865bb676c0440627388
+openssl dgst -sha512 schema-plugins.jar.bin
+
+9299d8d5f8b358b66f113a0a91a0f55db09a41419872cb56e6e4ee402645487b75b17ec515f8035352e7fdcfac9e2e861f371d1e601869859384807b19abc2fb
+
=============sha256============================
openssl dgst -sha256 runtimelibs.jar.bin
diff --git a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
index d37fdf4..fe46ef1 100644
--- a/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
+++ b/solr/core/src/test/org/apache/solr/pkg/TestPackages.java
@@ -28,6 +28,7 @@ import org.apache.commons.codec.digest.DigestUtils;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.BaseHttpSolrClient;
@@ -39,6 +40,7 @@ import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.request.V2Request;
import org.apache.solr.client.solrj.request.beans.Package;
import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.SolrResponseBase;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.cloud.ConfigRequest;
import org.apache.solr.cloud.MiniSolrCloudCluster;
@@ -46,6 +48,7 @@ import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.MapWriterMap;
import org.apache.solr.common.NavigableObject;
import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
@@ -78,7 +81,101 @@ public class TestPackages extends SolrCloudTestCase {
public void teardown() {
System.clearProperty("enable.packages");
}
-
+
+
+ public void testSchemaPlugins() throws Exception {
+ String COLLECTION_NAME = "testSchemaLoadingColl";
+ System.setProperty("managed.schema.mutable", "true");
+
+
+ MiniSolrCloudCluster cluster =
+ configureCluster(4)
+ .withJettyConfig(jetty -> jetty.enableV2(true))
+ .addConfig("conf", configset("cloud-managed"))
+ .configure();
+ try {
+ String FILE1 = "/schemapkg/schema-plugins.jar";
+ byte[] derFile = readFile("cryptokeys/pub_key512.der");
+ cluster.getZkClient().makePath("/keys/exe", true);
+ cluster.getZkClient().create("/keys/exe/pub_key512.der", derFile, CreateMode.PERSISTENT, true);
+ postFileAndWait(cluster, "runtimecode/schema-plugins.jar.bin", FILE1,
+ "iSRhrogDyt9P1htmSf/krh1kx9oty3TYyWm4GKHQGlb8a+X4tKCe9kKk+3tGs+bU9zq5JBZ5txNXsn96aZem5A==");
+
+ Package.AddVersion add = new Package.AddVersion();
+ add.version = "1.0";
+ add.pkg = "schemapkg";
+ add.files = Arrays.asList(new String[]{FILE1});
+ V2Request req = new V2Request.Builder("/cluster/package")
+ .forceV2(true)
+ .withMethod(SolrRequest.METHOD.POST)
+ .withPayload(Collections.singletonMap("add", add))
+ .build();
+ req.process(cluster.getSolrClient());
+
+ TestDistribPackageStore.assertResponseValues(10,
+ () -> new V2Request.Builder("/cluster/package").
+ withMethod(SolrRequest.METHOD.GET)
+ .build().process(cluster.getSolrClient()),
+ Utils.makeMap(
+ ":result:packages:schemapkg[0]:version", "1.0",
+ ":result:packages:schemapkg[0]:files[0]", FILE1
+ ));
+
+ CollectionAdminRequest
+ .createCollection(COLLECTION_NAME, "conf", 2, 2)
+ .setMaxShardsPerNode(100)
+ .process(cluster.getSolrClient());
+ cluster.waitForActiveCollection(COLLECTION_NAME, 2, 4);
+
+ String addFieldTypeAnalyzerWithClass = "{\n" +
+ "'add-field-type' : {" +
+ " 'name' : 'myNewTextFieldWithAnalyzerClass',\n" +
+ " 'class':'schemapkg:my.pkg.MyTextField',\n" +
+ " 'analyzer' : {\n" +
+ " 'luceneMatchVersion':'5.0.0'" ;
+// + ",\n" +
+// " 'class':'schemapkg:my.pkg.MyWhitespaceAnalyzer'\n";
+ String charFilters =
+ " 'charFilters' : [{\n" +
+ " 'class':'schemapkg:my.pkg.MyPatternReplaceCharFilterFactory',\n" +
+ " 'replacement':'$1$1',\n" +
+ " 'pattern':'([a-zA-Z])\\\\\\\\1+'\n" +
+ " }],\n";
+ String tokenizer =
+ " 'tokenizer' : { 'class':'schemapkg:my.pkg.MyWhitespaceTokenizerFactory' },\n";
+ String filters =
+ " 'filters' : [{ 'class':'solr.ASCIIFoldingFilterFactory' }]\n";
+ String suffix = " }\n" +
+ "}}";
+ cluster.getSolrClient().request(new SolrRequest(SolrRequest.METHOD.POST, "/schema") {
+
+ @Override
+ public RequestWriter.ContentWriter getContentWriter(String expectedType) {
+ return new RequestWriter.StringPayloadContentWriter(addFieldTypeAnalyzerWithClass + ',' + charFilters + tokenizer + filters + suffix, CommonParams.JSON_MIME);
+ }
+
+ @Override
+ public SolrParams getParams() {
+ return null;
+ }
+
+ @Override
+ public String getCollection() {
+ return COLLECTION_NAME;
+ }
+
+ @Override
+ public SolrResponse createResponse(SolrClient client) {
+ return new SolrResponseBase();
+ }
+ });
+
+
+ } finally {
+ cluster.shutdown();
+ }
+
+ }
@Test
public void testPluginLoading() throws Exception {
MiniSolrCloudCluster cluster =
@@ -387,21 +484,6 @@ public class TestPackages extends SolrCloudTestCase {
}
}
- /* new V2Request.Builder("/c/"+COLLECTIONORALIAS+"/config").withMethod(SolrRequest.METHOD.POST)
- .withPayload("{add-expressible: {name: mincopy , class: org.apache.solr.client.solrj.io.stream.metrics.MinCopyMetric}}")
- .build().process(cluster.getSolrClient());
-
- ModifiableSolrParams _params = new ModifiableSolrParams();
- QueryRequest query = new QueryRequest(new MapSolrParams("action","plugins", "collection", COLLECTIONORALIAS, "wt", "javabin"));
- query.setPath("/stream");
- NamedList<Object> rsp = cluster.getSolrClient().request(query);
- assertEquals("org.apache.solr.client.solrj.io.stream.metrics.MinCopyMetric", rsp._getStr("/plugins/mincopy", null));
- _params = new ModifiableSolrParams();
- query = new QueryRequest(new MapSolrParams("componentName","mincopy", "meta" ,"true", "collection", COLLECTIONORALIAS, "wt", "javabin"));
- query.setPath("/config/expressible");
- rsp = cluster.getSolrClient().request(query);
-
- System.out.println();*/
private void executeReq(String uri, JettySolrRunner jetty, Utils.InputStreamConsumer parser, Map expected) throws Exception {
try(HttpSolrClient client = (HttpSolrClient) jetty.newClient()){