You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by mb...@apache.org on 2017/10/20 20:48:01 UTC

svn commit: r1812790 - in /ofbiz/ofbiz-plugins/trunk: lucene/ lucene/src/main/java/org/apache/ofbiz/content/search/ solr/ solr/src/main/java/org/apache/ofbiz/solr/ solr/src/main/java/org/apache/ofbiz/solr/test/ solr/testdef/ solr/testdef/data/

Author: mbrohl
Date: Fri Oct 20 20:48:01 2017
New Revision: 1812790

URL: http://svn.apache.org/viewvc?rev=1812790&view=rev
Log:
Improved: Update Solr/Lucene to 7.1.0 [CVE-2017-9803] [CVE-2017-12629].
(OFBIZ-9835)

There were two security vulnerabilities and it was recommended to 
upgrade to 7.1.0 asap.

The update removed the deprecated setBoost functionality during index 
time. I have removed it completely to be able to update to 7.1.0. 
A new indexing and query strategy has to be implemented here. Might be 
follow-up work in the future.

Added:
    ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/
    ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/SolrTests.java   (with props)
    ofbiz/ofbiz-plugins/trunk/solr/testdef/
    ofbiz/ofbiz-plugins/trunk/solr/testdef/data/
    ofbiz/ofbiz-plugins/trunk/solr/testdef/data/SolrTestsData.xml   (with props)
    ofbiz/ofbiz-plugins/trunk/solr/testdef/solrtests.xml   (with props)
Modified:
    ofbiz/ofbiz-plugins/trunk/lucene/build.gradle
    ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/ProductDocument.java
    ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/SearchWorker.java
    ofbiz/ofbiz-plugins/trunk/solr/build.gradle
    ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/SolrUtil.java

Modified: ofbiz/ofbiz-plugins/trunk/lucene/build.gradle
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-plugins/trunk/lucene/build.gradle?rev=1812790&r1=1812789&r2=1812790&view=diff
==============================================================================
--- ofbiz/ofbiz-plugins/trunk/lucene/build.gradle (original)
+++ ofbiz/ofbiz-plugins/trunk/lucene/build.gradle Fri Oct 20 20:48:01 2017
@@ -17,7 +17,7 @@
  * under the License.
  */
 dependencies {
-    pluginLibsCompile 'org.apache.lucene:lucene-core:6.6.0'
-    pluginLibsCompile 'org.apache.lucene:lucene-queryparser:6.6.0'
-    pluginLibsCompile 'org.apache.lucene:lucene-analyzers-common:6.6.0'
+    pluginLibsCompile 'org.apache.lucene:lucene-core:7.1.0'
+    pluginLibsCompile 'org.apache.lucene:lucene-queryparser:7.1.0'
+    pluginLibsCompile 'org.apache.lucene:lucene-analyzers-common:7.1.0'
 }
\ No newline at end of file

Modified: ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/ProductDocument.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/ProductDocument.java?rev=1812790&r1=1812789&r2=1812790&view=diff
==============================================================================
--- ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/ProductDocument.java (original)
+++ ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/ProductDocument.java Fri Oct 20 20:48:01 2017
@@ -81,11 +81,11 @@ public class ProductDocument implements
 
                 // Product Fields
                 doc.add(new StringField("productId", productId, Field.Store.YES));
