package com.constellio.data.dao.services.records; import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.ModifiableSolrParams; public class ConnectionTest { private CloudSolrClient server, otherServer; /** * -- NOT RUN BY INTEGRATION SERVER -- * This test is for troubleshooting purposes only */ public void test() throws IOException, SolrServerException { server = new CloudSolrClient("192.168.1.100:2381"); server.setDefaultCollection("records"); otherServer = new CloudSolrClient("192.168.1.100:2381"); otherServer.setDefaultCollection("records"); server.deleteByQuery("*:*"); server.commit(); assertThat(query("id:test1")).isEmpty(); SolrInputDocument doc1 = new SolrInputDocument(); doc1.setField("id", "test1"); doc1.setField("title_s", "title1"); doc1.setField("_version_", "-1"); doc1.setField("keywords_ss", Arrays.asList("keyword1", "keyword2")); server.add(doc1); SolrInputDocument doc2 = new SolrInputDocument(); doc2.setField("id", "test2"); doc2.setField("title_s", "title2"); doc2.setField("_version_", "-1"); doc2.setField("keywords_ss", Arrays.asList("keyword1", "keyword2")); server.add(doc2); server.commit(); List<SolrDocument> docs = query("id:test*"); assertThat(docs).hasSize(2); assertThat(getDoc1().getFieldValue("id")).isEqualTo("test1"); assertThat(getDoc1().getFieldValue("title_s")).isEqualTo("title1"); assertThat(getDoc1().getFieldValue("keywords_ss")).isEqualTo(Arrays.asList("keyword1", "keyword2")); assertThat((Long) getDoc1().getFieldValue("_version_")).isGreaterThan(1); Long version = (Long) getDoc1().getFieldValue("_version_"); SolrInputDocument updateDocument1v = new SolrInputDocument(); updateDocument1v.setField("id", "test1"); updateDocument1v.setField("bob_s", atomicSet("z")); updateDocument1v.setField("_version_", version); SolrInputDocument updateDocument2v = new SolrInputDocument(); updateDocument2v.setField("id", "test2"); updateDocument2v.setField("bob_s", atomicSet("z")); updateDocument2v.setField("_version_", 42); SolrInputDocument updateDocument1 = new SolrInputDocument(); updateDocument1.setField("id", "test1"); updateDocument1.setField("title_s", atomicSet("theNewTitle")); SolrInputDocument updateDocument2 = new SolrInputDocument(); updateDocument2.setField("id", "test2"); updateDocument2.setField("title_s", atomicSet("theNewTitle")); tryAdd(Arrays.asList(updateDocument1v, updateDocument2v), Arrays.asList(updateDocument1, updateDocument2)); //server.softCommit(); otherServer.commit(); server.rollback(); server.commit(); assertThat(getDoc1().getFieldValue("title_s")).isEqualTo("title1"); assertThat(getDoc2().getFieldValue("title_s")).isEqualTo("title2"); } private SolrDocument getDoc1() throws SolrServerException, IOException { return query("id:test1").get(0); } private SolrDocument getDoc2() throws SolrServerException, IOException { return query("id:test2").get(0); } private void tryAdd(List<SolrInputDocument> optimisticLockingValidations, List<SolrInputDocument> changes) { try { server.add(optimisticLockingValidations); server.add(changes); } catch (Exception e) { } } private List<SolrDocument> query(String q) throws SolrServerException, IOException { ModifiableSolrParams solrParams = new ModifiableSolrParams(); solrParams.set("q", q); return server.query(solrParams).getResults(); } private Map<String, Object> atomicSet(Object newValue) { Map<String, Object> atomicValueMap = new HashMap<>(); atomicValueMap.put("set", newValue); return atomicValueMap; } }