Skip to content

Commit 87e003f

Browse files
authored
Switch WriteActionsTests.testBulk to use hamcrest (#44422)
If an item in the bulk request fails, that could be for a variety of reasons - it may be that the underlying behaviour of security has changed, or it may just be a transient failure during testing. Simply asserting a `true`/`false` value produces failure messages that are difficult to diagnose and debug. Using hamcert (`assertThat`) will make it easier to understand the causes of failures in this test. Backport of: #43725
1 parent 9ef9f1e commit 87e003f

File tree

1 file changed

+56
-40
lines changed

1 file changed

+56
-40
lines changed

x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/authz/WriteActionsTests.java

Lines changed: 56 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
import static org.elasticsearch.test.SecurityTestsUtils.assertAuthorizationExceptionDefaultUsers;
2424
import static org.elasticsearch.test.SecurityTestsUtils.assertThrowsAuthorizationExceptionDefaultUsers;
2525
import static org.hamcrest.CoreMatchers.containsString;
26+
import static org.hamcrest.Matchers.equalTo;
27+
import static org.hamcrest.Matchers.notNullValue;
28+
import static org.hamcrest.Matchers.nullValue;
2629
import static org.hamcrest.core.IsInstanceOf.instanceOf;
2730

2831
public class WriteActionsTests extends SecurityIntegTestCase {
@@ -101,64 +104,77 @@ public void testBulk() {
101104
.add(new UpdateRequest("test4", "type", "id").doc(Requests.INDEX_CONTENT_TYPE, "field", "value"))
102105
.add(new UpdateRequest("missing", "type", "id").doc(Requests.INDEX_CONTENT_TYPE, "field", "value")).get();
103106
assertTrue(bulkResponse.hasFailures());
104-
assertEquals(13, bulkResponse.getItems().length);
105-
assertFalse(bulkResponse.getItems()[0].isFailed());
106-
assertEquals(DocWriteRequest.OpType.INDEX, bulkResponse.getItems()[0].getOpType());
107-
assertEquals("test1", bulkResponse.getItems()[0].getIndex());
108-
assertTrue(bulkResponse.getItems()[1].isFailed());
109-
assertEquals(DocWriteRequest.OpType.INDEX, bulkResponse.getItems()[1].getOpType());
110-
assertEquals("index1", bulkResponse.getItems()[1].getFailure().getIndex());
107+
assertThat(bulkResponse.getItems().length, equalTo(13));
108+
assertThat(bulkResponse.getItems()[0].getFailure(), nullValue());
109+
assertThat(bulkResponse.getItems()[0].isFailed(), equalTo(false));
110+
assertThat(bulkResponse.getItems()[0].getOpType(), equalTo(DocWriteRequest.OpType.INDEX));
111+
assertThat(bulkResponse.getItems()[0].getIndex(), equalTo("test1"));
112+
assertThat(bulkResponse.getItems()[1].getFailure(), notNullValue());
113+
assertThat(bulkResponse.getItems()[1].isFailed(), equalTo(true));
114+
assertThat(bulkResponse.getItems()[1].getOpType(), equalTo(DocWriteRequest.OpType.INDEX));
115+
assertThat(bulkResponse.getItems()[1].getFailure().getIndex(), equalTo("index1"));
111116
assertAuthorizationExceptionDefaultUsers(bulkResponse.getItems()[1].getFailure().getCause(), BulkAction.NAME + "[s]");
112117
assertThat(bulkResponse.getItems()[1].getFailure().getCause().getMessage(),
113118
containsString("[indices:data/write/bulk[s]] is unauthorized"));
114-
assertFalse(bulkResponse.getItems()[2].isFailed());
115-
assertEquals(DocWriteRequest.OpType.INDEX, bulkResponse.getItems()[2].getOpType());
116-
assertEquals("test4", bulkResponse.getItems()[2].getResponse().getIndex());
117-
assertTrue(bulkResponse.getItems()[3].isFailed());
118-
assertEquals(DocWriteRequest.OpType.INDEX, bulkResponse.getItems()[3].getOpType());
119+
assertThat(bulkResponse.getItems()[2].getFailure(), nullValue());
120+
assertThat(bulkResponse.getItems()[2].isFailed(), equalTo(false));
121+
assertThat(bulkResponse.getItems()[2].getOpType(), equalTo(DocWriteRequest.OpType.INDEX));
122+
assertThat(bulkResponse.getItems()[2].getResponse().getIndex(), equalTo("test4"));
123+
assertThat(bulkResponse.getItems()[3].getFailure(), notNullValue());
124+
assertThat(bulkResponse.getItems()[3].isFailed(), equalTo(true));
125+
assertThat(bulkResponse.getItems()[3].getOpType(), equalTo(DocWriteRequest.OpType.INDEX));
119126
//the missing index gets automatically created (user has permissions for that), but indexing fails due to missing authorization
120-
assertEquals("missing", bulkResponse.getItems()[3].getFailure().getIndex());
127+
assertThat(bulkResponse.getItems()[3].getFailure().getIndex(), equalTo("missing"));
121128
assertThat(bulkResponse.getItems()[3].getFailure().getCause(), instanceOf(ElasticsearchSecurityException.class));
122129
assertAuthorizationExceptionDefaultUsers(bulkResponse.getItems()[3].getFailure().getCause(), BulkAction.NAME + "[s]");
123130
assertThat(bulkResponse.getItems()[3].getFailure().getCause().getMessage(),
124131
containsString("[indices:data/write/bulk[s]] is unauthorized"));
125-
assertFalse(bulkResponse.getItems()[4].isFailed());
126-
assertEquals(DocWriteRequest.OpType.DELETE, bulkResponse.getItems()[4].getOpType());
127-
assertEquals("test1", bulkResponse.getItems()[4].getIndex());
128-
assertTrue(bulkResponse.getItems()[5].isFailed());
129-
assertEquals(DocWriteRequest.OpType.DELETE, bulkResponse.getItems()[5].getOpType());
130-
assertEquals("index1", bulkResponse.getItems()[5].getFailure().getIndex());
132+
assertThat(bulkResponse.getItems()[4].getFailure(), nullValue());
133+
assertThat(bulkResponse.getItems()[4].isFailed(), equalTo(false));
134+
assertThat(bulkResponse.getItems()[4].getOpType(), equalTo(DocWriteRequest.OpType.DELETE));
135+
assertThat(bulkResponse.getItems()[4].getIndex(), equalTo("test1"));
136+
assertThat(bulkResponse.getItems()[5].getFailure(), notNullValue());
137+
assertThat(bulkResponse.getItems()[5].isFailed(), equalTo(true));
138+
assertThat(bulkResponse.getItems()[5].getOpType(), equalTo(DocWriteRequest.OpType.DELETE));
139+
assertThat(bulkResponse.getItems()[5].getFailure().getIndex(), equalTo("index1"));
131140
assertAuthorizationExceptionDefaultUsers(bulkResponse.getItems()[5].getFailure().getCause(), BulkAction.NAME + "[s]");
132141
assertThat(bulkResponse.getItems()[5].getFailure().getCause().getMessage(),
133142
containsString("[indices:data/write/bulk[s]] is unauthorized"));
134-
assertFalse(bulkResponse.getItems()[6].isFailed());
135-
assertEquals(DocWriteRequest.OpType.DELETE, bulkResponse.getItems()[6].getOpType());
136-
assertEquals("test4", bulkResponse.getItems()[6].getIndex());
137-
assertTrue(bulkResponse.getItems()[7].isFailed());
138-
assertEquals(DocWriteRequest.OpType.DELETE, bulkResponse.getItems()[7].getOpType());
139-
assertEquals("missing", bulkResponse.getItems()[7].getFailure().getIndex());
143+
assertThat(bulkResponse.getItems()[6].getFailure(), nullValue());
144+
assertThat(bulkResponse.getItems()[6].isFailed(), equalTo(false));
145+
assertThat(bulkResponse.getItems()[6].getOpType(), equalTo(DocWriteRequest.OpType.DELETE));
146+
assertThat(bulkResponse.getItems()[6].getIndex(), equalTo("test4"));
147+
assertThat(bulkResponse.getItems()[7].getFailure(), notNullValue());
148+
assertThat(bulkResponse.getItems()[7].isFailed(), equalTo(true));
149+
assertThat(bulkResponse.getItems()[7].getOpType(), equalTo(DocWriteRequest.OpType.DELETE));
150+
assertThat(bulkResponse.getItems()[7].getFailure().getIndex(), equalTo("missing"));
140151
assertAuthorizationExceptionDefaultUsers(bulkResponse.getItems()[7].getFailure().getCause(), BulkAction.NAME + "[s]");
141152
assertThat(bulkResponse.getItems()[7].getFailure().getCause().getMessage(),
142153
containsString("[indices:data/write/bulk[s]] is unauthorized"));
143-
assertFalse(bulkResponse.getItems()[8].isFailed());
144-
assertEquals(DocWriteRequest.OpType.INDEX, bulkResponse.getItems()[8].getOpType());
145-
assertEquals("test1", bulkResponse.getItems()[8].getIndex());
146-
assertFalse(bulkResponse.getItems()[9].isFailed());
147-
assertEquals(DocWriteRequest.OpType.UPDATE, bulkResponse.getItems()[9].getOpType());
148-
assertEquals("test1", bulkResponse.getItems()[9].getIndex());
149-
assertTrue(bulkResponse.getItems()[10].isFailed());
150-
assertEquals(DocWriteRequest.OpType.UPDATE, bulkResponse.getItems()[10].getOpType());
151-
assertEquals("index1", bulkResponse.getItems()[10].getFailure().getIndex());
154+
assertThat(bulkResponse.getItems()[8].getFailure(), nullValue());
155+
assertThat(bulkResponse.getItems()[8].isFailed(), equalTo(false));
156+
assertThat(bulkResponse.getItems()[8].getOpType(), equalTo(DocWriteRequest.OpType.INDEX));
157+
assertThat(bulkResponse.getItems()[8].getIndex(), equalTo("test1"));
158+
assertThat(bulkResponse.getItems()[9].getFailure(), nullValue());
159+
assertThat(bulkResponse.getItems()[9].isFailed(), equalTo(false));
160+
assertThat(bulkResponse.getItems()[9].getOpType(), equalTo(DocWriteRequest.OpType.UPDATE));
161+
assertThat(bulkResponse.getItems()[9].getIndex(), equalTo("test1"));
162+
assertThat(bulkResponse.getItems()[10].getFailure(), notNullValue());
163+
assertThat(bulkResponse.getItems()[10].isFailed(), equalTo(true));
164+
assertThat(bulkResponse.getItems()[10].getOpType(), equalTo(DocWriteRequest.OpType.UPDATE));
165+
assertThat(bulkResponse.getItems()[10].getFailure().getIndex(), equalTo("index1"));
152166
assertAuthorizationExceptionDefaultUsers(bulkResponse.getItems()[10].getFailure().getCause(), BulkAction.NAME + "[s]");
153167
assertThat(bulkResponse.getItems()[10].getFailure().getCause().getMessage(),
154168
containsString("[indices:data/write/bulk[s]] is unauthorized"));
155-
assertTrue(bulkResponse.getItems()[11].isFailed());
156-
assertEquals(DocWriteRequest.OpType.UPDATE, bulkResponse.getItems()[11].getOpType());
157-
assertEquals("test4", bulkResponse.getItems()[11].getIndex());
169+
assertThat(bulkResponse.getItems()[11].getFailure(), notNullValue());
170+
assertThat(bulkResponse.getItems()[11].isFailed(), equalTo(true));
171+
assertThat(bulkResponse.getItems()[11].getOpType(), equalTo(DocWriteRequest.OpType.UPDATE));
172+
assertThat(bulkResponse.getItems()[11].getIndex(), equalTo("test4"));
158173
assertThat(bulkResponse.getItems()[11].getFailure().getCause(), instanceOf(DocumentMissingException.class));
159-
assertTrue(bulkResponse.getItems()[12].isFailed());
160-
assertEquals(DocWriteRequest.OpType.UPDATE, bulkResponse.getItems()[12].getOpType());
161-
assertEquals("missing", bulkResponse.getItems()[12].getFailure().getIndex());
174+
assertThat(bulkResponse.getItems()[12].getFailure(), notNullValue());
175+
assertThat(bulkResponse.getItems()[12].isFailed(), equalTo(true));
176+
assertThat(bulkResponse.getItems()[12].getOpType(), equalTo(DocWriteRequest.OpType.UPDATE));
177+
assertThat(bulkResponse.getItems()[12].getFailure().getIndex(), equalTo("missing"));
162178
assertThat(bulkResponse.getItems()[12].getFailure().getCause(), instanceOf(ElasticsearchSecurityException.class));
163179
assertAuthorizationExceptionDefaultUsers(bulkResponse.getItems()[12].getFailure().getCause(), BulkAction.NAME + "[s]");
164180
assertThat(bulkResponse.getItems()[12].getFailure().getCause().getMessage(),

0 commit comments

Comments
 (0)