You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2012/06/15 07:41:01 UTC
svn commit: r1350465 - in /lucene/dev/branches/branch_4x/solr: ./ solrj/
solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
Author: siren
Date: Fri Jun 15 05:41:01 2012
New Revision: 1350465
URL: http://svn.apache.org/viewvc?rev=1350465&view=rev
Log:
SOLR-139 add solrj test that exercises field update and optimistic locking, merge from trunk
Modified:
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
Modified: lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java?rev=1350465&r1=1350464&r2=1350465&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java Fri Jun 15 05:41:01 2012
@@ -23,6 +23,7 @@ import java.io.StringWriter;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.List;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
@@ -525,8 +526,7 @@ abstract public class SolrExampleTests e
} else if (server instanceof ConcurrentUpdateSolrServer) {
//XXX concurrentupdatesolrserver reports errors differently
ConcurrentUpdateSolrServer cs = (ConcurrentUpdateSolrServer) server;
- Field field = cs.getClass().getDeclaredField("lastError");
- field.setAccessible(true);
+ Field field = getCUSSExceptionField(cs);
field.set(cs, null);
cs.add(doc);
cs.blockUntilFinished();
@@ -536,6 +536,14 @@ abstract public class SolrExampleTests e
log.info("Ignorig update test for client:" + server.getClass().getName());
}
}
+
+ private static Field getCUSSExceptionField(Object cs)
+ throws SecurityException, NoSuchFieldException, IllegalArgumentException,
+ IllegalAccessException {
+ Field field = cs.getClass().getDeclaredField("lastError");
+ field.setAccessible(true);
+ return field;
+ }
@Test
public void testAugmentFields() throws Exception
@@ -1177,6 +1185,71 @@ abstract public class SolrExampleTests e
}
@Test
+ public void testUpdateField() throws Exception {
+ //no versions
+ SolrServer server = getSolrServer();
+ server.deleteByQuery("*:*");
+ server.commit();
+ SolrInputDocument doc = new SolrInputDocument();
+ doc.addField("id", "unique");
+ doc.addField("name", "gadget");
+ doc.addField("price_f", 1);
+ server.add(doc);
+ server.commit();
+ SolrQuery q = new SolrQuery("*:*");
+ q.setFields("id","price_f","name", "_version_");
+ QueryResponse resp = server.query(q);
+ assertEquals("Doc count does not match", 1, resp.getResults().getNumFound());
+ Long version = (Long)resp.getResults().get(0).getFirstValue("_version_");
+ assertNotNull("no version returned", version);
+ assertEquals(1.0f, resp.getResults().get(0).getFirstValue("price_f"));
+
+ //update "price" with incorrect version (optimistic locking)
+ HashMap<String, Object> oper = new HashMap<String, Object>(); //need better api for this???
+ oper.put("set",100);
+
+ doc = new SolrInputDocument();
+ doc.addField("id", "unique");
+ doc.addField("_version_", version+1);
+ doc.addField("price_f", oper);
+ try {
+ server.add(doc);
+ if(server instanceof HttpSolrServer) { //XXX concurrent server reports exceptions differently
+ fail("Operation should throw an exception!");
+ } else {
+ server.commit(); //just to be sure the client has sent the doc
+ assertTrue("CUSS did not report an error", ((Throwable)getCUSSExceptionField(server).get(server)).getMessage().contains("Conflict"));
+ }
+ } catch (SolrException se) {
+ assertTrue("No identifiable error message", se.getMessage().contains("version conflict for unique"));
+ }
+
+ //update "price", use correct version (optimistic locking)
+ doc = new SolrInputDocument();
+ doc.addField("id", "unique");
+ doc.addField("_version_", version);
+ doc.addField("price_f", oper);
+ server.add(doc);
+ server.commit();
+ resp = server.query(q);
+ assertEquals("Doc count does not match", 1, resp.getResults().getNumFound());
+ assertEquals("price was not updated?", 100.0f, resp.getResults().get(0).getFirstValue("price_f"));
+ assertEquals("no name?", "gadget", resp.getResults().get(0).getFirstValue("name"));
+
+ //update "price", no version
+ oper.put("set", 200);
+ doc = new SolrInputDocument();
+ doc.addField("id", "unique");
+ doc.addField("price_f", oper);
+ server.add(doc);
+ server.commit();
+ resp = server.query(q);
+ assertEquals("Doc count does not match", 1, resp.getResults().getNumFound());
+ assertEquals("price was not updated?", 200.0f, resp.getResults().get(0).getFirstValue("price_f"));
+ assertEquals("no name?", "gadget", resp.getResults().get(0).getFirstValue("name"));
+ }
+
+ @Test
public void testQueryWithParams() throws SolrServerException {
SolrServer server = getSolrServer();
SolrQuery q = new SolrQuery("query");