diff --git a/solr/core/src/java/org/apache/solr/core/RequestHandlers.java b/solr/core/src/java/org/apache/solr/core/RequestHandlers.java index dca7c832e3fa..e20c05ced542 100644 --- a/solr/core/src/java/org/apache/solr/core/RequestHandlers.java +++ b/solr/core/src/java/org/apache/solr/core/RequestHandlers.java @@ -117,7 +117,8 @@ void initHandlersFromConfig(SolrConfig config) { modifiedInfos.add(applyInitParams(config, info)); } handlers.init(Collections.emptyMap(), core, modifiedInfos); - handlers.alias(handlers.getDefault(), ""); + // Curious if this is actually needed! + // handlers.alias(handlers.getDefault(), ""); if (log.isDebugEnabled()) { log.debug("Registered paths: {}", StrUtils.join(new ArrayList<>(handlers.keySet()), ',')); } diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java index c3aac28380e7..eabbbf3b7648 100644 --- a/solr/core/src/java/org/apache/solr/core/SolrCore.java +++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java @@ -3133,12 +3133,12 @@ private void initWriters() { responseWriters.init(defaultWriters, this); // configure the default response writer; this one should never be null - if (responseWriters.getDefault() == null) responseWriters.setDefault("standard"); + // if (responseWriters.getDefault() == null) responseWriters.setDefault("standard"); } - /** Finds a writer by name, or returns the default writer if not found. */ + /** Finds a writer by name, or null if not found. */ public final QueryResponseWriter getQueryResponseWriter(String writerName) { - return responseWriters.get(writerName, true); + return responseWriters.get(writerName, false); } /** diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java b/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java index 3cf12aa7982b..ab82aa5905a8 100644 --- a/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java +++ b/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java @@ -68,11 +68,11 @@ public class SolrRequestParsers { private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); // Should these constants be in a more public place? - public static final String MULTIPART = "multipart"; - public static final String FORMDATA = "formdata"; - public static final String RAW = "raw"; - public static final String SIMPLE = "simple"; - public static final String STANDARD = "standard"; + // public static final String MULTIPART = "multipart"; + // public static final String FORMDATA = "formdata"; + // public static final String RAW = "raw"; + // public static final String SIMPLE = "simple"; + // public static final String STANDARD = "standard"; private static final Charset CHARSET_US_ASCII = StandardCharsets.US_ASCII; @@ -81,7 +81,7 @@ public class SolrRequestParsers { public static final String REQUEST_TIMER_SERVLET_ATTRIBUTE = "org.apache.solr.RequestTimer"; - private final HashMap parsers = new HashMap<>(); + // private final HashMap parsers = new HashMap<>(); private StandardRequestParser standard; /** @@ -120,12 +120,12 @@ private void init(int multipartUploadLimitKB, int formUploadLimitKB) { // I don't see a need to have this publicly configured just yet // adding it is trivial - parsers.put(MULTIPART, multi); - parsers.put(FORMDATA, formdata); - parsers.put(RAW, raw); - parsers.put(SIMPLE, new SimpleRequestParser()); - parsers.put(STANDARD, standard); - parsers.put("", standard); + // parsers.put(MULTIPART, multi); + // parsers.put(FORMDATA, formdata); + // parsers.put(RAW, raw); + // parsers.put(SIMPLE, new SimpleRequestParser()); + // parsers.put(STANDARD, standard); + // parsers.put("", standard); } private static RTimerTree getRequestTimer(HttpServletRequest req) { diff --git a/solr/core/src/test/org/apache/solr/OutputWriterTest.java b/solr/core/src/test/org/apache/solr/OutputWriterTest.java index 30df9ed98fab..7aa332653ba1 100644 --- a/solr/core/src/test/org/apache/solr/OutputWriterTest.java +++ b/solr/core/src/test/org/apache/solr/OutputWriterTest.java @@ -44,7 +44,7 @@ public static void beforeClass() throws Exception { @Test public void testSOLR59responseHeaderVersions() { // default results in "new" responseHeader - lrf.args.put("wt", "standard"); + lrf.args.put("wt", "json"); assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='status'][.='0']"); lrf.args.remove("wt"); assertQ(req("foo"), "/response/lst[@name='responseHeader']/int[@name='QTime']"); diff --git a/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java b/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java index 3b7a85eb0967..cbd12f8a99b4 100644 --- a/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java +++ b/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java @@ -114,26 +114,27 @@ public void testIntrospect() throws Exception { } @Test - public void testWTParam() throws Exception { + public void testInvalidWTParamReturnsError() throws Exception { V2Request request = new V2Request.Builder("/c/" + COLL_NAME + "/get/_introspect").build(); - // TODO: If possible do this in a better way + // Using an invalid wt parameter should return a 500 error request.setResponseParser(new InputStreamResponseParser("bleh")); NamedList res = cluster.getSolrClient().request(request); String respString = InputStreamResponseParser.consumeResponseToString(res); - assertFalse(respString.contains("

HTTP ERROR 500

")); - assertFalse(respString.contains("500")); - assertFalse(respString.contains("NullPointerException")); - assertFalse( - respString.contains( - "

Problem accessing /solr/____v2/c/collection1/get/_introspect. Reason:")); - // since no-op response writer is used, doing contains match - assertTrue(respString.contains("/c/collection1/get")); + // Should get a 500 Server Error for unknown writer type + assertTrue( + "Expected error message about unknown writer type", + respString.contains("Unknown response writer type")); + assertTrue("Expected 500 error code", respString.contains("500")); + } - // no response parser + @Test + public void testWTParam() throws Exception { + // When no response parser is set, the default JSON writer should be used + V2Request request = new V2Request.Builder("/c/" + COLL_NAME + "/get/_introspect").build(); request.setResponseParser(null); Map resp = resAsMap(cluster.getSolrClient(), request); - respString = resp.toString(); + String respString = resp.toString(); assertFalse(respString.contains("

