diff options
author | Areek Zillur <areek.zillur@elasticsearch.com> | 2016-12-21 00:27:41 -0500 |
---|---|---|
committer | Areek Zillur <areek.zillur@elasticsearch.com> | 2016-12-21 01:04:31 -0500 |
commit | 180ceef1342522e2cc687103ef1b86a24cf86afe (patch) | |
tree | 02ce5ab272d94ac8032b615c81111be96e7c6b31 /core/src/test/java/org/elasticsearch/action/support | |
parent | de44584f84727fabb7187c5ed2672a25b861e56c (diff) | |
parent | 5e68b632f83460f0c0545f2f59ee1d2b04874528 (diff) |
Merge branch 'master' into enhancement/use_shard_bulk_for_single_ops
Diffstat (limited to 'core/src/test/java/org/elasticsearch/action/support')
2 files changed, 153 insertions, 76 deletions
diff --git a/core/src/test/java/org/elasticsearch/action/support/replication/ReplicationResponseTests.java b/core/src/test/java/org/elasticsearch/action/support/replication/ReplicationResponseTests.java index 7d82b74413..ca8f0a4c6b 100644 --- a/core/src/test/java/org/elasticsearch/action/support/replication/ReplicationResponseTests.java +++ b/core/src/test/java/org/elasticsearch/action/support/replication/ReplicationResponseTests.java @@ -21,9 +21,8 @@ package org.elasticsearch.action.support.replication; import org.elasticsearch.ElasticsearchException; import org.elasticsearch.action.RoutingMissingException; -import org.elasticsearch.common.xcontent.ToXContent; -import org.elasticsearch.common.xcontent.XContent; -import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.bytes.BytesReference; +import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.index.Index; @@ -117,95 +116,173 @@ public class ReplicationResponseTests extends ESTestCase { } public void testShardInfoToXContent() throws IOException { - ReplicationResponse.ShardInfo shardInfo = new ReplicationResponse.ShardInfo(5, 3); + final XContentType xContentType = randomFrom(XContentType.values()); - final XContent xContent = randomFrom(XContentType.values()).xContent(); - try (XContentBuilder builder = XContentBuilder.builder(xContent)) { - builder.startObject(); - shardInfo.toXContent(builder, ToXContent.EMPTY_PARAMS); - builder.endObject(); + final ReplicationResponse.ShardInfo shardInfo = new ReplicationResponse.ShardInfo(5, 3); + final BytesReference shardInfoBytes = XContentHelper.toXContent(shardInfo, xContentType, true); - // Expected JSON is {"_shards":{"total":5,"successful":3,"failed":0}} - try (XContentParser parser = xContent.createParser(builder.bytes())) { - assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("_shards", parser.currentName()); - assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("total", parser.currentName()); - assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); - assertEquals(shardInfo.getTotal(), parser.intValue()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("successful", parser.currentName()); - assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); - assertEquals(shardInfo.getSuccessful(), parser.intValue()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("failed", parser.currentName()); - assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); - assertEquals(shardInfo.getFailed(), parser.intValue()); - assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); - assertNull(parser.nextToken()); - } + // Expected JSON is {"_shards":{"total":5,"successful":3,"failed":0}} + try (XContentParser parser = createParser(xContentType.xContent(), shardInfoBytes)) { + assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); + assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); + assertEquals("_shards", parser.currentName()); + assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); + assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); + assertEquals("total", parser.currentName()); + assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); + assertEquals(shardInfo.getTotal(), parser.intValue()); + assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); + assertEquals("successful", parser.currentName()); + assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); + assertEquals(shardInfo.getSuccessful(), parser.intValue()); + assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); + assertEquals("failed", parser.currentName()); + assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); + assertEquals(shardInfo.getFailed(), parser.intValue()); + assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); + assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); + assertNull(parser.nextToken()); } } - public void testRandomShardInfoToXContent() throws IOException { + public void testShardInfoToAndFromXContent() throws IOException { + final XContentType xContentType = randomFrom(XContentType.values()); + + final ReplicationResponse.ShardInfo shardInfo = new ReplicationResponse.ShardInfo(randomIntBetween(1, 5), randomIntBetween(1, 5)); + final BytesReference shardInfoBytes = XContentHelper.toXContent(shardInfo, xContentType, true); + + ReplicationResponse.ShardInfo parsedShardInfo; + try (XContentParser parser = createParser(xContentType.xContent(), shardInfoBytes)) { + // Move to the start object that was manually added when building the object + assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); + parsedShardInfo = ReplicationResponse.ShardInfo.fromXContent(parser); + assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); + assertNull(parser.nextToken()); + } + // We can use assertEquals because the shardInfo doesn't have a failure (and exceptions) + assertEquals(shardInfo, parsedShardInfo); + + BytesReference parsedShardInfoBytes = XContentHelper.toXContent(parsedShardInfo, xContentType, true); + assertEquals(shardInfoBytes, parsedShardInfoBytes); + } + + public void testShardInfoWithFailureToXContent() throws IOException { + final XContentType xContentType = randomFrom(XContentType.values()); + final ReplicationResponse.ShardInfo shardInfo = randomShardInfo(); + final BytesReference shardInfoBytes = XContentHelper.toXContent(shardInfo, xContentType, true); - final XContent xContent = randomFrom(XContentType.values()).xContent(); - try (XContentBuilder builder = XContentBuilder.builder(xContent)) { - builder.startObject(); - shardInfo.toXContent(builder, ToXContent.EMPTY_PARAMS); - builder.endObject(); + try (XContentParser parser = createParser(xContentType.xContent(), shardInfoBytes)) { + assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); + assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); + assertEquals("_shards", parser.currentName()); + assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); + assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); + assertEquals("total", parser.currentName()); + assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); + assertEquals(shardInfo.getTotal(), parser.intValue()); + assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); + assertEquals("successful", parser.currentName()); + assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); + assertEquals(shardInfo.getSuccessful(), parser.intValue()); + assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); + assertEquals("failed", parser.currentName()); + assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); + assertEquals(shardInfo.getFailed(), parser.intValue()); - try (XContentParser parser = xContent.createParser(builder.bytes())) { - assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("_shards", parser.currentName()); - assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); + if (shardInfo.getFailures() != null && shardInfo.getFailures().length > 0) { assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("total", parser.currentName()); - assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); - assertEquals(shardInfo.getTotal(), parser.intValue()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("successful", parser.currentName()); - assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); - assertEquals(shardInfo.getSuccessful(), parser.intValue()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("failed", parser.currentName()); - assertEquals(XContentParser.Token.VALUE_NUMBER, parser.nextToken()); - assertEquals(shardInfo.getFailed(), parser.intValue()); - - if (shardInfo.getFailures() != null && shardInfo.getFailures().length > 0) { - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("failures", parser.currentName()); - assertEquals(XContentParser.Token.START_ARRAY, parser.nextToken()); - - for (int i = 0; i < shardInfo.getFailures().length; i++) { - assertFailure(parser, shardInfo.getFailures()[i]); - } - assertEquals(XContentParser.Token.END_ARRAY, parser.nextToken()); - } + assertEquals("failures", parser.currentName()); + assertEquals(XContentParser.Token.START_ARRAY, parser.nextToken()); - assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); - assertNull(parser.nextToken()); + for (int i = 0; i < shardInfo.getFailures().length; i++) { + assertFailure(parser, shardInfo.getFailures()[i]); + } + assertEquals(XContentParser.Token.END_ARRAY, parser.nextToken()); } + + assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); + assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); + assertNull(parser.nextToken()); + } + } + + public void testRandomShardInfoFromXContent() throws IOException { + final XContentType xContentType = randomFrom(XContentType.values()); + + final ReplicationResponse.ShardInfo shardInfo = randomShardInfo(); + final BytesReference shardInfoBytes = XContentHelper.toXContent(shardInfo, xContentType, true); + + ReplicationResponse.ShardInfo parsedShardInfo; + try (XContentParser parser = createParser(xContentType.xContent(), shardInfoBytes)) { + // Move to the start object that was manually added when building the object + assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); + parsedShardInfo = ReplicationResponse.ShardInfo.fromXContent(parser); + assertEquals(XContentParser.Token.END_OBJECT, parser.nextToken()); + assertNull(parser.nextToken()); + } + + // We can't use assertEquals to compare the original ShardInfo with the parsed ShardInfo + // because it may include random failures with exceptions, and exception types are not + // preserved during ToXContent->FromXContent process. + assertNotNull(parsedShardInfo); + assertEquals(shardInfo.getTotal(), parsedShardInfo.getTotal()); + assertEquals(shardInfo.getSuccessful(), parsedShardInfo.getSuccessful()); + assertEquals(shardInfo.getFailed(), parsedShardInfo.getFailed()); + assertEquals(shardInfo.getFailures().length, parsedShardInfo.getFailures().length); + + for (int i = 0; i < shardInfo.getFailures().length; i++) { + ReplicationResponse.ShardInfo.Failure parsedFailure = parsedShardInfo.getFailures()[i]; + ReplicationResponse.ShardInfo.Failure failure = shardInfo.getFailures()[i]; + + assertEquals(failure.index(), parsedFailure.index()); + assertEquals(failure.shardId(), parsedFailure.shardId()); + assertEquals(failure.nodeId(), parsedFailure.nodeId()); + assertEquals(failure.status(), parsedFailure.status()); + assertEquals(failure.primary(), parsedFailure.primary()); + + Throwable cause = failure.getCause(); + String expectedMessage = "Elasticsearch exception [type=" + ElasticsearchException.getExceptionName(cause) + + ", reason=" + cause.getMessage() + "]"; + assertEquals(expectedMessage, parsedFailure.getCause().getMessage()); } } public void testRandomFailureToXContent() throws IOException { - ReplicationResponse.ShardInfo.Failure shardInfoFailure = randomFailure(); + final XContentType xContentType = randomFrom(XContentType.values()); - final XContent xContent = randomFrom(XContentType.values()).xContent(); - try (XContentBuilder builder = XContentBuilder.builder(xContent)) { - shardInfoFailure.toXContent(builder, ToXContent.EMPTY_PARAMS); + final ReplicationResponse.ShardInfo.Failure shardInfoFailure = randomFailure(); + final BytesReference shardInfoBytes = XContentHelper.toXContent(shardInfoFailure, xContentType, false); - try (XContentParser parser = xContent.createParser(builder.bytes())) { - assertFailure(parser, shardInfoFailure); - } + try (XContentParser parser = createParser(xContentType.xContent(), shardInfoBytes)) { + assertFailure(parser, shardInfoFailure); + } + } + + public void testRandomFailureToAndFromXContent() throws IOException { + final XContentType xContentType = randomFrom(XContentType.values()); + + final ReplicationResponse.ShardInfo.Failure shardInfoFailure = randomFailure(); + final BytesReference shardInfoBytes = XContentHelper.toXContent(shardInfoFailure, xContentType, false); + + ReplicationResponse.ShardInfo.Failure parsedFailure; + try (XContentParser parser = createParser(xContentType.xContent(), shardInfoBytes)) { + // Move to the first start object + assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); + parsedFailure = ReplicationResponse.ShardInfo.Failure.fromXContent(parser); + assertNull(parser.nextToken()); } + + assertEquals(shardInfoFailure.index(), parsedFailure.index()); + assertEquals(shardInfoFailure.shardId(), parsedFailure.shardId()); + assertEquals(shardInfoFailure.nodeId(), parsedFailure.nodeId()); + assertEquals(shardInfoFailure.status(), parsedFailure.status()); + assertEquals(shardInfoFailure.primary(), parsedFailure.primary()); + + Throwable cause = shardInfoFailure.getCause(); + String expectedMessage = "Elasticsearch exception [type=" + ElasticsearchException.getExceptionName(cause) + + ", reason=" + cause.getMessage() + "]"; + assertEquals(expectedMessage, parsedFailure.getCause().getMessage()); } private static void assertFailure(XContentParser parser, ReplicationResponse.ShardInfo.Failure failure) throws IOException { diff --git a/core/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationActionTests.java b/core/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationActionTests.java index f05b931e78..0e01c131aa 100644 --- a/core/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationActionTests.java +++ b/core/src/test/java/org/elasticsearch/action/support/replication/TransportReplicationActionTests.java @@ -360,8 +360,8 @@ public class TransportReplicationActionTests extends ESTestCase { public void testClosedIndexOnReroute() throws InterruptedException { final String index = "test"; // no replicas in oder to skip the replication part - setState(clusterService, - new ClusterStateChanges().closeIndices(state(index, true, ShardRoutingState.UNASSIGNED), new CloseIndexRequest(index))); + setState(clusterService, new ClusterStateChanges(xContentRegistry()).closeIndices(state(index, true, ShardRoutingState.UNASSIGNED), + new CloseIndexRequest(index))); logger.debug("--> using initial state:\n{}", clusterService.state()); Request request = new Request(new ShardId("test", "_na_", 0)).timeout("1ms"); PlainActionFuture<Response> listener = new PlainActionFuture<>(); |