nickwallen commented on a change in pull request #1254: METRON-1849 Elasticsearch Index Write Functionality Should be Shared URL: https://github.com/apache/metron/pull/1254#discussion_r240687913
########## File path: metron-platform/metron-elasticsearch/src/test/java/org/apache/metron/elasticsearch/writer/ElasticsearchWriterTest.java ########## @@ -18,170 +18,241 @@ package org.apache.metron.elasticsearch.writer; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; +import org.apache.metron.common.Constants; +import org.apache.metron.common.configuration.writer.WriterConfiguration; +import org.apache.metron.common.writer.BulkWriterResponse; +import org.apache.storm.task.TopologyContext; +import org.apache.storm.tuple.Tuple; +import org.json.simple.JSONObject; +import org.junit.Before; +import org.junit.Test; -import com.google.common.collect.ImmutableList; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; -import org.apache.metron.common.writer.BulkWriterResponse; -import org.apache.storm.tuple.Tuple; -import org.elasticsearch.action.bulk.BulkItemResponse; -import org.elasticsearch.action.bulk.BulkResponse; -import org.junit.Test; +import java.util.UUID; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class ElasticsearchWriterTest { - @Test - public void testSingleSuccesses() throws Exception { - Tuple tuple1 = mock(Tuple.class); - BulkResponse response = mock(BulkResponse.class); - when(response.hasFailures()).thenReturn(false); + Map stormConf; + TopologyContext topologyContext; + WriterConfiguration writerConfiguration; - BulkWriterResponse expected = new BulkWriterResponse(); - expected.addSuccess(tuple1); + @Before + public void setup() { + topologyContext = mock(TopologyContext.class); - ElasticsearchWriter esWriter = new ElasticsearchWriter(); - BulkWriterResponse actual = esWriter.buildWriteReponse(ImmutableList.of(tuple1), response); + writerConfiguration = mock(WriterConfiguration.class); + when(writerConfiguration.getGlobalConfig()).thenReturn(globals()); - assertEquals("Response should have no errors and single success", expected, actual); + stormConf = new HashMap(); } @Test - public void testMultipleSuccesses() throws Exception { - Tuple tuple1 = mock(Tuple.class); - Tuple tuple2 = mock(Tuple.class); - - BulkResponse response = mock(BulkResponse.class); - when(response.hasFailures()).thenReturn(false); + public void shouldWriteSuccessfully() { + // create a writer where all writes will be successful + float probabilityOfSuccess = 1.0F; + ElasticsearchWriter esWriter = new ElasticsearchWriter(); + esWriter.setDocumentWriter( new BulkDocumentWriterStub<>(probabilityOfSuccess)); + esWriter.init(stormConf, topologyContext, writerConfiguration); - BulkWriterResponse expected = new BulkWriterResponse(); - expected.addSuccess(tuple1); - expected.addSuccess(tuple2); + // create a tuple and a message associated with that tuple + List<Tuple> tuples = createTuples(1); + List<JSONObject> messages = createMessages(1); - ElasticsearchWriter esWriter = new ElasticsearchWriter(); - BulkWriterResponse actual = esWriter.buildWriteReponse(ImmutableList.of(tuple1, tuple2), response); + BulkWriterResponse response = esWriter.write("bro", writerConfiguration, tuples, messages); - assertEquals("Response should have no errors and two successes", expected, actual); + // response should only contain successes + assertFalse(response.hasErrors()); + assertTrue(response.getSuccesses().contains(tuples.get(0))); } @Test - public void testSingleFailure() throws Exception { - Tuple tuple1 = mock(Tuple.class); - - BulkResponse response = mock(BulkResponse.class); - when(response.hasFailures()).thenReturn(true); - - Exception e = new IllegalStateException(); - BulkItemResponse itemResponse = buildBulkItemFailure(e); - when(response.iterator()).thenReturn(ImmutableList.of(itemResponse).iterator()); + public void shouldWriteManySuccessfully() { + // create a writer where all writes will be successful + float probabilityOfSuccess = 1.0F; Review comment: FYI - With the latest commits, I was able to completely remove this stub and just use a mock. I couldn't figure out how to do this with mocks when I had the callbacks, but since that was refactored to be simpler, this became easier too. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services