' SolrCoreState已经关闭'使用EmbeddedSolrServer v 5.2.1进行单元测试

时间:2015-08-17 14:12:53

标签: java solr integration-testing

我试图从我们的生产服务器中读取包含实际数据的7-8个xml数据文件。然后我想将这些数据读入EmbeddedSolrServer以测试我们的自定义日期搜索的边缘情况。 EmbeddedSolrServer的使用纯粹是为了将数据测试与可能随时间变化的任何环境分开。

我还想避免编写管道代码来从xml导入每个字段,因为我已经有了工作DIH。

使用EmbeddedSolrServer设置集成测试我收到错误:
ERROR o.a.s.h.dataimport.DataImporter - 完全导入失败:java.lang.RuntimeException:org.apache.solr.common.SolrException:SolrCoreState已关闭

设置集成测试的代码是:

public class SolrEmbeddedSearchTest extends AbstractSolrTestCase {

static {
    System.setProperty("solr.allow.unsafe.resourceloading", "true");
    ClassLoader loader = SolrEmbeddedSearchTest.class.getClassLoader();
    loader.setPackageAssertionStatus("org.apache.solr", true);
    loader.setPackageAssertionStatus("org.apache.lucene", true);
}

private SolrClient server;
private final String SolrProjectPath = "\\src\\test\\resources\\solr-5.2.1\\server\\solr\\nmdc";
private final String userDir = System.getProperty("user.dir") +  SolrProjectPath;

@Override
public String getSolrHome() {
    return userDir;
}

@Before
@Override
public void setUp() throws Exception {
    super.setUp();

    initCore("solrconfig.xml", "schema.xml", userDir, "collection1");
    server = new EmbeddedSolrServer(h.getCoreContainer(), h.getCore().getName());

    SolrQuery qry = new SolrQuery();
    qry.setRequestHandler("/dataimport2");
    qry.setParam("command", "full-import");
    qry.setParam("clean", false);        
    server.query(qry);
}

@Test
public void testThatResultsAreReturned() throws Exception {

    SolrParams params = new SolrQuery("Entry_ID:imr_1423");
    QueryResponse response = server.query(params);
    assertEquals(1L, response.getResults().getNumFound());
    assertEquals("1", response.getResults().get(0).get("Entry_ID"));
}
}

public class SolrEmbeddedSearchTest extends AbstractSolrTestCase { static { System.setProperty("solr.allow.unsafe.resourceloading", "true"); ClassLoader loader = SolrEmbeddedSearchTest.class.getClassLoader(); loader.setPackageAssertionStatus("org.apache.solr", true); loader.setPackageAssertionStatus("org.apache.lucene", true); } private SolrClient server; private final String SolrProjectPath = "\\src\\test\\resources\\solr-5.2.1\\server\\solr\\nmdc"; private final String userDir = System.getProperty("user.dir") + SolrProjectPath; @Override public String getSolrHome() { return userDir; } @Before @Override public void setUp() throws Exception { super.setUp(); initCore("solrconfig.xml", "schema.xml", userDir, "collection1"); server = new EmbeddedSolrServer(h.getCoreContainer(), h.getCore().getName()); SolrQuery qry = new SolrQuery(); qry.setRequestHandler("/dataimport2"); qry.setParam("command", "full-import"); qry.setParam("clean", false); server.query(qry); } @Test public void testThatResultsAreReturned() throws Exception { SolrParams params = new SolrQuery("Entry_ID:imr_1423"); QueryResponse response = server.query(params); assertEquals(1L, response.getResults().getNumFound()); assertEquals("1", response.getResults().get(0).get("Entry_ID")); } }

当运行导致此堆栈跟踪时:

以下是完整的堆栈跟踪:https://gist.github.com/emoen/f6c2f80b7ba09a59fa6b - 异常从第683行开始。

Schema.xml,solrconfig.xml和dih-config.xml已从可运行的独立Solr 5.2.1实例中复制。

为什么SolrCoreState在安装完成之前关闭,并且使用handler处理器导入数据:/ dataimport2?

使用EmbeddedSolr进行dataimport的最佳方法是什么?我尝试了这里建议的方法:Embedded Solr DIH但是在发送http请求之前,solr已关闭。

调试代码 - 它看起来像这条线 DEBUG o.a.s.u.processor.LogUpdateProcessor - PRE_UPDATE add{,id=imr_1423} {qt=/dataimport2&expandMacros=false&config=dih-config.xml&command=full-import} 15:40:38.713 [Thread-2] WARN o.a.s.handler.dataimport.SolrWriter - Error creating document : SolrInputDocument(fields: [Entry_Title=...]) org.apache.solr.common.SolrException: SolrCoreState already closed 初始化核心两次。

在solrconfig.xml中,我使用
initCore("solrconfig.xml", "schema.xml", userDir, "collection1");

定义dataDir

当读取solrconfig.xml时,日志会选择它:
<dataDir>F:\prosjekt3\nmdc\source\central-api\src\test\resources\solr-5.2.1\server\solr\configsets\nmdc\data</dataDir>

但是在日志中,它正在使用另一个dataDir:

DEBUG org.apache.solr.core.Config - solrconfig.xml dataDir=F:\prosjekt3\nmdc\source\central-api\src\test\resources\solr-5.2.1\server\solr\nmdc\collection1\data

它开始加载jar文件,第二次读取solrconfig.xml和schema.xml。

0 个答案:

没有答案