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

[03/50] [abbrv] lucene-solr git commit: SOLR-8736: schema GET operations on fields, dynamicFields, fieldTypes, copyField are reimplemented as a part of the bulk API with less details. The tests and write implementations are removed

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
----------------------------------------------------------------------
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 acc8c13..4319c3e 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 org.apache.lucene.uninverting.UninvertingReader;
 import org.apache.lucene.util.Version;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
@@ -1352,6 +1353,10 @@ public class IndexSchema {
    * Get a map of property name -> value for the whole schema.
    */
   public SimpleOrderedMap<Object> getNamedPropertyValues() {
+    return getNamedPropertyValues(new MapSolrParams(Collections.EMPTY_MAP));
+
+  }
+  public SimpleOrderedMap<Object> getNamedPropertyValues(SolrParams params) {
     SimpleOrderedMap<Object> topLevel = new SimpleOrderedMap<>();
     topLevel.add(NAME, getSchemaName());
     topLevel.add(VERSION, getVersion());
@@ -1372,19 +1377,19 @@ public class IndexSchema {
     List<SimpleOrderedMap<Object>> fieldTypeProperties = new ArrayList<>();
     SortedMap<String,FieldType> sortedFieldTypes = new TreeMap<>(fieldTypes);
     for (FieldType fieldType : sortedFieldTypes.values()) {
-      fieldTypeProperties.add(fieldType.getNamedPropertyValues(false));
+      fieldTypeProperties.add(fieldType.getNamedPropertyValues(params.getBool("showDefaults", false)));
     }
     topLevel.add(FIELD_TYPES, fieldTypeProperties);  
     List<SimpleOrderedMap<Object>> fieldProperties = new ArrayList<>();
     SortedSet<String> fieldNames = new TreeSet<>(fields.keySet());
     for (String fieldName : fieldNames) {
-      fieldProperties.add(fields.get(fieldName).getNamedPropertyValues(false));
+      fieldProperties.add(fields.get(fieldName).getNamedPropertyValues(params.getBool("showDefaults", false)));
     }
     topLevel.add(FIELDS, fieldProperties);
     List<SimpleOrderedMap<Object>> dynamicFieldProperties = new ArrayList<>();
     for (IndexSchema.DynamicField dynamicField : dynamicFields) {
       if ( ! dynamicField.getRegex().startsWith(INTERNAL_POLY_FIELD_PREFIX)) { // omit internal polyfields
-        dynamicFieldProperties.add(dynamicField.getPrototype().getNamedPropertyValues(false));
+        dynamicFieldProperties.add(dynamicField.getPrototype().getNamedPropertyValues(params.getBool("showDefaults", false)));
       }
     }
     topLevel.add(DYNAMIC_FIELDS, dynamicFieldProperties);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
index d87eb69..f291b2f 100644
--- a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
+++ b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
@@ -35,10 +35,12 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
 
+import com.google.common.collect.ImmutableSet;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.Header;
@@ -84,6 +86,7 @@ import org.apache.solr.request.SolrRequestInfo;
 import org.apache.solr.response.QueryResponseWriter;
 import org.apache.solr.response.QueryResponseWriterUtil;
 import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.security.AuthenticationPlugin;
 import org.apache.solr.security.AuthorizationContext;
 import org.apache.solr.security.AuthorizationContext.CollectionRequest;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java b/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java
index ddbd331..52ba10b 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java
@@ -18,13 +18,14 @@ package org.apache.solr.rest.schema;
 import org.apache.solr.util.RestTestBase;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.restlet.ext.servlet.ServerServlet;
 
 import java.util.SortedMap;
 import java.util.TreeMap;
 
-
+@Ignore
 public class TestClassNameShortening extends RestTestBase {
 
   @BeforeClass

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestCopyFieldCollectionResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestCopyFieldCollectionResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestCopyFieldCollectionResource.java
index 5eeee8c..c0f936d 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestCopyFieldCollectionResource.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestCopyFieldCollectionResource.java
@@ -30,73 +30,51 @@ public class TestCopyFieldCollectionResource extends SolrRestletTestBase {
            +"                                      and int[@name='maxChars'][.='200']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='title']"
-           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']"
-           +"                                      and str[@name='destDynamicBase'][.='*_s']]",
+           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']]",
 
-            "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_i']"
+        "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_i']"
            +"                                      and str[@name='dest'][.='title']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_i']"
            +"                                      and str[@name='dest'][.='*_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_i']"
-           +"                                      and str[@name='dest'][.='*_dest_sub_s']"
-           +"                                      and str[@name='destDynamicBase'][.='*_s']]",
+           +"                                      and str[@name='dest'][.='*_dest_sub_s']]",
 
-            "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_i']"
-           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']"
-           +"                                      and str[@name='destDynamicBase'][.='*_s']]",
+        "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_i']"
+           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_src_sub_i']"
-           +"                                      and str[@name='sourceDynamicBase'][.='*_i']"
            +"                                      and str[@name='dest'][.='title']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_src_sub_i']"
-           +"                                      and str[@name='sourceDynamicBase'][.='*_i']"
            +"                                      and str[@name='dest'][.='*_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_src_sub_i']"
-           +"                                      and str[@name='sourceDynamicBase'][.='*_i']"
-           +"                                      and str[@name='dest'][.='*_dest_sub_s']"
-           +"                                      and str[@name='destDynamicBase'][.='*_s']]",
+           +"                                      and str[@name='dest'][.='*_dest_sub_s']]",
 
-            "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_src_sub_i']"
-           +"                                      and str[@name='sourceDynamicBase'][.='*_i']"
-           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']"
-           +"                                      and str[@name='destDynamicBase'][.='*_s']]",
+        "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_src_sub_i']"
+           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='src_sub_no_ast_i']"
-           +"                                      and str[@name='sourceDynamicBase'][.='*_i']"
            +"                                      and str[@name='dest'][.='*_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='src_sub_no_ast_i']"
-           +"                                      and str[@name='sourceDynamicBase'][.='*_i']"
-           +"                                      and str[@name='dest'][.='*_dest_sub_s']"
-           +"                                      and str[@name='destDynamicBase'][.='*_s']]",
+           +"                                      and str[@name='dest'][.='*_dest_sub_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='src_sub_no_ast_i']"
-           +"                                      and str[@name='sourceDynamicBase'][.='*_i']"
-           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']"
-           +"                                      and str[@name='destDynamicBase'][.='*_s']]",
+           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='title_*']"
-           +"                                      and arr[@name='sourceExplicitFields']/str[.='title_stemmed']"
-           +"                                      and arr[@name='sourceExplicitFields']/str[.='title_lettertok']"
            +"                                      and str[@name='dest'][.='text']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='title_*']"
-           +"                                      and arr[@name='sourceExplicitFields']/str[.='title_stemmed']"
-           +"                                      and arr[@name='sourceExplicitFields']/str[.='title_lettertok']"
            +"                                      and str[@name='dest'][.='*_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='title_*']"
-           +"                                      and arr[@name='sourceExplicitFields']/str[.='title_stemmed']"
-           +"                                      and arr[@name='sourceExplicitFields']/str[.='title_lettertok']"
            +"                                      and str[@name='dest'][.='*_dest_sub_s']]",
 
             "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='title_*']"
-           +"                                      and arr[@name='sourceExplicitFields']/str[.='title_stemmed']"
-           +"                                      and arr[@name='sourceExplicitFields']/str[.='title_lettertok']"
            +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']]");
   }
 
@@ -104,56 +82,22 @@ public class TestCopyFieldCollectionResource extends SolrRestletTestBase {
   public void testJsonGetAllCopyFields() throws Exception {
     assertJQ("/schema/copyfields?indent=on&wt=json",
              "/copyFields/[1]=={'source':'src_sub_no_ast_i','dest':'title'}",
-             "/copyFields/[7]=={'source':'title','dest':'dest_sub_no_ast_s','destDynamicBase':'*_s'}",
+             "/copyFields/[7]=={'source':'title','dest':'dest_sub_no_ast_s'}",
 
              "/copyFields/[8]=={'source':'*_i','dest':'title'}",
              "/copyFields/[9]=={'source':'*_i','dest':'*_s'}",
-             "/copyFields/[10]=={'source':'*_i','dest':'*_dest_sub_s','destDynamicBase':'*_s'}",
-             "/copyFields/[11]=={'source':'*_i','dest':'dest_sub_no_ast_s','destDynamicBase':'*_s'}",
+             "/copyFields/[10]=={'source':'*_i','dest':'*_dest_sub_s'}",
+             "/copyFields/[11]=={'source':'*_i','dest':'dest_sub_no_ast_s'}",
 
-             "/copyFields/[12]=={'source':'*_src_sub_i','sourceDynamicBase':'*_i','dest':'title'}",
-             "/copyFields/[13]=={'source':'*_src_sub_i','sourceDynamicBase':'*_i','dest':'*_s'}",
-             "/copyFields/[14]=={'source':'*_src_sub_i','sourceDynamicBase':'*_i','dest':'*_dest_sub_s','destDynamicBase':'*_s'}",
-             "/copyFields/[15]=={'source':'*_src_sub_i','sourceDynamicBase':'*_i','dest':'dest_sub_no_ast_s','destDynamicBase':'*_s'}",
+             "/copyFields/[12]=={'source':'*_src_sub_i','dest':'title'}",
+             "/copyFields/[13]=={'source':'*_src_sub_i','dest':'*_s'}",
+             "/copyFields/[14]=={'source':'*_src_sub_i','dest':'*_dest_sub_s'}",
+             "/copyFields/[15]=={'source':'*_src_sub_i','dest':'dest_sub_no_ast_s'}",
 
-             "/copyFields/[16]=={'source':'src_sub_no_ast_i','sourceDynamicBase':'*_i','dest':'*_s'}",
-             "/copyFields/[17]=={'source':'src_sub_no_ast_i','sourceDynamicBase':'*_i','dest':'*_dest_sub_s','destDynamicBase':'*_s'}",
-             "/copyFields/[18]=={'source':'src_sub_no_ast_i','sourceDynamicBase':'*_i','dest':'dest_sub_no_ast_s','destDynamicBase':'*_s'}");
+             "/copyFields/[16]=={'source':'src_sub_no_ast_i','dest':'*_s'}",
+             "/copyFields/[17]=={'source':'src_sub_no_ast_i','dest':'*_dest_sub_s'}",
+             "/copyFields/[18]=={'source':'src_sub_no_ast_i','dest':'dest_sub_no_ast_s'}");
 
   }
 
-  @Test
-  public void testRestrictSource() throws Exception {
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=title,*_i,*_src_sub_i,src_sub_no_ast_i",
-            "count(/response/arr[@name='copyFields']/lst) = 16", // 4 + 4 + 4 + 4
-            "count(/response/arr[@name='copyFields']/lst/str[@name='source'][.='title']) = 4",
-            "count(/response/arr[@name='copyFields']/lst/str[@name='source'][.='*_i']) = 4",
-            "count(/response/arr[@name='copyFields']/lst/str[@name='source'][.='*_src_sub_i']) = 4",
-            "count(/response/arr[@name='copyFields']/lst/str[@name='source'][.='src_sub_no_ast_i']) = 4");
-  }
-
-  @Test
-  public void testRestrictDest() throws Exception {
-    assertQ("/schema/copyfields/?indent=on&wt=xml&dest.fl=title,*_s,*_dest_sub_s,dest_sub_no_ast_s",
-            "count(/response/arr[@name='copyFields']/lst) = 16", // 3 + 4 + 4 + 5
-            "count(/response/arr[@name='copyFields']/lst/str[@name='dest'][.='title']) = 3",
-            "count(/response/arr[@name='copyFields']/lst/str[@name='dest'][.='*_s']) = 4",
-            "count(/response/arr[@name='copyFields']/lst/str[@name='dest'][.='*_dest_sub_s']) = 4",
-            "count(/response/arr[@name='copyFields']/lst/str[@name='dest'][.='dest_sub_no_ast_s']) = 5");
-  }
-
-  @Test
-  public void testRestrictSourceAndDest() throws Exception {
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=title,*_i&dest.fl=title,dest_sub_no_ast_s",
-            "count(/response/arr[@name='copyFields']/lst) = 3",
-
-            "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='title']"
-           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']]",
-
-            "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_i']"
-           +"                                      and str[@name='dest'][.='title']]",
-
-            "/response/arr[@name='copyFields']/lst[    str[@name='source'][.='*_i']"
-           +"                                      and str[@name='dest'][.='dest_sub_no_ast_s']]");
-  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldCollectionResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldCollectionResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldCollectionResource.java
index 318b28a..032bbad 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldCollectionResource.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldCollectionResource.java
@@ -30,39 +30,10 @@ public class TestDynamicFieldCollectionResource extends SolrRestletTestBase {
   }
 
   @Test
-  public void testGetTwoDynamicFields() throws IOException {
-    assertQ("/schema/dynamicfields?indent=on&wt=xml&fl=*_i,*_s",
-            "count(/response/arr[@name='dynamicFields']/lst/str[@name='name']) = 2",
-            "(/response/arr[@name='dynamicFields']/lst/str[@name='name'])[1] = '*_i'",
-            "(/response/arr[@name='dynamicFields']/lst/str[@name='name'])[2] = '*_s'");
-  }
-
-  @Test
-  public void testNotFoundDynamicFields() throws IOException {
-    assertQ("/schema/dynamicfields?indent=on&wt=xml&fl=*_not_in_there,this_one_isnt_either_*",
-            "count(/response/arr[@name='dynamicFields']) = 1",
-            "count(/response/arr[@name='dynamicfields']/lst/str[@name='name']) = 0");
-  }
-
-  @Test
   public void testJsonGetAllDynamicFields() throws Exception {
     assertJQ("/schema/dynamicfields?indent=on",
              "/dynamicFields/[0]/name=='*_coordinate'",
              "/dynamicFields/[1]/name=='ignored_*'",
              "/dynamicFields/[2]/name=='*_mfacet'");
   }
-  
-  @Test
-  public void testJsonGetTwoDynamicFields() throws Exception {
-    assertJQ("/schema/dynamicfields?indent=on&fl=*_i,*_s&wt=xml", // assertJQ will fix the wt param to be json
-             "/dynamicFields/[0]/name=='*_i'",
-             "/dynamicFields/[1]/name=='*_s'");
-  }
-
-  @Test
-  public void testJsonPostFieldsToNonMutableIndexSchema() throws Exception {
-    assertJPost("/schema/dynamicfields",
-        "[{\"name\":\"foobarbaz\", \"type\":\"text_general\", \"stored\":\"false\"}]",
-        "/error/msg=='This IndexSchema is not mutable.'");
-  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldResource.java
index 54b17fc..7ca7953 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldResource.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestDynamicFieldResource.java
@@ -67,11 +67,4 @@ public class TestDynamicFieldResource extends SolrRestletTestBase {
              "/dynamicField/required==false",
              "/dynamicField/tokenized==false");
   }
-
-  @Test
-  public void testJsonPutFieldToNonMutableIndexSchema() throws Exception {
-    assertJPut("/schema/dynamicfields/newfield_*",
-        "{\"type\":\"text_general\", \"stored\":\"false\"}",
-        "/error/msg=='This IndexSchema is not mutable.'");
-  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java
index 571acc5..dd55415 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java
@@ -30,45 +30,6 @@ public class TestFieldCollectionResource extends SolrRestletTestBase {
             "(/response/arr[@name='fields']/lst/str[@name='name'])[3] = '_version_'");
   }
 
-  @Test
-  public void testGetTwoFields() throws IOException {
-    assertQ("/schema/fields?indent=on&wt=xml&fl=id,_version_",
-            "count(/response/arr[@name='fields']/lst/str[@name='name']) = 2",
-            "(/response/arr[@name='fields']/lst/str[@name='name'])[1] = 'id'",
-            "(/response/arr[@name='fields']/lst/str[@name='name'])[2] = '_version_'");
-  }
-  
-  @Test
-  public void testGetThreeFieldsDontIncludeDynamic() throws IOException {
-    // 
-    assertQ("/schema/fields?indent=on&wt=xml&fl=id,_version_,price_i",
-            "count(/response/arr[@name='fields']/lst/str[@name='name']) = 2",
-            "(/response/arr[@name='fields']/lst/str[@name='name'])[1] = 'id'",
-            "(/response/arr[@name='fields']/lst/str[@name='name'])[2] = '_version_'");
-  }
-
-  @Test
-  public void testGetThreeFieldsIncludeDynamic() throws IOException {
-    assertQ("/schema/fields?indent=on&wt=xml&fl=id,_version_,price_i&includeDynamic=on",
-
-            "count(/response/arr[@name='fields']/lst/str[@name='name']) = 3",
-
-            "(/response/arr[@name='fields']/lst/str[@name='name'])[1] = 'id'",
-
-            "(/response/arr[@name='fields']/lst/str[@name='name'])[2] = '_version_'",
-
-            "(/response/arr[@name='fields']/lst/str[@name='name'])[3] = 'price_i'",
-
-            "/response/arr[@name='fields']/lst[    str[@name='name']='price_i'    "
-           +"                                  and str[@name='dynamicBase']='*_i']");
-  }
-
-  @Test
-  public void testNotFoundFields() throws IOException {
-    assertQ("/schema/fields?indent=on&wt=xml&fl=not_in_there,this_one_either",
-            "count(/response/arr[@name='fields']) = 1",
-            "count(/response/arr[@name='fields']/lst/str[@name='name']) = 0");
-  }
 
   @Test
   public void testJsonGetAllFields() throws Exception {
@@ -78,10 +39,4 @@ public class TestFieldCollectionResource extends SolrRestletTestBase {
              "/fields/[2]/name=='_version_'");
   }
 
-  @Test
-  public void testJsonGetTwoFields() throws Exception {
-    assertJQ("/schema/fields?indent=on&fl=id,_version_&wt=xml", // assertJQ should fix the wt param to be json
-             "/fields/[0]/name=='id'",
-             "/fields/[1]/name=='_version_'");
-  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestFieldResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestFieldResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestFieldResource.java
index 711e3c0..627aee0 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestFieldResource.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestFieldResource.java
@@ -72,18 +72,12 @@ public class TestFieldResource extends SolrRestletTestBase {
              "/field/tokenized==true");
   }
   
-  @Test
-  public void testGetFieldIncludeDynamic() throws Exception {
-    assertQ("/schema/fields/some_crazy_name_i?indent=on&wt=xml&includeDynamic=true",
-            "/response/lst[@name='field']/str[@name='name'] = 'some_crazy_name_i'",
-            "/response/lst[@name='field']/str[@name='dynamicBase'] = '*_i'");    
-  }
-  
+
   @Test
   public void testGetFieldDontShowDefaults() throws Exception {
     String[] tests = { 
         "count(/response/lst[@name='field']) = 1",
-        "count(/response/lst[@name='field']/*) = 7",
+        "count(/response/lst[@name='field']/*) = 6",
         "/response/lst[@name='field']/str[@name='name'] = 'id'",
         "/response/lst[@name='field']/str[@name='type'] = 'string'",
         "/response/lst[@name='field']/bool[@name='indexed'] = 'true'",
@@ -95,17 +89,4 @@ public class TestFieldResource extends SolrRestletTestBase {
     assertQ("/schema/fields/id?indent=on&wt=xml&showDefaults=false", tests);
   }
   
-  @Test
-  public void testJsonPutFieldToNonMutableIndexSchema() throws Exception {
-    assertJPut("/schema/fields/newfield",
-        "{\"type\":\"text_general\", \"stored\":\"false\"}",
-        "/error/msg=='This IndexSchema is not mutable.'");
-  }
-
-  @Test
-  public void testJsonPostFieldsToNonMutableIndexSchema() throws Exception {
-    assertJPost("/schema/fields",
-        "[{\"name\":\"foobarbaz\", \"type\":\"text_general\", \"stored\":\"false\"}]",
-        "/error/msg=='This IndexSchema is not mutable.'");
-  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeCollectionResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeCollectionResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeCollectionResource.java
index a61f644..53cd1c0 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeCollectionResource.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeCollectionResource.java
@@ -19,6 +19,7 @@ import org.apache.solr.rest.SolrRestletTestBase;
 import org.junit.Test;
 
 public class TestFieldTypeCollectionResource extends SolrRestletTestBase {
+
   @Test
   public void testGetAllFieldTypes() throws Exception {
     assertQ("/schema/fieldtypes?indent=on&wt=xml",

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeResource.java
index 2f0c241..eb72aed 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeResource.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestFieldTypeResource.java
@@ -24,7 +24,7 @@ public class TestFieldTypeResource extends SolrRestletTestBase {
   public void testGetFieldType() throws Exception {
     assertQ("/schema/fieldtypes/float?indent=on&wt=xml&showDefaults=true",
             "count(/response/lst[@name='fieldType']) = 1",
-            "count(/response/lst[@name='fieldType']/*) = 18",
+            "count(/response/lst[@name='fieldType']/*) = 16",
             "/response/lst[@name='fieldType']/str[@name='name'] = 'float'",
             "/response/lst[@name='fieldType']/str[@name='class'] = 'solr.TrieFloatField'",
             "/response/lst[@name='fieldType']/str[@name='precisionStep'] ='0'",
@@ -39,9 +39,7 @@ public class TestFieldTypeResource extends SolrRestletTestBase {
             "/response/lst[@name='fieldType']/bool[@name='omitPositions'] = 'false'",
             "/response/lst[@name='fieldType']/bool[@name='storeOffsetsWithPositions'] = 'false'",
             "/response/lst[@name='fieldType']/bool[@name='multiValued'] = 'false'",
-            "/response/lst[@name='fieldType']/bool[@name='tokenized'] = 'false'",
-            "/response/lst[@name='fieldType']/arr[@name='fields']/str = 'weight'",
-            "/response/lst[@name='fieldType']/arr[@name='dynamicFields']/str = '*_f'");
+            "/response/lst[@name='fieldType']/bool[@name='tokenized'] = 'false'");
   }
 
   @Test
@@ -69,22 +67,19 @@ public class TestFieldTypeResource extends SolrRestletTestBase {
              "/fieldType/omitPositions==false",
              "/fieldType/storeOffsetsWithPositions==false",
              "/fieldType/multiValued==false",
-             "/fieldType/tokenized==false",
-             "/fieldType/fields==['weight']",
-             "/fieldType/dynamicFields==['*_f']");
+             "/fieldType/tokenized==false");
   }
   
   @Test
   public void testGetFieldTypeDontShowDefaults() throws Exception {
     assertQ("/schema/fieldtypes/teststop?wt=xml&indent=on",
-            "count(/response/lst[@name='fieldType']/*) = 5",
+            "count(/response/lst[@name='fieldType']/*) = 3",
             "/response/lst[@name='fieldType']/str[@name='name'] = 'teststop'",
             "/response/lst[@name='fieldType']/str[@name='class'] = 'solr.TextField'",
             "/response/lst[@name='fieldType']/lst[@name='analyzer']/lst[@name='tokenizer']/str[@name='class'] = 'solr.LowerCaseTokenizerFactory'",
             "/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst/str[@name='class'][.='solr.StandardFilterFactory']",
             "/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst/str[@name='class'][.='solr.StopFilterFactory']",
-            "/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst/str[@name='words'][.='stopwords.txt']",
-            "/response/lst[@name='fieldType']/arr[@name='fields']/str[.='teststop']",
-            "/response/lst[@name='fieldType']/arr[@name='dynamicFields']");
+            "/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst/str[@name='words'][.='stopwords.txt']"
+            );
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaDynamicFieldResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaDynamicFieldResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaDynamicFieldResource.java
deleted file mode 100644
index 6572709..0000000
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaDynamicFieldResource.java
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * 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.solr.rest.schema;
-import org.apache.commons.io.FileUtils;
-import org.apache.solr.util.RestTestBase;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.restlet.ext.servlet.ServerServlet;
-
-import java.io.File;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.regex.Pattern;
-
-public class TestManagedSchemaDynamicFieldResource extends RestTestBase {
-
-  private static File tmpSolrHome;
-  private static File tmpConfDir;
-
-  private static final String collection = "collection1";
-  private static final String confDir = collection + "/conf";
-
-
-  @Before
-  public void before() throws Exception {
-    tmpSolrHome = createTempDir().toFile();
-    tmpConfDir = new File(tmpSolrHome, confDir);
-    FileUtils.copyDirectory(new File(TEST_HOME()), tmpSolrHome.getAbsoluteFile());
-
-    final SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
-    final ServletHolder solrRestApi = new ServletHolder("SolrSchemaRestApi", ServerServlet.class);
-    solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
-    extraServlets.put(solrRestApi, "/schema/*");  // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
-
-    System.setProperty("managed.schema.mutable", "true");
-    System.setProperty("enable.update.log", "false");
-
-    createJettyAndHarness(tmpSolrHome.getAbsolutePath(), "solrconfig-managed-schema.xml", "schema-rest.xml",
-                          "/solr", true, extraServlets);
-  }
-
-  @After
-  public void after() throws Exception {
-    if (jetty != null) {
-      jetty.stop();
-      jetty = null;
-    }
-    client = null;
-    if (restTestHarness != null) {
-      restTestHarness.close();
-    }
-    restTestHarness = null;
-  }
-
-  @Test
-  public void testAddDynamicFieldBadFieldType() throws Exception {
-    assertJPut("/schema/dynamicfields/*_newdynamicfield",
-               json( "{'type':'not_in_there_at_all','stored':false}" ),
-               "/error/msg==\"Dynamic field \\'*_newdynamicfield\\': Field type \\'not_in_there_at_all\\' not found.\"");
-  }
-
-  @Test
-  public void testAddDynamicFieldMismatchedName() throws Exception {
-    assertJPut("/schema/dynamicfields/*_newdynamicfield",
-               json( "{'name':'*_something_else','type':'text','stored':false}" ),
-               "/error/msg=='///regex:\\\\*_newdynamicfield///'");
-  }
-
-  @Test
-  public void testAddDynamicFieldBadProperty() throws Exception {
-    assertJPut("/schema/dynamicfields/*_newdynamicfield",
-               json( "{'type':'text','no_property_with_this_name':false}" ),
-               "/error/msg==\"java.lang.IllegalArgumentException: Invalid field property: no_property_with_this_name\"");
-  }
-
-  @Test
-  public void testAddDynamicField() throws Exception {
-    assertQ("/schema/dynamicfields/newdynamicfield_*?indent=on&wt=xml",
-            "count(/response/lst[@name='newdynamicfield_*']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPut("/schema/dynamicfields/newdynamicfield_*",
-               json("{'type':'text','stored':false}"),
-               "/responseHeader/status==0");
-
-    assertQ("/schema/dynamicfields/newdynamicfield_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-
-    assertU(adoc("newdynamicfield_A", "value1 value2", "id", "123"));
-    assertU(commit());
-
-    assertQ("/select?q=newdynamicfield_A:value1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/result[@name='response'][@numFound='1']",
-            "count(/response/result[@name='response']/doc/*) = 1",
-            "/response/result[@name='response']/doc/str[@name='id'][.='123']");
-  }
-
-  @Test
-  public void testAddDynamicFieldWithMulipleOptions() throws Exception {
-    assertQ("/schema/dynamicfields/newdynamicfield_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPut("/schema/dynamicfields/newdynamicfield_*",
-               json("{'type':'text_en','stored':true,'indexed':false}"),
-               "/responseHeader/status==0");
-
-    File managedSchemaFile = new File(tmpConfDir, "managed-schema");
-    assertTrue(managedSchemaFile.exists());
-    String managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
-    Pattern newdynamicfieldStoredTrueIndexedFalsePattern
-        = Pattern.compile( "<dynamicField name=\"newdynamicfield_\\*\" type=\"text_en\""
-                         + "(?=.*stored=\"true\")(?=.*indexed=\"false\").*/>");
-    assertTrue(newdynamicfieldStoredTrueIndexedFalsePattern.matcher(managedSchemaContents).find());
-
-    assertQ("/schema/dynamicfields/newdynamicfield_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/lst[@name='dynamicField']/str[@name='name'] = 'newdynamicfield_*'",
-            "/response/lst[@name='dynamicField']/str[@name='type'] = 'text_en'",
-            "/response/lst[@name='dynamicField']/bool[@name='indexed'] = 'false'",
-            "/response/lst[@name='dynamicField']/bool[@name='stored'] = 'true'");
-
-    assertU(adoc("newdynamicfield_A", "value1 value2", "id", "1234"));
-    assertU(commit());
-
-    assertQ("/schema/dynamicfields/newdynamicfield2_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPut("/schema/dynamicfields/newdynamicfield2_*",
-               json("{'type':'text_en','stored':true,'indexed':true,'multiValued':true}"),
-               "/responseHeader/status==0");
-
-    managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
-    Pattern newdynamicfield2StoredTrueIndexedTrueMultiValuedTruePattern
-        = Pattern.compile( "<dynamicField name=\"newdynamicfield2_\\*\" type=\"text_en\" "
-                         + "(?=.*stored=\"true\")(?=.*indexed=\"true\")(?=.*multiValued=\"true\").*/>");
-    assertTrue(newdynamicfield2StoredTrueIndexedTrueMultiValuedTruePattern.matcher(managedSchemaContents).find());
-
-    assertQ("/schema/dynamicfields/newdynamicfield2_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/lst[@name='dynamicField']/str[@name='name'] = 'newdynamicfield2_*'",
-            "/response/lst[@name='dynamicField']/str[@name='type'] = 'text_en'",
-            "/response/lst[@name='dynamicField']/bool[@name='indexed'] = 'true'",
-            "/response/lst[@name='dynamicField']/bool[@name='stored'] = 'true'",
-            "/response/lst[@name='dynamicField']/bool[@name='multiValued'] = 'true'");
-
-    assertU(adoc("newdynamicfield2_A", "value1 value2", "newdynamicfield2_A", "value3 value4", "id", "5678"));
-    assertU(commit());
-
-    assertQ("/select?q=newdynamicfield2_A:value3",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/result[@name='response'][@numFound='1']",
-            "count(/response/result[@name='response']/doc) = 1",
-            "/response/result[@name='response']/doc/str[@name='id'][.='5678']");
-  }
-
-  @Test
-  public void testAddDynamicFieldCollectionWithMultipleOptions() throws Exception {
-    assertQ("/schema/dynamicfields?indent=on&wt=xml",
-            "count(/response/arr[@name='dynamicFields']/lst/str[@name]) > 0",                          // there are fields
-            "count(/response/arr[@name='dynamicFields']/lst/str[starts-with(@name,'newfield')]) = 0"); // but none named newfield*
-
-    assertJPost("/schema/dynamicfields",
-                json("[{'name':'newdynamicfield_*','type':'text_en','stored':true,'indexed':false}]"),
-                "/responseHeader/status==0");
-
-    File managedSchemaFile = new File(tmpConfDir, "managed-schema");
-    assertTrue(managedSchemaFile.exists());
-    String managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
-    Pattern newfieldStoredTrueIndexedFalsePattern
-        = Pattern.compile( "<dynamicField name=\"newdynamicfield_\\*\" type=\"text_en\""
-                         + "(?=.*stored=\"true\")(?=.*indexed=\"false\").*/>");
-    assertTrue(newfieldStoredTrueIndexedFalsePattern.matcher(managedSchemaContents).find());
-
-    assertQ("/schema/dynamicfields?indent=on&wt=xml",
-             "/response/arr[@name='dynamicFields']/lst"
-           + "[str[@name='name']='newdynamicfield_*' and str[@name='type']='text_en'"
-           + " and bool[@name='stored']='true' and bool[@name='indexed']='false']");
-
-    assertU(adoc("newdynamicfield_A", "value1 value2", "id", "789"));
-    assertU(commit());
-
-    assertJPost("/schema/dynamicfields",
-                json("[{'name':'newdynamicfield2_*','type':'text_en','stored':true,'indexed':true,'multiValued':true}]"),
-                "/responseHeader/status==0");
-
-    managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
-    Pattern newdynamicfield2StoredTrueIndexedTrueMultiValuedTruePattern
-        = Pattern.compile( "<dynamicField name=\"newdynamicfield2_\\*\" type=\"text_en\" "
-                         + "(?=.*stored=\"true\")(?=.*indexed=\"true\")(?=.*multiValued=\"true\").*/>");
-    assertTrue(newdynamicfield2StoredTrueIndexedTrueMultiValuedTruePattern.matcher(managedSchemaContents).find());
-
-    assertQ("/schema/dynamicfields?indent=on&wt=xml",
-             "/response/arr[@name='dynamicFields']/lst"
-           + "[str[@name='name']='newdynamicfield2_*' and str[@name='type']='text_en'"
-           + " and bool[@name='stored']='true' and bool[@name='indexed']='true' and bool[@name='multiValued']='true']");
-
-    assertU(adoc("newdynamicfield2_A", "value1 value2", "newdynamicfield2_A", "value3 value4", "id", "790"));
-    assertU(commit());
-
-    assertQ("/select?q=newdynamicfield2_A:value3",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/result[@name='response'][@numFound='1']",
-            "count(/response/result[@name='response']/doc) = 1",
-            "/response/result[@name='response']/doc/str[@name='id'][.='790']");
-  }
-
-
-  @Test
-  public void testAddCopyField() throws Exception {
-    assertQ("/schema/dynamicfields/newdynamicfield2_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPut("/schema/dynamicfields/dynamicfieldA_*",
-               json("{'type':'text','stored':false}"),
-               "/responseHeader/status==0");
-    assertJPut("/schema/dynamicfields/dynamicfieldB_*",
-               json("{'type':'text','stored':false, 'copyFields':['dynamicfieldA_*']}"),
-               "/responseHeader/status==0");
-    assertJPut("/schema/dynamicfields/dynamicfieldC_*",
-               json("{'type':'text','stored':false, 'copyFields':'dynamicfieldA_*'}"),
-               "/responseHeader/status==0");
-
-    assertQ("/schema/dynamicfields/dynamicfieldB_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=dynamicfieldB_*",
-            "count(/response/arr[@name='copyFields']/lst) = 1");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=dynamicfieldC_*",
-            "count(/response/arr[@name='copyFields']/lst) = 1");
-    //fine to pass in empty list, just won't do anything
-    assertJPut("/schema/dynamicfields/dynamicfieldD_*",
-               json("{'type':'text','stored':false, 'copyFields':[]}"),
-               "/responseHeader/status==0");
-    //some bad usages
-    assertJPut("/schema/dynamicfields/dynamicfieldF_*",
-               json("{'type':'text','stored':false, 'copyFields':['some_nonexistent_dynamicfield_ignore_exception_*']}"),
-               "/error/msg==\"copyField dest :\\'some_nonexistent_dynamicfield_ignore_exception_*\\' is not an explicit field and doesn\\'t match a dynamicField.\"");
-  }
-
-  @Test
-  public void testPostMultipleDynamicFields() throws Exception {
-    assertQ("/schema/dynamicfields/newdynamicfield1_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertQ("/schema/dynamicfields/newdynamicfield2_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPost("/schema/dynamicfields",
-                json( "[{'name':'newdynamicfield1_*','type':'text','stored':false},"
-                    + " {'name':'newdynamicfield2_*','type':'text','stored':false}]"),
-                "/responseHeader/status==0");
-
-    assertQ("/schema/dynamicfields/newdynamicfield1_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-
-    assertQ("/schema/dynamicfields/newdynamicfield2_*?indent=on&wt=xml",
-            "count(/response/lst[@name='dynamicField']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-
-    assertU(adoc("newdynamicfield1_A", "value1 value2", "id", "123"));
-    assertU(adoc("newdynamicfield2_A", "value3 value4", "id", "456"));
-    assertU(commit());
-
-    assertQ("/select?q=newdynamicfield1_A:value1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/result[@name='response'][@numFound='1']",
-            "count(/response/result[@name='response']/doc/*) = 1",
-            "/response/result[@name='response']/doc/str[@name='id'][.='123']");
-    assertQ("/select?q=newdynamicfield2_A:value3",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/result[@name='response'][@numFound='1']",
-            "count(/response/result[@name='response']/doc/*) = 1",
-            "/response/result[@name='response']/doc/str[@name='id'][.='456']");
-  }
-
-  @Test
-  public void testPostCopy() throws Exception {
-    assertJPost("/schema/dynamicfields",
-                json( "[{'name':'dynamicfieldA_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldB_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldC_*','type':'text','stored':false, 'copyFields':['dynamicfieldB_*']}]"),
-                "/responseHeader/status==0");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=dynamicfieldC_*",
-            "count(/response/arr[@name='copyFields']/lst) = 1");
-    assertJPost("/schema/dynamicfields",
-                json( "[{'name':'dynamicfieldD_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldE_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldF_*','type':'text','stored':false, 'copyFields':['dynamicfieldD_*','dynamicfieldE_*']},"
-                    + " {'name':'dynamicfieldG_*','type':'text','stored':false, 'copyFields':'dynamicfieldD_*'}]"),//single
-                "/responseHeader/status==0");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=dynamicfieldF_*",
-            "count(/response/arr[@name='copyFields']/lst) = 2");
-    //passing in an empty list is perfectly acceptable, it just won't do anything
-    assertJPost("/schema/dynamicfields",
-                json( "[{'name':'dynamicfieldX_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldY_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldZ_*','type':'text','stored':false, 'copyFields':[]}]"),
-                "/responseHeader/status==0");
-    //some bad usages
-
-    assertJPost("/schema/dynamicfields",
-                json( "[{'name':'dynamicfieldH_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldI_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldJ_*','type':'text','stored':false, 'copyFields':['some_nonexistent_dynamicfield_ignore_exception_*']}]"),
-                "/error/msg=='copyField dest :\\'some_nonexistent_dynamicfield_ignore_exception_*\\' is not an explicit field and doesn\\'t match a dynamicField.'");
-  }
-
-  @Test
-  public void testPostCopyFields() throws Exception {
-    assertJPost("/schema/dynamicfields",
-                json( "[{'name':'dynamicfieldA_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldB_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldC_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldD_*','type':'text','stored':false},"
-                    + " {'name':'dynamicfieldE_*','type':'text','stored':false}]"),
-                "/responseHeader/status==0");
-    assertJPost("/schema/copyfields",
-                json( "[{'source':'dynamicfieldA_*', 'dest':'dynamicfieldB_*'},"
-                    + " {'source':'dynamicfieldD_*', 'dest':['dynamicfieldC_*', 'dynamicfieldE_*']}]"),
-                "/responseHeader/status==0");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=dynamicfieldA_*",
-            "count(/response/arr[@name='copyFields']/lst) = 1");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=dynamicfieldD_*",
-            "count(/response/arr[@name='copyFields']/lst) = 2");
-    assertJPost("/schema/copyfields", // copyField glob sources are not required to match a dynamic field
-                json("[{'source':'some_glob_not_necessarily_matching_any_dynamicfield_*', 'dest':['dynamicfieldA_*']},"
-                    +" {'source':'*', 'dest':['dynamicfieldD_*']}]"),
-                "/responseHeader/status==0");
-    assertJPost("/schema/copyfields",
-                json("[{'source':'dynamicfieldD_*', 'dest':['some_nonexistent_dynamicfield_ignore_exception_*']}]"),
-                "/error/msg=='copyField dest :\\'some_nonexistent_dynamicfield_ignore_exception_*\\' is not an explicit field and doesn\\'t match a dynamicField.'");
-  }
-}
-

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java
deleted file mode 100644
index b39d266..0000000
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * 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.solr.rest.schema;
-import org.apache.commons.io.FileUtils;
-import org.apache.solr.util.RestTestBase;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.restlet.ext.servlet.ServerServlet;
-
-import java.io.File;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.regex.Pattern;
-
-public class TestManagedSchemaFieldResource extends RestTestBase {
-
-  private static File tmpSolrHome;
-  private static File tmpConfDir;
-
-  private static final String collection = "collection1";
-  private static final String confDir = collection + "/conf";
-
-
-  @Before
-  public void before() throws Exception {
-    tmpSolrHome = createTempDir().toFile();
-    tmpConfDir = new File(tmpSolrHome, confDir);
-    FileUtils.copyDirectory(new File(TEST_HOME()), tmpSolrHome.getAbsoluteFile());
-
-    final SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
-    final ServletHolder solrRestApi = new ServletHolder("SolrSchemaRestApi", ServerServlet.class);
-    solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
-    extraServlets.put(solrRestApi, "/schema/*");  // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
-
-    System.setProperty("managed.schema.mutable", "true");
-    System.setProperty("enable.update.log", "false");
-
-    createJettyAndHarness(tmpSolrHome.getAbsolutePath(), "solrconfig-managed-schema.xml", "schema-rest.xml",
-                          "/solr", true, extraServlets);
-  }
-
-  @After
-  public void after() throws Exception {
-    if (jetty != null) {
-      jetty.stop();
-      jetty = null;
-    }
-    client = null;
-    if (restTestHarness != null) {
-      restTestHarness.close();
-    }
-    restTestHarness = null;
-  }
-  
-  @Test
-  public void testAddFieldBadFieldType() throws Exception {
-    assertJPut("/schema/fields/newfield",
-        json( "{'type':'not_in_there_at_all','stored':false}" ),
-        "/error/msg==\"Field \\'newfield\\': Field type \\'not_in_there_at_all\\' not found.\"");
-  }
-
-  @Test
-  public void testAddFieldMismatchedName() throws Exception {
-    assertJPut("/schema/fields/newfield",
-        json( "{'name':'something_else','type':'text','stored':false}" ),
-        "/error/msg=='///regex:newfield///'");
-  }
-  
-  @Test
-  public void testAddFieldBadProperty() throws Exception {
-    assertJPut("/schema/fields/newfield",
-               json( "{'type':'text','no_property_with_this_name':false}" ),
-               "/error/msg==\"java.lang.IllegalArgumentException: Invalid field property: no_property_with_this_name\"");
-  }
-  
-  @Test
-  public void testAddField() throws Exception {
-    assertQ("/schema/fields/newfield?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-    
-    assertJPut("/schema/fields/newfield",
-               json("{'type':'text','stored':false}"),
-               "/responseHeader/status==0");
-    
-    assertQ("/schema/fields/newfield?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-    
-    assertU(adoc("newfield", "value1 value2", "id", "123"));
-    assertU(commit());
-
-    assertQ("/select?q=newfield:value1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/result[@name='response'][@numFound='1']",
-            "count(/response/result[@name='response']/doc/*) = 1",
-            "/response/result[@name='response']/doc/str[@name='id'][.='123']");
-  }
-
-  @Test
-  public void testAddFieldWithMulipleOptions() throws Exception {
-    assertQ("/schema/fields/newfield?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPut("/schema/fields/newfield",
-               json("{'type':'text_en','stored':true,'indexed':false}"),
-               "/responseHeader/status==0");
-
-    File managedSchemaFile = new File(tmpConfDir, "managed-schema");
-    assertTrue(managedSchemaFile.exists());
-    String managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
-    Pattern newfieldStoredTrueIndexedFalsePattern 
-        = Pattern.compile( "<field name=\"newfield\" type=\"text_en\" "
-                         + "(?=.*stored=\"true\")(?=.*indexed=\"false\").*/>");
-    assertTrue(newfieldStoredTrueIndexedFalsePattern.matcher(managedSchemaContents).find());
-
-    assertQ("/schema/fields/newfield?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/lst[@name='field']/str[@name='name'] = 'newfield'",
-            "/response/lst[@name='field']/str[@name='type'] = 'text_en'",
-            "/response/lst[@name='field']/bool[@name='indexed'] = 'false'",
-            "/response/lst[@name='field']/bool[@name='stored'] = 'true'");
-
-    assertU(adoc("newfield", "value1 value2", "id", "1234"));
-    assertU(commit());
-
-    assertQ("/schema/fields/newfield2?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPut("/schema/fields/newfield2",
-               json("{'type':'text_en','stored':true,'indexed':true,'multiValued':true}"),
-               "/responseHeader/status==0");
-
-    managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
-    Pattern newfield2StoredTrueIndexedTrueMultiValuedTruePattern
-        = Pattern.compile( "<field name=\"newfield2\" type=\"text_en\" "
-                         + "(?=.*stored=\"true\")(?=.*indexed=\"true\")(?=.*multiValued=\"true\").*/>");
-    assertTrue(newfield2StoredTrueIndexedTrueMultiValuedTruePattern.matcher(managedSchemaContents).find());
-
-    assertQ("/schema/fields/newfield2?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/lst[@name='field']/str[@name='name'] = 'newfield2'",
-            "/response/lst[@name='field']/str[@name='type'] = 'text_en'",
-            "/response/lst[@name='field']/bool[@name='indexed'] = 'true'",
-            "/response/lst[@name='field']/bool[@name='stored'] = 'true'",
-            "/response/lst[@name='field']/bool[@name='multiValued'] = 'true'");
-
-    assertU(adoc("newfield2", "value1 value2", "newfield2", "value3 value4", "id", "5678"));
-    assertU(commit());
-
-    assertQ("/select?q=newfield2:value3",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/result[@name='response'][@numFound='1']",
-            "count(/response/result[@name='response']/doc) = 1",
-            "/response/result[@name='response']/doc/str[@name='id'][.='5678']");
-  }
-
-  @Test
-  public void testAddFieldCollectionWithMultipleOptions() throws Exception {
-    assertQ("/schema/fields?indent=on&wt=xml",
-            "count(/response/arr[@name='fields']/lst/str[@name]) > 0",                          // there are fields
-            "count(/response/arr[@name='fields']/lst/str[starts-with(@name,'newfield')]) = 0"); // but none named newfield*
-
-    assertJPost("/schema/fields",
-               json("[{'name':'newfield','type':'text_en','stored':true,'indexed':false}]"),
-               "/responseHeader/status==0");
-
-    File managedSchemaFile = new File(tmpConfDir, "managed-schema");
-    assertTrue(managedSchemaFile.exists());
-    String managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
-    Pattern newfieldStoredTrueIndexedFalsePattern
-        = Pattern.compile( "<field name=\"newfield\" type=\"text_en\" "
-                         + "(?=.*stored=\"true\")(?=.*indexed=\"false\").*/>");
-    assertTrue(newfieldStoredTrueIndexedFalsePattern.matcher(managedSchemaContents).find());
-
-    assertQ("/schema/fields?indent=on&wt=xml",
-             "/response/arr[@name='fields']/lst"
-           + "[str[@name='name']='newfield' and str[@name='type']='text_en'"
-           + " and bool[@name='stored']='true' and bool[@name='indexed']='false']");
-
-    assertU(adoc("newfield", "value1 value2", "id", "789"));
-    assertU(commit());
-
-    assertJPost("/schema/fields",
-                json("[{'name':'newfield2','type':'text_en','stored':true,'indexed':true,'multiValued':true}]"),
-                "/responseHeader/status==0");
-
-    managedSchemaContents = FileUtils.readFileToString(managedSchemaFile, "UTF-8");
-    Pattern newfield2StoredTrueIndexedTrueMultiValuedTruePattern
-        = Pattern.compile( "<field name=\"newfield2\" type=\"text_en\" "
-                         + "(?=.*stored=\"true\")(?=.*indexed=\"true\")(?=.*multiValued=\"true\").*/>");
-    assertTrue(newfield2StoredTrueIndexedTrueMultiValuedTruePattern.matcher(managedSchemaContents).find());
-
-    assertQ("/schema/fields?indent=on&wt=xml",
-            "/response/arr[@name='fields']/lst"
-            + "[str[@name='name']='newfield2' and str[@name='type']='text_en'"
-            + " and bool[@name='stored']='true' and bool[@name='indexed']='true' and bool[@name='multiValued']='true']");
-
-    assertU(adoc("newfield2", "value1 value2", "newfield2", "value3 value4", "id", "790"));
-    assertU(commit());
-
-    assertQ("/select?q=newfield2:value3",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-            "/response/result[@name='response'][@numFound='1']",
-            "count(/response/result[@name='response']/doc) = 1",
-            "/response/result[@name='response']/doc/str[@name='id'][.='790']");
-  }
-
-
-  @Test
-  public void testAddCopyField() throws Exception {
-    assertQ("/schema/fields/newfield2?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPut("/schema/fields/fieldA", 
-               json("{'type':'text','stored':false}"),
-               "/responseHeader/status==0");
-    assertJPut("/schema/fields/fieldB",
-               json("{'type':'text','stored':false, 'copyFields':['fieldA']}"),
-               "/responseHeader/status==0");
-    assertJPut("/schema/fields/fieldC",
-               json("{'type':'text','stored':false, 'copyFields':'fieldA'}"),
-               "/responseHeader/status==0");
-
-    assertQ("/schema/fields/fieldB?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldB",
-        "count(/response/arr[@name='copyFields']/lst) = 1"
-    );
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldC",
-        "count(/response/arr[@name='copyFields']/lst) = 1"
-    );
-    //fine to pass in empty list, just won't do anything
-    assertJPut("/schema/fields/fieldD",
-               json("{'type':'text','stored':false, 'copyFields':[]}"),
-               "/responseHeader/status==0");
-    //some bad usages
-    assertJPut("/schema/fields/fieldF",
-               json("{'type':'text','stored':false, 'copyFields':['some_nonexistent_field_ignore_exception']}"),
-               "/error/msg==\"copyField dest :\\'some_nonexistent_field_ignore_exception\\' is not an explicit field and doesn\\'t match a dynamicField.\"");
-  }
-
-  @Test
-  public void testPostMultipleFields() throws Exception {
-    assertQ("/schema/fields/newfield1?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertQ("/schema/fields/newfield2?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 0",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '404'",
-            "/response/lst[@name='error']/int[@name='code'] = '404'");
-
-    assertJPost("/schema/fields",
-                json( "[{'name':'newfield1','type':'text','stored':false},"
-                    + " {'name':'newfield2','type':'text','stored':false}]"),
-                "/responseHeader/status==0");
-
-    assertQ("/schema/fields/newfield1?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-
-    assertQ("/schema/fields/newfield2?indent=on&wt=xml",
-            "count(/response/lst[@name='field']) = 1",
-            "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-
-    assertU(adoc("newfield1", "value1 value2", "id", "123"));
-    assertU(adoc("newfield2", "value3 value4", "id", "456"));
-    assertU(commit());
-
-    assertQ("/select?q=newfield1:value1",
-        "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-        "/response/result[@name='response'][@numFound='1']",
-        "count(/response/result[@name='response']/doc/*) = 1",
-        "/response/result[@name='response']/doc/str[@name='id'][.='123']");
-    assertQ("/select?q=newfield2:value3",
-        "/response/lst[@name='responseHeader']/int[@name='status'] = '0'",
-        "/response/result[@name='response'][@numFound='1']",
-        "count(/response/result[@name='response']/doc/*) = 1",
-        "/response/result[@name='response']/doc/str[@name='id'][.='456']");
-  }
-
-  @Test
-  public void testPostCopy() throws Exception {
-    assertJPost("/schema/fields",
-                json( "[{'name':'fieldA','type':'text','stored':false},"
-                    + " {'name':'fieldB','type':'text','stored':false},"
-                    + " {'name':'fieldC','type':'text','stored':false, 'copyFields':['fieldB']}]"),
-                "/responseHeader/status==0");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldC",
-        "count(/response/arr[@name='copyFields']/lst) = 1"
-    );
-    assertJPost("/schema/fields",
-                json( "[{'name':'fieldD','type':'text','stored':false},"
-                    + " {'name':'fieldE','type':'text','stored':false},"
-                    + " {'name':'fieldF','type':'text','stored':false, 'copyFields':['fieldD','fieldE']},"
-                    + " {'name':'fieldG','type':'text','stored':false, 'copyFields':'fieldD'}]"),//single
-                "/responseHeader/status==0");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldF",
-        "count(/response/arr[@name='copyFields']/lst) = 2"
-    );
-    //passing in an empty list is perfectly acceptable, it just won't do anything
-    assertJPost("/schema/fields",
-                json( "[{'name':'fieldX','type':'text','stored':false},"
-                    + " {'name':'fieldY','type':'text','stored':false},"
-                    + " {'name':'fieldZ','type':'text','stored':false, 'copyFields':[]}]"),
-                "/responseHeader/status==0");
-    //some bad usages
-
-    assertJPost("/schema/fields",
-                json( "[{'name':'fieldH','type':'text','stored':false},"
-                    + " {'name':'fieldI','type':'text','stored':false},"
-                    + " {'name':'fieldJ','type':'text','stored':false, 'copyFields':['some_nonexistent_field_ignore_exception']}]"),
-                "/error/msg=='copyField dest :\\'some_nonexistent_field_ignore_exception\\' is not an explicit field and doesn\\'t match a dynamicField.'");
-  }
-
-  @Test
-  public void testPostCopyFields() throws Exception {
-    assertJPost("/schema/fields",
-                json( "[{'name':'fieldA','type':'text','stored':false},"
-                    + " {'name':'fieldB','type':'text','stored':false},"
-                    + " {'name':'fieldC','type':'text','stored':false},"
-                    + " {'name':'fieldD','type':'text','stored':false},"
-                    + " {'name':'fieldE','type':'text','stored':false}]"),
-                "/responseHeader/status==0");
-    assertJPost("/schema/copyfields", 
-                json( "[{'source':'fieldA', 'dest':'fieldB'},"
-                    + " {'source':'fieldD', 'dest':['fieldC', 'fieldE']}]"),
-                "/responseHeader/status==0");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldA",
-        "count(/response/arr[@name='copyFields']/lst) = 1");
-    assertQ("/schema/copyfields/?indent=on&wt=xml&source.fl=fieldD",
-        "count(/response/arr[@name='copyFields']/lst) = 2");
-    assertJPost("/schema/copyfields", 
-                json("[{'source':'some_nonexistent_field_ignore_exception', 'dest':['fieldA']}]"),
-                "/error/msg=='copyField source :\\'some_nonexistent_field_ignore_exception\\' is not a glob and doesn\\'t match any explicit field or dynamicField.'");
-    assertJPost("/schema/copyfields", 
-                json("[{'source':'fieldD', 'dest':['some_nonexistent_field_ignore_exception']}]"),
-                "/error/msg=='copyField dest :\\'some_nonexistent_field_ignore_exception\\' is not an explicit field and doesn\\'t match a dynamicField.'");
-  }
-}
-

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f2c281ab/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldTypeResource.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldTypeResource.java b/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldTypeResource.java
deleted file mode 100644
index a0f4e25..0000000
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldTypeResource.java
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * 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.solr.rest.schema;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.solr.util.RestTestBase;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.noggit.JSONUtil;
-import org.restlet.ext.servlet.ServerServlet;
-
-public class TestManagedSchemaFieldTypeResource extends RestTestBase {
-  
-  private static File tmpSolrHome;
-  private static File tmpConfDir;
-
-  private static final String collection = "collection1";
-  private static final String confDir = collection + "/conf";
-
-  @Before
-  public void before() throws Exception {
-    tmpSolrHome = createTempDir().toFile();
-    tmpConfDir = new File(tmpSolrHome, confDir);
-    FileUtils.copyDirectory(new File(TEST_HOME()), tmpSolrHome.getAbsoluteFile());
-
-    final SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
-    final ServletHolder solrRestApi = new ServletHolder("SolrSchemaRestApi", ServerServlet.class);
-    solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
-    extraServlets.put(solrRestApi, "/schema/*");  // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
-
-    System.setProperty("managed.schema.mutable", "true");
-    System.setProperty("enable.update.log", "false");
-
-    createJettyAndHarness(tmpSolrHome.getAbsolutePath(), "solrconfig-managed-schema.xml", "schema-rest.xml",
-                          "/solr", true, extraServlets);
-  }
-
-  @After
-  private void after() throws Exception {
-    jetty.stop();
-    jetty = null;
-    System.clearProperty("managed.schema.mutable");
-    System.clearProperty("enable.update.log");
-    
-    if (restTestHarness != null) {
-      restTestHarness.close();
-    }
-    restTestHarness = null;
-  }
-  
-  @Test
-  public void testAddFieldTypes() throws Exception {
-    
-    // name mismatch
-    assertJPut("/schema/fieldtypes/myIntFieldType",
-        json("{'name':'badNameEh','class':'solr.TrieIntField','stored':false}"),
-        "/responseHeader/status==400");    
-    
-    // no class
-    assertJPut("/schema/fieldtypes/myIntFieldType",
-        json("{'stored':false}"),
-        "/responseHeader/status==400");
-    
-    // invalid attribute
-    assertJPut("/schema/fieldtypes/myIntFieldType",
-        json("{'foo':'bar'}"),
-        "/responseHeader/status==400");
-    
-    // empty analyzer
-    String ftdef = "";
-    ftdef += "{";
-    ftdef += "  'class':'solr.TextField','positionIncrementGap':'100',";
-    ftdef += "  'analyzer':''";
-    ftdef += "}";    
-    assertJPut("/schema/fieldtypes/emptyAnalyzerFieldType",
-        json(ftdef),
-        "/responseHeader/status==400");
-
-    // basic field types
-    assertJPut("/schema/fieldtypes/myIntFieldType",
-        json("{'name':'myIntFieldType','class':'solr.TrieIntField','stored':false}"),
-        "/responseHeader/status==0");    
-    checkFieldTypeProps(getExpectedProps("myIntFieldType", "solr.TrieIntField", true, false), 16);
-    
-    assertJPut("/schema/fieldtypes/myDoubleFieldType",
-        json("{'class':'solr.TrieDoubleField','precisionStep':'0','positionIncrementGap':'0'}"),
-        "/responseHeader/status==0");
-    Map<String,Object> expProps = 
-        getExpectedProps("myDoubleFieldType", "solr.TrieDoubleField", true, true);
-    // add some additional expected props for this type
-    expProps.put("precisionStep", "0");
-    expProps.put("positionIncrementGap", "0");
-    checkFieldTypeProps(expProps, 18);
-    
-    assertJPut("/schema/fieldtypes/myBoolFieldType",
-        json("{'class':'solr.BoolField','sortMissingLast':true}"),
-        "/responseHeader/status==0");
-    expProps = getExpectedProps("myBoolFieldType", "solr.BoolField", true, true);
-    expProps.put("sortMissingLast", true);
-    checkFieldTypeProps(expProps, 17);    
-    
-    // a text analyzing field type
-    ftdef = "{";
-    ftdef += "  'class':'solr.TextField','positionIncrementGap':'100',";
-    ftdef += "  'analyzer':{";
-    ftdef += "    'charFilters':[";
-    ftdef += "       {'class':'solr.PatternReplaceCharFilterFactory','replacement':'$1$1','pattern':'([a-zA-Z])\\\\1+'}";
-    ftdef += "    ],";
-    ftdef += "    'tokenizer':{'class':'solr.WhitespaceTokenizerFactory'},";
-    ftdef += "    'filters':[";
-    ftdef += "       {'class':'solr.WordDelimiterFilterFactory','preserveOriginal':'0'},";
-    ftdef += "       {'class':'solr.StopFilterFactory','words':'stopwords.txt','ignoreCase':'true'},";
-    ftdef += "       {'class':'solr.LowerCaseFilterFactory'},";
-    ftdef += "       {'class':'solr.ASCIIFoldingFilterFactory'},";
-    ftdef += "       {'class':'solr.KStemFilterFactory'}";
-    ftdef += "    ]";
-    ftdef += "  }";
-    ftdef += "}";
-  
-    assertJPut("/schema/fieldtypes/myTextFieldType", json(ftdef), "/responseHeader/status==0");
-    
-    expProps = getExpectedProps("myTextFieldType", "solr.TextField", true, true);
-    expProps.put("autoGeneratePhraseQueries", false);
-    expProps.put("omitNorms", false);
-    expProps.put("omitTermFreqAndPositions", false);
-    expProps.put("omitPositions", false);
-    expProps.put("storeOffsetsWithPositions", false);
-    expProps.put("tokenized", true);
-            
-    List<String> analyzerTests = new ArrayList<>();
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='charFilters']/lst[1]/str[@name='class'] = 'solr.PatternReplaceCharFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/lst[@name='tokenizer']/str[@name='class'] = 'solr.WhitespaceTokenizerFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[1]/str[@name='class'] = 'solr.WordDelimiterFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[2]/str[@name='class'] = 'solr.StopFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[3]/str[@name='class'] = 'solr.LowerCaseFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[4]/str[@name='class'] = 'solr.ASCIIFoldingFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[5]/str[@name='class'] = 'solr.KStemFilterFactory'");
-    checkFieldTypeProps(expProps, 19, analyzerTests);    
-    
-    // now add a field type that uses managed resources and a field that uses that type
-    
-    String piglatinStopWordEndpoint = "/schema/analysis/stopwords/piglatin";            
-    String piglatinSynonymEndpoint = "/schema/analysis/synonyms/piglatin";    
-    
-    // now define a new FieldType that uses the managed piglatin endpoints
-    // the managed endpoints will be autovivified as needed 
-    ftdef = "{";
-    ftdef += "  'class':'solr.TextField',";
-    ftdef += "  'analyzer':{";
-    ftdef += "    'tokenizer':{'class':'solr.StandardTokenizerFactory'},";
-    ftdef += "    'filters':[";
-    ftdef += "       {'class':'solr.ManagedStopFilterFactory','managed':'piglatin'},";
-    ftdef += "       {'class':'solr.ManagedSynonymFilterFactory','managed':'piglatin'}";
-    ftdef += "    ]";
-    ftdef += "  }";
-    ftdef += "}";
-    assertJPut("/schema/fieldtypes/piglatinFieldType", json(ftdef), "/responseHeader/status==0");
-    
-    expProps = getExpectedProps("piglatinFieldType", "solr.TextField", true, true);
-    expProps.put("autoGeneratePhraseQueries", false);
-    expProps.put("omitNorms", false);
-    expProps.put("omitTermFreqAndPositions", false);
-    expProps.put("omitPositions", false);
-    expProps.put("storeOffsetsWithPositions", false);
-    expProps.put("tokenized", true);
-            
-    analyzerTests = new ArrayList<>();
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/lst[@name='tokenizer']/str[@name='class'] = 'solr.StandardTokenizerFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[1]/str[@name='class'] = 'solr.ManagedStopFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[2]/str[@name='class'] = 'solr.ManagedSynonymFilterFactory'");
-    checkFieldTypeProps(expProps, 18, analyzerTests);
-    
-    assertJQ(piglatinSynonymEndpoint, 
-        "/synonymMappings/initArgs/ignoreCase==false",
-        "/synonymMappings/managedMap=={}");
-
-    // add some piglatin synonyms
-    Map<String,List<String>> syns = new HashMap<>();
-    syns.put("appyhay", Arrays.asList("ladgay","oyfuljay"));    
-    assertJPut(piglatinSynonymEndpoint, 
-              JSONUtil.toJSON(syns),
-              "/responseHeader/status==0");    
-    assertJQ(piglatinSynonymEndpoint, 
-            "/synonymMappings/managedMap/appyhay==['ladgay','oyfuljay']");
-    
-    // add some piglatin stopwords
-    assertJPut(piglatinStopWordEndpoint, 
-        JSONUtil.toJSON(Arrays.asList("hetay")),
-        "/responseHeader/status==0");
-   
-    assertJQ(piglatinStopWordEndpoint + "/hetay", "/hetay=='hetay'");
-    
-    // add a field that uses our new type
-    assertJPut("/schema/fields/newManagedField",
-        json("{'type':'piglatinFieldType','stored':false}"),
-        "/responseHeader/status==0");   
-    
-    assertQ("/schema/fields/newManagedField?indent=on&wt=xml",
-        "count(/response/lst[@name='field']) = 1",
-        "/response/lst[@name='responseHeader']/int[@name='status'] = '0'");
-
-    // try to delete the managed synonyms endpoint, which should fail because it is being used
-    assertJDelete(piglatinSynonymEndpoint, "/responseHeader/status==403");
-    
-    // test adding multiple field types at once
-    ftdef = "[";
-    ftdef += "{";
-    ftdef += "  'name':'textFieldType1',";
-    ftdef += "  'class':'solr.TextField','positionIncrementGap':'100',";
-    ftdef += "  'analyzer':{";
-    ftdef += "    'tokenizer':{'class':'solr.WhitespaceTokenizerFactory'},";
-    ftdef += "    'filters':[";
-    ftdef += "       {'class':'solr.WordDelimiterFilterFactory','preserveOriginal':'0'},";
-    ftdef += "       {'class':'solr.StopFilterFactory','words':'stopwords.txt','ignoreCase':'true'},";
-    ftdef += "       {'class':'solr.LowerCaseFilterFactory'}";
-    ftdef += "    ]";
-    ftdef += "  }";
-    ftdef += "},{";
-    ftdef += "  'name':'textFieldType2',";
-    ftdef += "  'class':'solr.TextField','positionIncrementGap':'100',";
-    ftdef += "  'analyzer':{";
-    ftdef += "    'tokenizer':{'class':'solr.WhitespaceTokenizerFactory'},";
-    ftdef += "    'filters':[";
-    ftdef += "       {'class':'solr.WordDelimiterFilterFactory','preserveOriginal':'0'},";
-    ftdef += "       {'class':'solr.StopFilterFactory','words':'stopwords.txt','ignoreCase':'true'},";
-    ftdef += "       {'class':'solr.LowerCaseFilterFactory'},";
-    ftdef += "       {'class':'solr.ASCIIFoldingFilterFactory'}";
-    ftdef += "    ]";
-    ftdef += "  }";
-    ftdef += "}";
-    ftdef += "]";
-  
-    assertJPost("/schema/fieldtypes", json(ftdef), "/responseHeader/status==0");
-    
-    expProps = getExpectedProps("textFieldType1", "solr.TextField", true, true);
-    expProps.put("autoGeneratePhraseQueries", false);
-    expProps.put("omitNorms", false);
-    expProps.put("omitTermFreqAndPositions", false);
-    expProps.put("omitPositions", false);
-    expProps.put("storeOffsetsWithPositions", false);
-    expProps.put("tokenized", true);
-            
-    analyzerTests = new ArrayList<>();
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/lst[@name='tokenizer']/str[@name='class'] = 'solr.WhitespaceTokenizerFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[1]/str[@name='class'] = 'solr.WordDelimiterFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[2]/str[@name='class'] = 'solr.StopFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[3]/str[@name='class'] = 'solr.LowerCaseFilterFactory'");
-    checkFieldTypeProps(expProps, 19, analyzerTests);    
-
-    expProps = getExpectedProps("textFieldType2", "solr.TextField", true, true);
-    expProps.put("autoGeneratePhraseQueries", false);
-    expProps.put("omitNorms", false);
-    expProps.put("omitTermFreqAndPositions", false);
-    expProps.put("omitPositions", false);
-    expProps.put("storeOffsetsWithPositions", false);
-    expProps.put("tokenized", true);
-            
-    analyzerTests = new ArrayList<>();
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/lst[@name='tokenizer']/str[@name='class'] = 'solr.WhitespaceTokenizerFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[1]/str[@name='class'] = 'solr.WordDelimiterFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[2]/str[@name='class'] = 'solr.StopFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[3]/str[@name='class'] = 'solr.LowerCaseFilterFactory'");
-    analyzerTests.add("/response/lst[@name='fieldType']/lst[@name='analyzer']/arr[@name='filters']/lst[4]/str[@name='class'] = 'solr.ASCIIFoldingFilterFactory'");
-    checkFieldTypeProps(expProps, 19, analyzerTests);        
-  }
-  
-  /**
-   * Helper function to check fieldType settings against a set of expected values.
-   */
-  protected void checkFieldTypeProps(Map<String,Object> expected, int expectedChildCount) {
-    checkFieldTypeProps(expected, expectedChildCount, null);
-  }
-  
-  protected void checkFieldTypeProps(Map<String,Object> expected, int expectedChildCount, List<String> addlTests) {
-    String fieldTypeName = (String)expected.get("name");
-    
-    List<String> tests = new ArrayList<>();
-    tests.add("count(/response/lst[@name='fieldType']) = 1");
-    tests.add("count(/response/lst[@name='fieldType']/*) = "+expectedChildCount);
-    tests.add("count(/response/lst[@name='fieldType']/arr[@name='fields']/*) = 0");
-    tests.add("count(/response/lst[@name='fieldType']/arr[@name='dynamicFields']/*) = 0");
-    for (Map.Entry<String,Object> next : expected.entrySet()) {
-      Object val = next.getValue();
-      String pathType = null;
-      if (val instanceof Boolean)
-        pathType = "bool";
-      else if (val instanceof String)
-        pathType = "str";
-      else
-        fail("Unexpected value type "+val.getClass().getName());
-      // NOTE: it seems like the fieldtypes endpoint only returns strings or booleans
-      
-      String xpath = 
-          "/response/lst[@name='fieldType']/"+pathType+"[@name='"+next.getKey()+"']";
-      tests.add(xpath+" = '"+val+"'");
-    }
-    
-    if (addlTests != null)
-      tests.addAll(addlTests);
-    
-    assertQ("/schema/fieldtypes/"+fieldTypeName+"?indent=on&wt=xml&showDefaults=true",
-        tests.toArray(new String[0]));
-  }
-  
-  /**
-   * Builds a map containing expected values for a field type created by this test. 
-   */
-  protected Map<String,Object> getExpectedProps(String name, String className, boolean indexed, boolean stored) {
-    Map<String,Object> map = new HashMap<>();
-    map.put("name", name);
-    map.put("class", className);
-    map.put("indexed", indexed);
-    map.put("stored", stored);      
-    map.put("docValues", false);
-    map.put("termVectors", false);
-    map.put("termPositions", false);
-    map.put("termOffsets", false);
-    map.put("omitNorms", true);
-    map.put("omitTermFreqAndPositions", true);
-    map.put("omitPositions", false);
-    map.put("storeOffsetsWithPositions", false);
-    map.put("multiValued", false);
-    map.put("tokenized", false);
-    return map;
-  }
-}