-                this.addTextFieldByWeight(doc, "productName", product.getString("productName"), "index.weight.Product.productName", 0, false, "fullText", delegator);
-                this.addTextFieldByWeight(doc, "internalName", product.getString("internalName"), "index.weight.Product.internalName", 0, false, "fullText", delegator);
-                this.addTextFieldByWeight(doc, "brandName", product.getString("brandName"), "index.weight.Product.brandName", 0, false, "fullText", delegator);
-                this.addTextFieldByWeight(doc, "description", product.getString("description"), "index.weight.Product.description", 0, false, "fullText", delegator);
-                this.addTextFieldByWeight(doc, "longDescription", product.getString("longDescription"), "index.weight.Product.longDescription", 0, false, "fullText", delegator);
+                this.addTextField(doc, "productName", product.getString("productName"), false, "fullText", delegator);
+                this.addTextField(doc, "internalName", product.getString("internalName"), false, "fullText", delegator);
+                this.addTextField(doc, "brandName", product.getString("brandName"), false, "fullText", delegator);
+                this.addTextField(doc, "description", product.getString("description"), false, "fullText", delegator);
+                this.addTextField(doc, "longDescription", product.getString("longDescription"), false, "fullText", delegator);
                 doc.add(new LongPoint("introductionDate", quantizeTimestampToDays(product.getTimestamp("introductionDate"))));
                 nextReIndex = this.checkSetNextReIndex(product.getTimestamp("introductionDate"), nextReIndex);
                 doc.add(new LongPoint("salesDiscontinuationDate", quantizeTimestampToDays(product.getTimestamp("salesDiscontinuationDate"))));
@@ -113,9 +113,9 @@ public class ProductDocument implements
                         doc.add(new StringField("productFeatureId", productFeatureAndAppl.getString("productFeatureId"), Field.Store.NO));
                         doc.add(new StringField("productFeatureCategoryId", productFeatureAndAppl.getString("productFeatureCategoryId"), Field.Store.NO));
                         doc.add(new StringField("productFeatureTypeId", productFeatureAndAppl.getString("productFeatureTypeId"), Field.Store.NO));
-                        this.addTextFieldByWeight(doc, "featureDescription", productFeatureAndAppl.getString("description"), "index.weight.ProductFeatureAndAppl.description", 0, false, "fullText", delegator);
-                        this.addTextFieldByWeight(doc, "featureAbbreviation", productFeatureAndAppl.getString("abbrev"), "index.weight.ProductFeatureAndAppl.abbrev", 0, false, "fullText", delegator);
-                        this.addTextFieldByWeight(doc, "featureCode", productFeatureAndAppl.getString("idCode"), "index.weight.ProductFeatureAndAppl.idCode", 0, false, "fullText", delegator);
+                        this.addTextField(doc, "featureDescription", productFeatureAndAppl.getString("description"), false, "fullText", delegator);
+                        this.addTextField(doc, "featureAbbreviation", productFeatureAndAppl.getString("abbrev"), false, "fullText", delegator);
+                        this.addTextField(doc, "featureCode", productFeatureAndAppl.getString("idCode"), false, "fullText", delegator);
                         // Get the ProductFeatureGroupIds
                         List<GenericValue> productFeatureGroupAppls = EntityQuery.use(delegator).from("ProductFeatureGroupAppl").where("productFeatureId", productFeatureAndAppl.get("productFeatureId")).queryList();
                         productFeatureGroupAppls = this.filterByThruDate(productFeatureGroupAppls);
@@ -140,8 +140,8 @@ public class ProductDocument implements
 
                     List<GenericValue> productAttributes = EntityQuery.use(delegator).from("ProductAttribute").where("productId", productId).queryList();
                     for (GenericValue productAttribute: productAttributes) {
-                        this.addTextFieldByWeight(doc, "attributeName", productAttribute.getString("attrName"), "index.weight.ProductAttribute.attrName", 0, false, "fullText", delegator);
-                        this.addTextFieldByWeight(doc, "attributeValue", productAttribute.getString("attrValue"), "index.weight.ProductAttribute.attrValue", 0, false, "fullText", delegator);
+                        this.addTextField(doc, "attributeName", productAttribute.getString("attrName"), false, "fullText", delegator);
+                        this.addTextField(doc, "attributeValue", productAttribute.getString("attrValue"), false, "fullText", delegator);
                     }
                 }
 
@@ -153,7 +153,7 @@ public class ProductDocument implements
                         String idValue = goodIdentification.getString("idValue");
                         doc.add(new StringField("goodIdentificationTypeId", goodIdentificationTypeId, Field.Store.NO));
                         doc.add(new StringField(goodIdentificationTypeId + "_GoodIdentification", idValue, Field.Store.NO));
