package org.icij.extract.solr; import org.icij.extract.test.*; import java.util.Map; import java.util.HashMap; import java.io.IOException; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.junit.Test; import org.junit.Assert; import org.junit.After; public class SolrCopyMachineTest extends SolrJettyTestBase { @After public void tearDown() throws Exception { client.deleteByQuery("*:*"); client.commit(true, true); client.optimize(true, true); } private SolrInputDocument createDocument(final int id, final int fields) { final SolrInputDocument input = new SolrInputDocument(); for (int i = 0; i < fields; i++) { input.setField("id", id); input.setField("metadata_bad_trie_test", "ERROR:SCHEMA-INDEX-MISMATCH,stringValue=123"); input.setField("metadata_setA_" + i, "value " + i); } return input; } @Test public void testCopy() throws IOException, SolrServerException, InterruptedException { final Map<String, String> map = new HashMap<>(); final SolrMachineConsumer consumer = new SolrCopyConsumer(client, map); final SolrMachineProducer producer = new SolrMachineProducer(client, map.keySet()); final SolrMachine machine = new SolrMachine(consumer, producer); final int documents = 10; final int fields = 10; for (int i = 0; i < documents; i++) { SolrInputDocument input = createDocument(i, fields); client.add(input); } client.commit(); map.put("metadata_bad_trie_test", "metadata_bad_trie_test"); for (int i = 0; i < fields; i++) { map.put("metadata_setA_" + i, "metadata_setB_" + i); } Assert.assertEquals(documents, (Object) machine.call()); machine.terminate(); client.commit(); final SolrDocumentList results = client.query(new SolrQuery("*:*")) .getResults(); Assert.assertEquals(documents, results.size()); // Test that each document was added. for (int i = 0; i < documents; i++) { String id = Integer.toString(i); boolean found = false; for (SolrDocument document : results) { if (id.equals(document.getFieldValue("id"))) { found = true; break; } } Assert.assertTrue(found); } // Test that in each document added, all the fields were copied. for (SolrDocument document : results) { // Test that the bad field was fixed. Assert.assertEquals("123", document.getFieldValue("metadata_bad_trie_test")); for (int i = 0; i < fields; i++) { Assert.assertEquals("value " + i, document.getFieldValue("metadata_setA_" + i)); Assert.assertEquals("value " + i, document.getFieldValue("metadata_setB_" + i)); } } } }