public static Map testForResponseElement( RestTestHarness harness, String testServerBaseUrl, String uri, CloudSolrClient cloudSolrClient, List<String> jsonPath, Object expected, long maxTimeoutSeconds) throws Exception { boolean success = false; long startTime = System.nanoTime(); Map m = null; while (TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutSeconds) { try { m = testServerBaseUrl == null ? getRespMap(uri, harness) : TestSolrConfigHandlerConcurrent.getAsMap( testServerBaseUrl + uri, cloudSolrClient); } catch (Exception e) { Thread.sleep(100); continue; } if (Objects.equals(expected, Utils.getObjectByPath(m, false, jsonPath))) { success = true; break; } Thread.sleep(100); } assertTrue( StrUtils.formatString( "Could not get expected value ''{0}'' for path ''{1}'' full output: {2}, from server: {3}", expected, StrUtils.join(jsonPath, '/'), getAsString(m), testServerBaseUrl), success); return m; }
public static void reqhandlertests( RestTestHarness writeHarness, String testServerBaseUrl, CloudSolrClient cloudSolrClient) throws Exception { String payload = "{\n" + "'create-requesthandler' : { 'name' : '/x', 'class': 'org.apache.solr.handler.DumpRequestHandler' , 'startup' : 'lazy'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config/overlay?wt=json", cloudSolrClient, Arrays.asList("overlay", "requestHandler", "/x", "startup"), "lazy", 10); payload = "{\n" + "'update-requesthandler' : { 'name' : '/x', 'class': 'org.apache.solr.handler.DumpRequestHandler' , 'startup' : 'lazy' , 'a':'b' , 'defaults': {'def_a':'def A val', 'multival':['a','b','c']}}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config/overlay?wt=json", cloudSolrClient, Arrays.asList("overlay", "requestHandler", "/x", "a"), "b", 10); payload = "{\n" + "'update-requesthandler' : { 'name' : '/dump', " + "'initParams': 'a'," + "'class': 'org.apache.solr.handler.DumpRequestHandler' ," + " 'defaults': {'a':'A','b':'B','c':'C'}}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config/overlay?wt=json", cloudSolrClient, Arrays.asList("overlay", "requestHandler", "/dump", "defaults", "c"), "C", 10); testForResponseElement( writeHarness, testServerBaseUrl, "/x?wt=json&getdefaults=true&json.nl=map", cloudSolrClient, Arrays.asList("getdefaults", "def_a"), "def A val", 10); testForResponseElement( writeHarness, testServerBaseUrl, "/x?wt=json¶m=multival&json.nl=map", cloudSolrClient, Arrays.asList("params", "multival"), Arrays.asList("a", "b", "c"), 10); payload = "{\n" + "'delete-requesthandler' : '/x'" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); boolean success = false; long startTime = System.nanoTime(); int maxTimeoutSeconds = 10; while (TimeUnit.SECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS) < maxTimeoutSeconds) { String uri = "/config/overlay?wt=json"; Map m = testServerBaseUrl == null ? getRespMap(uri, writeHarness) : TestSolrConfigHandlerConcurrent.getAsMap(testServerBaseUrl + uri, cloudSolrClient); if (null == Utils.getObjectByPath( m, true, Arrays.asList("overlay", "requestHandler", "/x", "a"))) { success = true; break; } Thread.sleep(100); } assertTrue("Could not delete requestHandler ", success); payload = "{\n" + "'create-queryconverter' : { 'name' : 'qc', 'class': 'org.apache.solr.spelling.SpellingQueryConverter'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "queryConverter", "qc", "class"), "org.apache.solr.spelling.SpellingQueryConverter", 10); payload = "{\n" + "'update-queryconverter' : { 'name' : 'qc', 'class': 'org.apache.solr.spelling.SuggestQueryConverter'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "queryConverter", "qc", "class"), "org.apache.solr.spelling.SuggestQueryConverter", 10); payload = "{\n" + "'delete-queryconverter' : 'qc'" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "queryConverter", "qc"), null, 10); payload = "{\n" + "'create-searchcomponent' : { 'name' : 'tc', 'class': 'org.apache.solr.handler.component.TermsComponent'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "searchComponent", "tc", "class"), "org.apache.solr.handler.component.TermsComponent", 10); payload = "{\n" + "'update-searchcomponent' : { 'name' : 'tc', 'class': 'org.apache.solr.handler.component.TermVectorComponent' }\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "searchComponent", "tc", "class"), "org.apache.solr.handler.component.TermVectorComponent", 10); payload = "{\n" + "'delete-searchcomponent' : 'tc'" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "searchComponent", "tc"), null, 10); // <valueSourceParser name="countUsage" // class="org.apache.solr.core.CountUsageValueSourceParser"/> payload = "{\n" + "'create-valuesourceparser' : { 'name' : 'cu', 'class': 'org.apache.solr.core.CountUsageValueSourceParser'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "valueSourceParser", "cu", "class"), "org.apache.solr.core.CountUsageValueSourceParser", 10); // <valueSourceParser name="nvl" class="org.apache.solr.search.function.NvlValueSourceParser"> // <float name="nvlFloatValue">0.0</float> // </valueSourceParser> payload = "{\n" + "'update-valuesourceparser' : { 'name' : 'cu', 'class': 'org.apache.solr.search.function.NvlValueSourceParser'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "valueSourceParser", "cu", "class"), "org.apache.solr.search.function.NvlValueSourceParser", 10); payload = "{\n" + "'delete-valuesourceparser' : 'cu'" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "valueSourceParser", "cu"), null, 10); // <transformer name="mytrans2" // class="org.apache.solr.response.transform.ValueAugmenterFactory" > // <int name="value">5</int> // </transformer> payload = "{\n" + "'create-transformer' : { 'name' : 'mytrans', 'class': 'org.apache.solr.response.transform.ValueAugmenterFactory', 'value':'5'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "transformer", "mytrans", "class"), "org.apache.solr.response.transform.ValueAugmenterFactory", 10); payload = "{\n" + "'update-transformer' : { 'name' : 'mytrans', 'class': 'org.apache.solr.response.transform.ValueAugmenterFactory', 'value':'6'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "transformer", "mytrans", "value"), "6", 10); payload = "{\n" + "'delete-transformer' : 'mytrans'," + "'create-initparams' : { 'name' : 'hello', 'key':'val'}\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); Map map = testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "transformer", "mytrans"), null, 10); List l = (List) Utils.getObjectByPath(map, false, Arrays.asList("config", "initParams")); assertNotNull("no object /config/initParams : " + TestBlobHandler.getAsString(map), l); assertEquals(1, l.size()); assertEquals("val", ((Map) l.get(0)).get("key")); payload = "{\n" + " 'add-searchcomponent': {\n" + " 'name': 'myspellcheck',\n" + " 'class': 'solr.SpellCheckComponent',\n" + " 'queryAnalyzerFieldType': 'text_general',\n" + " 'spellchecker': {\n" + " 'name': 'default',\n" + " 'field': '_text_',\n" + " 'class': 'solr.DirectSolrSpellChecker'\n" + " }\n" + " }\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); map = testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "searchComponent", "myspellcheck", "spellchecker", "class"), "solr.DirectSolrSpellChecker", 10); payload = "{\n" + " 'add-requesthandler': {\n" + " name : '/dump100',\n" + " class : 'org.apache.solr.handler.DumpRequestHandler'," + " suggester: [{name: s1,lookupImpl: FuzzyLookupFactory, dictionaryImpl : DocumentDictionaryFactory}," + " {name: s2,lookupImpl: FuzzyLookupFactory , dictionaryImpl : DocumentExpressionDictionaryFactory}]" + " }\n" + "}"; runConfigCommand(writeHarness, "/config?wt=json", payload); map = testForResponseElement( writeHarness, testServerBaseUrl, "/config?wt=json", cloudSolrClient, Arrays.asList("config", "requestHandler", "/dump100", "class"), "org.apache.solr.handler.DumpRequestHandler", 10); map = getRespMap("/dump100?wt=json&json.nl=arrmap&initArgs=true", writeHarness); List initArgs = (List) map.get("initArgs"); assertEquals(2, initArgs.size()); assertTrue(((Map) initArgs.get(0)).containsKey("suggester")); assertTrue(((Map) initArgs.get(1)).containsKey("suggester")); System.out.println(map); }