-                        this.addTextFieldByWeight(doc, "identificationValue", idValue, "index.weight.GoodIdentification.idValue", 0, false, "fullText", delegator);
+                        this.addTextField(doc, "identificationValue", idValue, false, "fullText", delegator);
                     }
                 }
 
@@ -172,7 +172,7 @@ public class ProductDocument implements
                             } else if (thruDate != null) {
                                 nextReIndex = this.checkSetNextReIndex(thruDate, nextReIndex);
                             }
-                            this.addTextFieldByWeight(doc, "variantProductId", variantProductAssoc.getString("productIdTo"), "index.weight.Variant.Product.productId", 0, false, "fullText", delegator);
+                            this.addTextField(doc, "variantProductId", variantProductAssoc.getString("productIdTo"), false, "fullText", delegator);
                         }
                     }
                 }
@@ -203,7 +203,7 @@ public class ProductDocument implements
                         try {
                             Map<String, Object> drContext = UtilMisc.<String, Object>toMap("product", product);
                             String contentText = DataResourceWorker.renderDataResourceAsText(null, delegator, productContentAndInfo.getString("dataResourceId"), drContext, null, null, false);
-                            this.addTextFieldByWeight(doc, "content", contentText, null, weight, false, "fullText", delegator);
+                            this.addTextField(doc, "content", contentText, false, "fullText", delegator);
                         } catch (IOException e1) {
                             Debug.logError(e1, "Error getting content text to index", module);
                         } catch (GeneralException e1) {
@@ -279,26 +279,10 @@ public class ProductDocument implements
     }
 
     // An attempt to boost/weight values in a similar manner to what OFBiz product search does.
