1
0
Эх сурвалжийг харах

[TESTS] Added percolator rest tests.

Martijn van Groningen 11 жил өмнө
parent
commit
efebb8d515

+ 41 - 0
rest-api-spec/test/mpercolate/10_basic.yaml

@@ -0,0 +1,41 @@
+---
+"Basic multi-percolate":
+  - do:
+      index:
+        index:  percolator_index
+        type:   my_type
+        id:     1
+        body:   {foo: bar}
+
+  - do:
+      index:
+        index: percolator_index
+        type: .percolator
+        id:   test_percolator
+        body:
+          query:
+            match_all: {}
+
+  - do:
+      mpercolate:
+        body:
+          - percolate:
+              index:  percolator_index
+              type:   my_type
+          - doc:
+              foo: bar
+          - percolate:
+              index:  percolator_index1
+              type:   my_type
+          - doc:
+              foo: bar
+          - percolate:
+              index:  percolator_index
+              type:   my_type
+              id:     1
+          - doc:
+              foo: bar
+
+  - match:  { responses.0.total:     1  }
+  - match:  { responses.1.error: "IndexMissingException[[percolator_index1] missing]"  }
+  - match:  { responses.2.total:     1  }

+ 12 - 0
rest-api-spec/test/percolate/15_new.yaml

@@ -25,4 +25,16 @@
           doc:
             foo: bar
 
+  - match: {'total': 1}
   - match: {'matches': [{_index: test_index, _id: test_percolator}]}
+
+  - do:
+      count_percolate:
+        index: test_index
+        type:  test_type
+        body:
+          doc:
+            foo: bar
+
+  - is_false:  matches
+  - match: {'total': 1}

+ 86 - 0
rest-api-spec/test/percolate/16_existing_doc.yaml

@@ -0,0 +1,86 @@
+---
+"Percolate existing documents":
+
+  - do:
+      indices.create:
+        index: percolator_index
+
+  - do:
+      index:
+        index: percolator_index
+        type: .percolator
+        id:   test_percolator
+        body:
+          query:
+            match_all: {}
+
+  - do:
+      index:
+        index:  percolator_index
+        type:   test_type
+        id:     1
+        body:
+          foo: bar
+
+  - do:
+      indices.create:
+        index: my_index
+
+  - do:
+      index:
+        index:  my_index
+        type:   my_type
+        id:     1
+        body:
+          foo: bar
+
+  - do:
+      indices.refresh: {}
+
+  - do:
+      percolate:
+        index: percolator_index
+        type:  test_type
+        id: 1
+
+  - match: {'matches': [{_index: percolator_index, _id: test_percolator}]}
+
+  - do:
+      percolate:
+        index: my_index
+        type: my_type
+        id: 1
+        percolate_index: percolator_index
+        percolate_type: test_type
+
+  - match: {'matches': [{_index: percolator_index, _id: test_percolator}]}
+
+
+  - do:
+      index:
+        index:  my_index
+        type:   my_type
+        id:     1
+        body:
+          foo: bar
+
+  - do:
+      percolate:
+        index: my_index
+        type: my_type
+        id: 1
+        version: 2
+        percolate_index: percolator_index
+        percolate_type: test_type
+
+  - match: {'matches': [{_index: percolator_index, _id: test_percolator}]}
+
+  - do:
+      catch:        conflict
+      percolate:
+        index: my_index
+        type: my_type
+        id: 1
+        version: 1
+        percolate_index: percolator_index
+        percolate_type: test_type

+ 10 - 1
src/main/java/org/elasticsearch/action/percolate/TransportMultiPercolateAction.java

@@ -36,6 +36,7 @@ import org.elasticsearch.common.settings.Settings;
 import org.elasticsearch.common.util.concurrent.AtomicArray;
 import org.elasticsearch.index.engine.DocumentMissingException;
 import org.elasticsearch.index.shard.ShardId;
+import org.elasticsearch.indices.IndexMissingException;
 import org.elasticsearch.percolator.PercolatorService;
 import org.elasticsearch.threadpool.ThreadPool;
 import org.elasticsearch.transport.BaseTransportRequestHandler;
@@ -163,7 +164,15 @@ public class TransportMultiPercolateAction extends TransportAction<MultiPercolat
                 assert element != null;
                 if (element instanceof PercolateRequest) {
                     PercolateRequest percolateRequest = (PercolateRequest) element;
-                    String[] concreteIndices = clusterState.metaData().concreteIndices(percolateRequest.indices(), percolateRequest.indicesOptions());
+                    String[] concreteIndices;
+                    try {
+                         concreteIndices = clusterState.metaData().concreteIndices(percolateRequest.indices(), percolateRequest.indicesOptions());
+                    } catch (IndexMissingException e) {
+                        reducedResponses.set(slot, e);
+                        responsesByItemAndShard.set(slot, new AtomicReferenceArray(0));
+                        expectedOperationsPerItem.set(slot, new AtomicInteger(0));
+                        continue;
+                    }
                     Map<String, Set<String>> routing = clusterState.metaData().resolveSearchRouting(percolateRequest.routing(), percolateRequest.indices());
                     // TODO: I only need shardIds, ShardIterator(ShardRouting) is only needed in TransportShardMultiPercolateAction
                     GroupShardsIterator shards = clusterService.operationRouting().searchShards(

+ 2 - 2
src/test/java/org/elasticsearch/indices/IndicesOptionsTests.java

@@ -92,7 +92,7 @@ public class IndicesOptionsTests extends ElasticsearchIntegrationTest {
         verify(typesExists("test1", "test2"), true);
         verify(deleteByQuery("test1", "test2"), true);
         verify(percolate("test1", "test2"), true);
-        verify(mpercolate(null, "test1", "test2"), true);
+        verify(mpercolate(null, "test1", "test2"), false);
         verify(suggest("test1", "test2"), true);
         verify(getAliases("test1", "test2"), true);
         verify(getFieldMapping("test1", "test2"), true);
@@ -117,7 +117,7 @@ public class IndicesOptionsTests extends ElasticsearchIntegrationTest {
         verify(typesExists("test1", "test2").setIndicesOptions(options), true);
         verify(deleteByQuery("test1", "test2").setIndicesOptions(options), true);
         verify(percolate("test1", "test2").setIndicesOptions(options), true);
-        verify(mpercolate(options, "test1", "test2").setIndicesOptions(options), true);
+        verify(mpercolate(options, "test1", "test2").setIndicesOptions(options), false);
         verify(suggest("test1", "test2").setIndicesOptions(options), true);
         verify(getAliases("test1", "test2").setIndicesOptions(options), true);
         verify(getFieldMapping("test1", "test2").setIndicesOptions(options), true);