package com.constellio.data.dao.services.solr;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.HashMap;
import java.util.Map;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.junit.Test;
import com.constellio.sdk.tests.ConstellioTest;
public class QueuedSolrClientAcceptanceTest extends ConstellioTest {
static Map<String, Object> incBy1 = new HashMap<>();
static {
incBy1.put("inc", "1.0");
}
@Test
public void whenPushingLotsOfDocumentsUsingMultipleThreadsThenAllSaved()
throws Exception {
//TODO AFTER-TEST-VALIDATION-SEQ
givenDisabledAfterTestValidations();
Map<String, Object> map = new HashMap<>();
map.put("inc", "1.0");
SolrClient solrClient = getDataLayerFactory().getRecordsVaultServer().getNestedSolrServer();
QueuedSolrClient client = QueuedSolrClient.createAndStart(solrClient, 100, 5);
System.out.println("Adding documents...");
for (int i = 1; i <= 10000; i++) {
if (i % 2000 == 0) {
System.out.println("Adding - " + i);
}
SolrInputDocument solrInputDocument = new SolrInputDocument();
solrInputDocument.setField("id", "doc" + i);
solrInputDocument.setField("value_s", "test" + i);
solrInputDocument.setField("count_d", "0.0");
client.addAsync(solrInputDocument);
}
System.out.println("Updating documents...");
for (int i = 1; i <= 10000; i++) {
SolrInputDocument solrInputDocument = new SolrInputDocument();
solrInputDocument.setField("id", "doc" + i);
solrInputDocument.setField("_version_", "1");
solrInputDocument.setField("count_d", incBy1);
client.addAsync(solrInputDocument);
solrInputDocument = new SolrInputDocument();
solrInputDocument.setField("id", "doc" + i);
solrInputDocument.setField("_version_", "1");
solrInputDocument.setField("count_d", incBy1);
client.addAsync(solrInputDocument);
}
client.close();
for (int i = 1; i <= 10000; i++) {
if ((i + 1) % 250 == 0) {
System.out.println("Validating - " + (i + 1) + "/10000");
}
SolrDocument solrDocument = solrClient.query(byId("doc" + i)).getResults().get(0);
assertThat(solrDocument.getFieldValue("count_d")).isEqualTo(2.0);
assertThat(solrDocument.getFieldValue("value_s")).isEqualTo("test" + i);
}
}
private SolrParams byId(String id) {
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("q", "id:" + id);
return params;
}
}