HTTP ERROR 500

")); assertFalse( diff --git a/solr/core/src/test/org/apache/solr/response/TestPrometheusResponseWriter.java b/solr/core/src/test/org/apache/solr/response/TestPrometheusResponseWriter.java index d9d2493eb3a1..63ba5a448923 100644 --- a/solr/core/src/test/org/apache/solr/response/TestPrometheusResponseWriter.java +++ b/solr/core/src/test/org/apache/solr/response/TestPrometheusResponseWriter.java @@ -195,7 +195,8 @@ public void testUnsupportedMetricsFormat() throws Exception { try (SolrClient adminClient = getHttpSolrClient(solrTestRule.getBaseUrl())) { NamedList res = adminClient.request(req); - assertEquals(400, res.get("responseStatus")); + // Unknown wt parameter should return a 500 error + assertEquals(500, res.get("responseStatus")); } } } diff --git a/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java b/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java index 7b822b18848d..8799277bddde 100644 --- a/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java +++ b/solr/core/src/test/org/apache/solr/response/TestRawResponseWriter.java @@ -44,7 +44,7 @@ public class TestRawResponseWriter extends SolrTestCaseJ4 { private static RawResponseWriter writerJsonBase; private static RawResponseWriter writerBinBase; private static RawResponseWriter writerCborBase; - private static RawResponseWriter writerNoBase; + // private static RawResponseWriter writerNoBase; private static RawResponseWriter[] allWriters; @@ -56,16 +56,14 @@ public static void setupCoreAndWriters() throws Exception { // we spin up. initCore("solrconfig.xml", "schema.xml"); - writerNoBase = newRawResponseWriter(null); /* defaults to standard writer as base */ + // writerNoBase = newRawResponseWriter(null); /* defaults to standard writer as base */ writerXmlBase = newRawResponseWriter("xml"); writerJsonBase = newRawResponseWriter("json"); writerBinBase = newRawResponseWriter("javabin"); writerCborBase = newRawResponseWriter("cbor"); allWriters = - new RawResponseWriter[] { - writerXmlBase, writerJsonBase, writerBinBase, writerCborBase, writerNoBase - }; + new RawResponseWriter[] {writerXmlBase, writerJsonBase, writerBinBase, writerCborBase}; } @AfterClass @@ -73,7 +71,7 @@ public static void cleanupWriters() { writerXmlBase = null; writerJsonBase = null; writerBinBase = null; - writerNoBase = null; + // writerNoBase = null; writerCborBase = null; allWriters = null; } @@ -120,7 +118,7 @@ public void testRawStringContentStream() throws IOException { // we should have UTF-8 Bytes if we use an OutputStream ByteArrayOutputStream bout = new ByteArrayOutputStream(); writer.write(bout, req(), rsp); - assertEquals(data, bout.toString(StandardCharsets.UTF_8.toString())); + assertEquals(data, bout.toString(StandardCharsets.UTF_8)); } } @@ -133,7 +131,7 @@ public void testStructuredDataViaBaseWriters() throws IOException { rsp.add("foo", "bar"); // check Content-Type against each writer - assertEquals("application/xml; charset=UTF-8", writerNoBase.getContentType(req(), rsp)); + // assertEquals("application/xml; charset=UTF-8", writerNoBase.getContentType(req(), rsp)); assertEquals("application/xml; charset=UTF-8", writerXmlBase.getContentType(req(), rsp)); assertEquals("application/json; charset=UTF-8", writerJsonBase.getContentType(req(), rsp)); assertEquals("application/octet-stream", writerBinBase.getContentType(req(), rsp)); @@ -153,13 +151,13 @@ public void testStructuredDataViaBaseWriters() throws IOException { assertEquals(xml, writerXmlBase.writeToString(req(), rsp)); ByteArrayOutputStream xmlBout = new ByteArrayOutputStream(); writerXmlBase.write(xmlBout, req(), rsp); - assertEquals(xml, xmlBout.toString(StandardCharsets.UTF_8.toString())); + assertEquals(xml, xmlBout.toString(StandardCharsets.UTF_8)); // - assertEquals(xml, writerNoBase.writeToString(req(), rsp)); - ByteArrayOutputStream noneBout = new ByteArrayOutputStream(); - writerNoBase.write(noneBout, req(), rsp); - assertEquals(xml, noneBout.toString(StandardCharsets.UTF_8.toString())); + // assertEquals(xml, writerNoBase.writeToString(req(), rsp)); + // ByteArrayOutputStream noneBout = new ByteArrayOutputStream(); + // writerNoBase.write(noneBout, req(), rsp); + // assertEquals(xml, noneBout.toString(StandardCharsets.UTF_8.toString())); // json String json = "{\n" + " \"content\":\"test\",\n" + " \"foo\":\"bar\"}\n"; diff --git a/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java b/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java index 29caa318a048..a933605466fc 100644 --- a/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java +++ b/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java @@ -419,6 +419,7 @@ public LocalRequestFactory() {} @SuppressWarnings({"unchecked"}) public LocalSolrQueryRequest makeRequest(String... q) { if (q.length == 1) { + args.computeIfAbsent("wt", k -> "xml"); return new LocalSolrQueryRequest( TestHarness.this.getCore(), q[0], qtype, start, limit, args); }