-    private void addTextFieldByWeight(Document doc, String fieldName, String value, String property, int defaultWeight, boolean store, String fullTextFieldName, Delegator delegator) {
+    private void addTextField(Document doc, String fieldName, String value, boolean store, String fullTextFieldName, Delegator delegator) {
         if (fieldName == null) return;
 
-        float weight = 0;
-        if (property != null) {
-            try {
-                weight = EntityUtilProperties.getPropertyAsFloat("prodsearch", property, 0).floatValue();
-            } catch (Exception e) {
-                Debug.logWarning("Could not parse weight number: " + e.toString(), module);
-            }
-        } else if (defaultWeight > 0) {
-            weight = defaultWeight;
-        }
-        if (weight == 0 && !store) {
-            return;
-        }
         Field field = new TextField(fieldName, checkValue(value), (store? Field.Store.YES: Field.Store.NO));
-        if (weight > 0 && weight != 1) {
-            field.setBoost(weight);
-        }
         doc.add(field);
         if (fullTextFieldName != null) {
             doc.add(new TextField(fullTextFieldName, checkValue(value), Field.Store.NO));

Modified: ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/SearchWorker.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/SearchWorker.java?rev=1812790&r1=1812789&r2=1812790&view=diff
==============================================================================
--- ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/SearchWorker.java (original)
+++ ofbiz/ofbiz-plugins/trunk/lucene/src/main/java/org/apache/ofbiz/content/search/SearchWorker.java Fri Oct 20 20:48:01 2017
@@ -41,7 +41,7 @@ public final class SearchWorker {
 
     public static final String module = SearchWorker.class.getName();
 
-    private static final Version LUCENE_VERSION = Version.LUCENE_6_6_0;
+    private static final Version LUCENE_VERSION = Version.LUCENE_7_1_0;
 
     private SearchWorker() {}
 

Modified: ofbiz/ofbiz-plugins/trunk/solr/build.gradle
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-plugins/trunk/solr/build.gradle?rev=1812790&r1=1812789&r2=1812790&view=diff
==============================================================================
--- ofbiz/ofbiz-plugins/trunk/solr/build.gradle (original)
+++ ofbiz/ofbiz-plugins/trunk/solr/build.gradle Fri Oct 20 20:48:01 2017
@@ -17,7 +17,7 @@
  * under the License.
  */
 dependencies {
-    pluginLibsCompile 'org.apache.solr:solr-core:6.6.0'
+    pluginLibsCompile 'org.apache.solr:solr-core:7.1.0'
     pluginLibsCompile 'com.google.guava:guava:20.0'
 }
 

Modified: ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/SolrUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/SolrUtil.java?rev=1812790&r1=1812789&r2=1812790&view=diff
==============================================================================
--- ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/SolrUtil.java (original)
+++ ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/SolrUtil.java Fri Oct 20 20:48:01 2017
@@ -330,7 +330,7 @@ public final class SolrUtil {
         httpLogin.setConfig(requestConfig);
         CloseableHttpResponse loginResponse = httpClient.execute(httpLogin, httpContext);
         loginResponse.close();
-        return new HttpSolrClient(solrUrl + "/" + solrIndexName, httpClient);
+        return new HttpSolrClient.Builder(solrUrl + "/" + solrIndexName).withHttpClient(httpClient).build();
     }
 
 }

Added: ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/SolrTests.java
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/SolrTests.java?rev=1812790&view=auto
==============================================================================
--- ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/SolrTests.java (added)
+++ ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/SolrTests.java Fri Oct 20 20:48:01 2017
@@ -0,0 +1,141 @@
+
+/*
+ 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.ofbiz.solr.test;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.jasper.tagplugins.jstl.core.Remove;
+import org.apache.ofbiz.base.util.UtilMisc;
+import org.apache.ofbiz.entity.Delegator;
+import org.apache.ofbiz.entity.GenericValue;
+import org.apache.ofbiz.entity.util.EntityQuery;
+import org.apache.ofbiz.service.ServiceUtil;
+import org.apache.ofbiz.service.testtools.OFBizTestCase;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
+import org.apache.solr.client.solrj.response.QueryResponse;
+
+public class SolrTests extends OFBizTestCase {
+
+    protected GenericValue userLogin = null;
+    private Map<String, Object> context;
+    private Map<String, Object> emptyContext = new HashMap<String, Object>();
+    private Map<String, Object> response;
+    private String validTestProductId = "GZ-1006";
+    private String validTestProductId_2 = "GZ-1005";
+    private String invalidTestProductId = validTestProductId + validTestProductId;
+
+    public SolrTests(String name) {
+        super(name);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        userLogin = EntityQuery.use(delegator).from("UserLogin").where("userLoginId", "system").queryOne();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+    }
+
+    public void testAddProductToIndex() throws Exception {
+
+        GenericValue product = delegator.findOne("Product", UtilMisc.toMap("productId", validTestProductId), false);
+
+        Map<String, Object> ctx = new HashMap<String, Object>();
+        ctx.put("instance", product);
+
+        Map<String, Object> resp = dispatcher.runSync("addToSolr", ctx);
+        assertTrue("Could not init search index", ServiceUtil.isSuccess(resp));
+
+        Map<String, Object> sctx = new HashMap<String, Object>();
+        sctx.put("productCategoryId", "102");
+
+        Map<String, Object> sresp = dispatcher.runSync("solrProductsSearch", sctx);
+        assertTrue("Could not query search index", ServiceUtil.isSuccess(sresp));
+
+
+    }
+
+    public void testAddToSolrIndex() throws Exception{
+        context = new HashMap<>();
+        context.put("productId", validTestProductId);
+        response = dispatcher.runSync("addToSolrIndex", context);
+        assertTrue("Could not add Product to Index", ServiceUtil.isSuccess(
+                response));
+    }
+
+    public void testAddToSolrIndex_invalidProduct() throws Exception {
+        context = new HashMap<>();
+        context.put("productId", invalidTestProductId);
+        response = dispatcher.runSync("addToSolrIndex", context);
+        assertTrue("Could not test the addition of an invalid product to the Solr index", ServiceUtil.isSuccess(
+                response));
+    }
+
+    public void testAddListToSolrIndex() throws Exception {
+        List<Map<String, Object>> products = new ArrayList<>();
+        Map<String, Object> product_1 = new HashMap<>();
+        Map<String, Object> product_2 = new HashMap<>();
+        GenericValue validTestProduct = delegator.findOne("Product", UtilMisc.toMap("productId", validTestProductId), false);
+        GenericValue validTestProduct_2 = delegator.findOne("Product", UtilMisc.toMap("productId", validTestProductId_2), false);
+
+        product_1.put("productId", validTestProduct);
+        product_2.put("productId", validTestProduct_2);
+
+        products.add(product_1);
+        products.add(product_2);
+        context  = new HashMap<>();
+        context.put("fieldList", products);
+
+        response = dispatcher.runSync("addListToSolrIndex", context);
+        assertTrue("Could not add products to index", ServiceUtil.isSuccess(response));
+
+    }
+
+    public void testAddListToSolrIndex_invalidProducts() throws Exception {
+        List<Map<String, Object>> products = new ArrayList<>();
+        Map<String, Object> product_1 = new HashMap<>();
+        Map<String, Object> product_2 = new HashMap<>();
+        GenericValue testProduct = delegator.findOne("Product", UtilMisc.toMap("productId", validTestProductId), false);
+        GenericValue testProduct_2 = delegator.findOne("Product", UtilMisc.toMap("productId", validTestProductId_2), false);
+
+        testProduct.replace("productId", invalidTestProductId);
+        testProduct.replace("productId", invalidTestProductId);
+
+        product_1.put("productId", testProduct);
+        product_2.put("productId", testProduct_2);
+
+        products.add(product_1);
+        products.add(product_2);
+        context  = new HashMap<>();
+        context.put("fieldList", products);
+
+        response = dispatcher.runSync("addListToSolrIndex", context);
+        assertTrue("Could not test adding invalid products to index", ServiceUtil.isSuccess(response));
+
+    }
+}
+

Propchange: ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/SolrTests.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/SolrTests.java
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/ofbiz-plugins/trunk/solr/src/main/java/org/apache/ofbiz/solr/test/SolrTests.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/ofbiz-plugins/trunk/solr/testdef/data/SolrTestsData.xml
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-plugins/trunk/solr/testdef/data/SolrTestsData.xml?rev=1812790&view=auto
==============================================================================
--- ofbiz/ofbiz-plugins/trunk/solr/testdef/data/SolrTestsData.xml (added)
+++ ofbiz/ofbiz-plugins/trunk/solr/testdef/data/SolrTestsData.xml Fri Oct 20 20:48:01 2017
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+
+<entity-engine-xml>
+
+
+</entity-engine-xml>
\ No newline at end of file

Propchange: ofbiz/ofbiz-plugins/trunk/solr/testdef/data/SolrTestsData.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/ofbiz-plugins/trunk/solr/testdef/data/SolrTestsData.xml
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/ofbiz-plugins/trunk/solr/testdef/data/SolrTestsData.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: ofbiz/ofbiz-plugins/trunk/solr/testdef/solrtests.xml
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-plugins/trunk/solr/testdef/solrtests.xml?rev=1812790&view=auto
==============================================================================
--- ofbiz/ofbiz-plugins/trunk/solr/testdef/solrtests.xml (added)
+++ ofbiz/ofbiz-plugins/trunk/solr/testdef/solrtests.xml Fri Oct 20 20:48:01 2017
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+
+<test-suite suite-name="solrtests"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/test-suite.xsd">
+
+    <test-case case-name="solr-tests-data-load">
+        <entity-xml action="load" entity-xml-url="component://solr/testdef/data/SolrTestsData.xml"/>
+    </test-case>
+
+    <test-case case-name="solr-tests"><junit-test-suite class-name="org.apache.ofbiz.solr.test.SolrTests"/></test-case>
+
+</test-suite>
\ No newline at end of file

Propchange: ofbiz/ofbiz-plugins/trunk/solr/testdef/solrtests.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ofbiz/ofbiz-plugins/trunk/solr/testdef/solrtests.xml
------------------------------------------------------------------------------
    svn:keywords = Date Rev Author URL Id

Propchange: ofbiz/ofbiz-plugins/trunk/solr/testdef/solrtests.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml