blob: 6823180b9d3b6da8bf8e4581c88e256a64ccea82 [file] [log] [blame]
/*
* 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.core;
import java.util.Map;
import com.codahale.metrics.Gauge;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.metrics.SolrMetricManager;
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.util.stats.MetricUtils;
import org.junit.BeforeClass;
import org.junit.Test;
public class RequestHandlersTest extends SolrTestCaseJ4 {
@BeforeClass
public static void beforeClass() throws Exception {
initCore("solrconfig.xml", "schema.xml");
}
@Test
public void testInitCount() {
String registry = h.getCore().getCoreMetricManager().getRegistryName();
SolrMetricManager manager = h.getCoreContainer().getMetricManager();
@SuppressWarnings({"unchecked"})
Gauge<Number> g = (Gauge<Number>)manager.registry(registry).getMetrics().get("QUERY./mock.initCount");
assertEquals("Incorrect init count",
1, g.getValue().intValue());
}
@Test
public void testImplicitRequestHandlers(){
SolrCore core = h.getCore();
assertNotNull(core.getRequestHandler( "/update/json"));
assertNotNull(core.getRequestHandler( "/update/json/docs"));
assertNotNull(core.getRequestHandler( "/update/csv"));
}
@Test
public void testLazyLoading() {
SolrCore core = h.getCore();
PluginBag.PluginHolder<SolrRequestHandler> handler = core.getRequestHandlers().getRegistry().get("/lazy");
assertFalse(handler.isLoaded());
assertU(adoc("id", "42",
"name", "Zapp Brannigan"));
assertU(adoc("id", "43",
"title", "Democratic Order of Planets"));
assertU(adoc("id", "44",
"name", "The Zapper"));
assertU(adoc("id", "45",
"title", "25 star General"));
assertU(adoc("id", "46",
"subject", "Defeated the pacifists of the Gandhi nebula"));
assertU(adoc("id", "47",
"text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
assertU(commit());
assertQ("lazy request handler returns all matches",
req("q","id:[42 TO 47]"),
"*[count(//doc)=6]");
// But it should behave just like the 'defaults' request handler above
assertQ("lazy handler returns fewer matches",
req("q", "id:[42 TO 47]", "qt","/lazy"),
"*[count(//doc)=4]"
);
assertQ("lazy handler includes highlighting",
req("q", "name:Zapp OR title:General", "qt","/lazy"),
"//lst[@name='highlighting']"
);
}
@Test
public void testPathNormalization()
{
SolrCore core = h.getCore();
SolrRequestHandler h1 = core.getRequestHandler("/update" );
assertNotNull( h1 );
SolrRequestHandler h2 = core.getRequestHandler("/update/" );
assertNotNull( h2 );
assertEquals( h1, h2 ); // the same object
assertNull( core.getRequestHandler("/update/asdgadsgas" ) ); // prefix
}
@Test
public void testStatistics() {
SolrCore core = h.getCore();
SolrRequestHandler updateHandler = core.getRequestHandler("/update");
SolrRequestHandler termHandler = core.getRequestHandler("/terms");
assertU(adoc("id", "47",
"text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
assertU(commit());
Map<String,Object> updateStats = MetricUtils.convertMetrics(updateHandler.getMetricRegistry(), updateHandler.getMetricNames());
Map<String,Object> termStats = MetricUtils.convertMetrics(termHandler.getMetricRegistry(), termHandler.getMetricNames());
Long updateTime = (Long) updateStats.get("UPDATE./update.totalTime");
Long termTime = (Long) termStats.get("QUERY./terms.totalTime");
assertFalse("RequestHandlers should not share statistics!", updateTime.equals(termTime));
}
}