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");