You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2016/09/27 22:17:46 UTC

[2/2] lucene-solr:branch_6x: SOLR-9411: Better validation for Schema API add-field

SOLR-9411: Better validation for Schema API add-field


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/49c5a749
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/49c5a749
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/49c5a749

Branch: refs/heads/branch_6x
Commit: 49c5a749c3e95d33ca338331a270633503fe8ff7
Parents: 03b4ccf
Author: Steve Rowe <sa...@apache.org>
Authored: Tue Sep 27 18:16:55 2016 -0400
Committer: Steve Rowe <sa...@apache.org>
Committed: Tue Sep 27 18:17:21 2016 -0400

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  2 +-
 .../org/apache/solr/schema/SchemaManager.java   | 12 +----
 .../solr/rest/schema/TestBulkSchemaAPI.java     | 47 ++++++++++++++++++--
 3 files changed, 46 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/49c5a749/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index bd83635..2156ee9 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -98,7 +98,7 @@ Bug Fixes
 
 * SOLR-9330: Fix AlreadyClosedException on admin/mbeans?stats=true (Mikhail Khludnev)
 
-* SOLR-9411: Better validation for Schema REST API add-dynamic-field (janhoy)
+* SOLR-9411: Better validation for Schema API add-field and add-dynamic-field (janhoy, Steve Rowe)
 
 Optimizations
 ----------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/49c5a749/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
index 0a83db2..4b0ea54 100644
--- a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
+++ b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
@@ -226,13 +226,8 @@ public class SchemaManager {
         String type = op.getStr(TYPE);
         if (op.hasError())
           return false;
-        FieldType ft = mgr.managedIndexSchema.getFieldTypeByName(type);
-        if (ft == null) {
-          op.addError("No such field type '" + type + "'");
-          return false;
-        }
         try {
-          SchemaField field = SchemaField.create(name, ft, op.getValuesExcluding(NAME, TYPE));
+          SchemaField field = mgr.managedIndexSchema.newField(name, type, op.getValuesExcluding(NAME, TYPE));
           mgr.managedIndexSchema
               = mgr.managedIndexSchema.addFields(singletonList(field), Collections.emptyMap(), false);
           return true;
@@ -248,11 +243,6 @@ public class SchemaManager {
         String type = op.getStr(TYPE);
         if (op.hasError())
           return false;
-        FieldType ft = mgr.managedIndexSchema.getFieldTypeByName(type);
-        if (ft == null) {
-          op.addError("No such field type '" + type + "'");
-          return  false;
-        }
         try {
           SchemaField field = mgr.managedIndexSchema.newDynamicField(name, type, op.getValuesExcluding(NAME, TYPE));
           mgr.managedIndexSchema

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/49c5a749/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java b/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
index 8335bc0d..d5db82e 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
@@ -92,14 +92,13 @@ public class TestBulkSchemaAPI extends RestTestBase {
     String response = restTestHarness.post("/schema?wt=json", json(payload));
     Map map = (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
     List l = (List) map.get("errors");
-
+    assertNotNull("No errors", l);
     List errorList = (List) ((Map) l.get(0)).get("errorMessages");
     assertEquals(1, errorList.size());
-    assertTrue (((String)errorList.get(0)).contains("No such field type"));
+    assertTrue (((String)errorList.get(0)).contains("Field 'a1': Field type 'string1' not found.\n"));
     errorList = (List) ((Map) l.get(1)).get("errorMessages");
     assertEquals(1, errorList.size());
     assertTrue (((String)errorList.get(0)).contains("is a required field"));
-
   }
   
   public void testAnalyzerClass() throws Exception {
@@ -217,6 +216,48 @@ public class TestBulkSchemaAPI extends RestTestBase {
     assertNull(newFieldName + " illegal dynamic field should not have been added to schema", map);
   }
 
+  public void testAddIllegalFields() throws Exception {
+    RestTestHarness harness = restTestHarness;
+
+    // 1. Make sure you can't create a new field with an asterisk in its name
+    String newFieldName = "asterisk*";
+
+    String payload = "{\n" +
+        "    'add-field' : {\n" +
+        "         'name':'" + newFieldName + "',\n" +
+        "         'type':'string',\n" +
+        "         'stored':true,\n" +
+        "         'indexed':true\n" +
+        "     }\n" +
+        "}";
+
+    String response = harness.post("/schema?wt=json", json(payload));
+    Map map = (Map)ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
+    assertNotNull(response, map.get("errors"));
+
+    map = getObj(harness, newFieldName, "fields");
+    assertNull(newFieldName + " illegal dynamic field should not have been added to schema", map);
+
+    // 2. Make sure you get an error when you try to create a field that already exists
+    // Make sure 'wdf_nocase' field exists
+    newFieldName = "wdf_nocase";
+    Map m = getObj(harness, newFieldName, "fields");
+    assertNotNull("'" + newFieldName + "' field does not exist in the schema", m);
+
+    payload = "{\n" +
+        "    'add-field' : {\n" +
+        "         'name':'" + newFieldName + "',\n" +
+        "         'type':'string',\n" +
+        "         'stored':true,\n" +
+        "         'indexed':true\n" +
+        "     }\n" +
+        "}";
+
+    response = harness.post("/schema?wt=json", json(payload));
+    map = (Map)ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
+    assertNotNull(response, map.get("errors"));
+  }
+
   public void testAddFieldWithExistingCatchallDynamicField() throws Exception {
     RestTestHarness harness = restTestHarness;