package com.plugtree.solrmeter.statistic; import java.net.MalformedURLException; import java.util.Map; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.common.util.NamedList; import com.plugtree.solrmeter.BaseTestCase; import com.plugtree.solrmeter.mock.SolrServerMock; import com.plugtree.solrmeter.model.exception.StatisticConnectionException; import com.plugtree.solrmeter.model.statistic.CacheData; import com.plugtree.solrmeter.model.statistic.RequestHandlerConnection; public class RequestHandlerConnectionTestCase extends BaseTestCase { public void testConnectionData() throws MalformedURLException, StatisticConnectionException { SolrServer solrServer = this.createMockSolrServer(); RequestHandlerConnection connection = new RequestHandlerConnection(solrServer); Map<String, CacheData> data = connection.getData(); CacheData filterQueryData = connection.getFilterCacheData(data); assertEquals((long)10, filterQueryData.getLookups()); assertEquals((long)5, filterQueryData.getHits()); assertEquals((float)0.50, filterQueryData.getHitratio()); assertEquals((long)0, filterQueryData.getEvictions()); assertEquals((long)10, filterQueryData.getInserts()); assertEquals((long)50, filterQueryData.getSize()); } public void testAllCachesPresent() throws MalformedURLException, StatisticConnectionException { SolrServer solrServer = this.createMockSolrServer(); RequestHandlerConnection connection = new RequestHandlerConnection(solrServer); Map<String, CacheData> data = connection.getData(); assertNotNull(connection.getFilterCacheData(data)); assertNotNull(connection.getDocumentCacheData(data)); assertNotNull(connection.getFieldValueCacheData(data)); assertNotNull(connection.getQueryResultCacheData(data)); assertNotNull(connection.getCumulativeFilterCacheData(data)); assertNotNull(connection.getCumulativeDocumentCacheData(data)); assertNotNull(connection.getCumulativeFieldValueCacheData(data)); assertNotNull(connection.getCumulativeQueryResultCacheData(data)); } /* * <long name="cumulative_lookups">100</long> * <long name="cumulative_hits">50</long> * <str name="cumulative_hitratio">0.50</str> * <long name="cumulative_inserts">100</long> * <long name="cumulative_evictions">0</long> */ public void testCumulativeData() throws MalformedURLException, StatisticConnectionException { SolrServer solrServer = this.createMockSolrServer(); RequestHandlerConnection connection = new RequestHandlerConnection(solrServer); Map<String, CacheData> data = connection.getData(); CacheData filterQueryData = connection.getCumulativeFilterCacheData(data); assertEquals((long)100, filterQueryData.getLookups()); assertEquals((long)50, filterQueryData.getHits()); assertEquals((float)0.50, filterQueryData.getHitratio()); assertEquals((long)0, filterQueryData.getEvictions()); assertEquals((long)100, filterQueryData.getInserts()); assertEquals((long)-1, filterQueryData.getSize()); assertEquals((long)-1, filterQueryData.getWarmupTime()); } private SolrServer createMockSolrServer() throws MalformedURLException { return this.createMockSolrServer("queryResultCache", "fieldCache", "documentCache", "fieldValueCache", "filterCache"); } private SolrServer createMockSolrServer(String... caches) throws MalformedURLException { SolrServerMock mock = new SolrServerMock(); mock.setResponseToRequest("/admin/mbeans", this.createMBeansNamedList(caches)); return mock; } private NamedList<Object> createMBeansNamedList(String... caches) { NamedList<Object> namedList = new NamedList<Object>(); namedList.add("solr-mbeans", this.createMainCacheNamedList(caches)); return namedList; } private NamedList<Object> createMainCacheNamedList(String... caches) { NamedList<Object> namedList = new NamedList<Object>(); namedList.add("CACHE", this.createCachesNamedList(caches)); return namedList; } private NamedList<Object> createCachesNamedList(String... caches) { NamedList<Object> namedList = new NamedList<Object>(); for(String cache:caches) { namedList.add(cache, this.createCacheNamedList()); } return namedList; } /* * <str name="class">org.apache.solr.search.FastLRUCache</str> * <str name="version">1.0</str> * − * <str name="description"> * Concurrent LRU Cache(maxSize=512, initialSize=512, minSize=460, acceptableSize=486, cleanupThread=false) * </str> * − * <str name="srcId"> * $Id: FastLRUCache.java 938708 2010-04-27 22:40:55Z hossman $ * </str> * − * <str name="src"> * $URL: http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/search/FastLRUCache.java $ * </str> */ private NamedList<Object> createCacheNamedList() { NamedList<Object> namedList = new NamedList<Object>(); namedList.add("class", "org.apache.solr.search.FastLRUCache"); namedList.add("version", "1.0"); namedList.add("description", "Concurrent LRU Cache(maxSize=512, initialSize=512, minSize=460, acceptableSize=486, cleanupThread=false)"); namedList.add("srcId", "$URL: http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/search/FastLRUCache.java $"); namedList.add("src", "$URL: http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/src/java/org/apache/solr/search/FastLRUCache.java $"); namedList.add("stats", this.createStatsNamedList()); return namedList ; } /* * <lst name="stats"> * <long name="lookups">10</long> * <long name="hits">5</long> * <str name="hitratio">0.50</str> * <long name="inserts">10</long> * <long name="evictions">0</long> * <long name="size">50</long> * <long name="warmupTime">15</long> * <long name="cumulative_lookups">100</long> * <long name="cumulative_hits">50</long> * <str name="cumulative_hitratio">0.50</str> * <long name="cumulative_inserts">100</long> * <long name="cumulative_evictions">0</long> * </lst> */ private NamedList<Object> createStatsNamedList() { NamedList<Object> namedList = new NamedList<Object>(); namedList.add("lookups", new Long(10)); namedList.add("hits", new Long(5)); namedList.add("hitratio", new Float(0.50)); namedList.add("inserts", new Long(10)); namedList.add("evictions", new Long(0)); namedList.add("size", new Long(50)); namedList.add("warmupTime", new Long(15)); namedList.add("cumulative_lookups", new Long(100)); namedList.add("cumulative_hits", new Long(50)); namedList.add("cumulative_hitratio", new Float(0.50)); namedList.add("cumulative_inserts", new Long(100)); namedList.add("cumulative_evictions", new Long(0)); return namedList; } public void testMissingCaches() throws MalformedURLException, StatisticConnectionException { SolrServer solrServer = this.createMockSolrServer("filterCache"); RequestHandlerConnection connection = new RequestHandlerConnection(solrServer); Map<String, CacheData> data = connection.getData(); assertNotNull(connection.getFilterCacheData(data)); assertNull(connection.getDocumentCacheData(data)); assertNull(connection.getFieldValueCacheData(data)); assertNull(connection.getQueryResultCacheData(data)); assertNotNull(connection.getCumulativeFilterCacheData(data)); assertNull(connection.getCumulativeDocumentCacheData(data)); assertNull(connection.getCumulativeFieldValueCacheData(data)); assertNull(connection.getCumulativeQueryResultCacheData(data)); } }