|
|
@@ -0,0 +1,197 @@
|
|
|
+/*
|
|
|
+ * Licensed to the Apache Software Foundation (ASF) under one
|
|
|
+ * or more contributor license agreements. See the NOTICE file
|
|
|
+ * distributed with this work for additional information
|
|
|
+ * regarding copyright ownership. The ASF licenses this file
|
|
|
+ * to you under the Apache License, Version 2.0 (the
|
|
|
+ * "License"); you may not use this file except in compliance
|
|
|
+ * with the License. You may obtain a copy of the License at
|
|
|
+ *
|
|
|
+ * http://www.apache.org/licenses/LICENSE-2.0
|
|
|
+ *
|
|
|
+ * Unless required by applicable law or agreed to in writing,
|
|
|
+ * software distributed under the License is distributed on an
|
|
|
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
|
+ * KIND, either express or implied. See the License for the
|
|
|
+ * specific language governing permissions and limitations
|
|
|
+ * under the License.
|
|
|
+ */
|
|
|
+
|
|
|
+package org.apache.ambari.infra.job.archive;
|
|
|
+
|
|
|
+import org.easymock.EasyMockRunner;
|
|
|
+import org.easymock.EasyMockSupport;
|
|
|
+import org.easymock.Mock;
|
|
|
+import org.junit.After;
|
|
|
+import org.junit.Before;
|
|
|
+import org.junit.Test;
|
|
|
+import org.junit.runner.RunWith;
|
|
|
+import org.springframework.batch.item.ExecutionContext;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+
|
|
|
+import static org.easymock.EasyMock.expect;
|
|
|
+import static org.easymock.EasyMock.expectLastCall;
|
|
|
+import static org.hamcrest.core.Is.is;
|
|
|
+import static org.hamcrest.core.IsNull.nullValue;
|
|
|
+import static org.junit.Assert.assertThat;
|
|
|
+
|
|
|
+@RunWith(EasyMockRunner.class)
|
|
|
+public class DocumentItemReaderTest extends EasyMockSupport {
|
|
|
+ private static final Document DOCUMENT = new Document(new HashMap<String, String>() {{ put("id", "1"); }});
|
|
|
+ private static final Document DOCUMENT_2 = new Document(new HashMap<String, String>() {{ put("id", "2"); }});
|
|
|
+ private static final Document DOCUMENT_3 = new Document(new HashMap<String, String>() {{ put("id", "3"); }});
|
|
|
+ private static final int READ_BLOCK_SIZE = 2;
|
|
|
+
|
|
|
+ private DocumentItemReader documentItemReader;
|
|
|
+ @Mock
|
|
|
+ private DocumentSource documentSource;
|
|
|
+ @Mock
|
|
|
+ private DocumentIterator documentIterator;
|
|
|
+ @Mock
|
|
|
+ private DocumentIterator documentIterator2;
|
|
|
+
|
|
|
+ @Before
|
|
|
+ public void setUp() throws Exception {
|
|
|
+ documentItemReader = new DocumentItemReader(documentSource, READ_BLOCK_SIZE);
|
|
|
+ }
|
|
|
+
|
|
|
+ @After
|
|
|
+ public void tearDown() throws Exception {
|
|
|
+ verifyAll();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testReadWhenCollectionIsEmpty() throws Exception {
|
|
|
+ expect(documentSource.open(null, 2)).andReturn(documentIterator);
|
|
|
+ expect(documentIterator.next()).andReturn(null);
|
|
|
+ documentIterator.close(); expectLastCall();
|
|
|
+ replayAll();
|
|
|
+
|
|
|
+ assertThat(documentItemReader.read(), is(nullValue()));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(true));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(true));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testReadWhenCollectionContainsLessElementsThanReadBlockSize() throws Exception {
|
|
|
+ expect(documentSource.open(null, 2)).andReturn(documentIterator);
|
|
|
+ expect(documentIterator.next()).andReturn(DOCUMENT);
|
|
|
+ expect(documentIterator.next()).andReturn(null);
|
|
|
+ documentIterator.close(); expectLastCall();
|
|
|
+ replayAll();
|
|
|
+
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(false));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(false));
|
|
|
+ assertThat(documentItemReader.read(), is(nullValue()));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(true));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(true));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testReadWhenCollectionContainsExactlySameCountElementsAsReadBlockSize() throws Exception {
|
|
|
+ expect(documentSource.open(null, 2)).andReturn(documentIterator);
|
|
|
+ expect(documentSource.open(DOCUMENT_2, 2)).andReturn(documentIterator2);
|
|
|
+ expect(documentIterator.next()).andReturn(DOCUMENT);
|
|
|
+ expect(documentIterator.next()).andReturn(DOCUMENT_2);
|
|
|
+ expect(documentIterator.next()).andReturn(null);
|
|
|
+ documentIterator.close(); expectLastCall();
|
|
|
+
|
|
|
+ expect(documentIterator2.next()).andReturn(null);
|
|
|
+ documentIterator2.close(); expectLastCall();
|
|
|
+ replayAll();
|
|
|
+
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(false));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(false));
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT_2));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(false));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(false));
|
|
|
+ assertThat(documentItemReader.read(), is(nullValue()));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(true));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(true));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testReadWhenCollectionContainsMoreElementsThanReadBlockSize() throws Exception {
|
|
|
+ Document document3 = new Document(new HashMap<String, String>() {{ put("id", "2"); }});
|
|
|
+
|
|
|
+ expect(documentSource.open(null, 2)).andReturn(documentIterator);
|
|
|
+ expect(documentSource.open(DOCUMENT_2, 2)).andReturn(documentIterator2);
|
|
|
+ expect(documentIterator.next()).andReturn(DOCUMENT);
|
|
|
+ expect(documentIterator.next()).andReturn(DOCUMENT_2);
|
|
|
+ expect(documentIterator.next()).andReturn(null);
|
|
|
+ documentIterator.close(); expectLastCall();
|
|
|
+ expect(documentIterator2.next()).andReturn(document3);
|
|
|
+ expect(documentIterator2.next()).andReturn(null);
|
|
|
+ documentIterator2.close(); expectLastCall();
|
|
|
+
|
|
|
+ replayAll();
|
|
|
+
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(false));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(false));
|
|
|
+
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT_2));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(false));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(false));
|
|
|
+
|
|
|
+ assertThat(documentItemReader.read(), is(document3));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(false));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(false));
|
|
|
+
|
|
|
+ assertThat(documentItemReader.read(), is(nullValue()));
|
|
|
+ assertThat(documentItemReader.isComplete(null), is(true));
|
|
|
+ assertThat(documentItemReader.isComplete(null, null), is(true));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testContinueWhenOnlyFirstElementWasRead() throws Exception {
|
|
|
+ expect(documentSource.open(null, 2)).andReturn(documentIterator);
|
|
|
+ expect(documentIterator.next()).andReturn(DOCUMENT);
|
|
|
+ documentIterator.close(); expectLastCall();
|
|
|
+ expect(documentSource.open(null, 2)).andReturn(documentIterator2);
|
|
|
+ expect(documentIterator2.next()).andReturn(DOCUMENT);
|
|
|
+ documentIterator2.close(); expectLastCall();
|
|
|
+ replayAll();
|
|
|
+
|
|
|
+ ExecutionContext executionContext = new ExecutionContext();
|
|
|
+ documentItemReader.open(executionContext);
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT));
|
|
|
+ documentItemReader.update(executionContext);
|
|
|
+ assertThat(executionContext.containsKey(DocumentItemReader.POSITION), is(false));
|
|
|
+ documentItemReader.close();
|
|
|
+
|
|
|
+ documentItemReader.open(executionContext);
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT));
|
|
|
+ documentItemReader.close();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testContinueWhenMoreThanOneElementWasRead() throws Exception {
|
|
|
+ expect(documentSource.open(null, 2)).andReturn(documentIterator);
|
|
|
+ expect(documentIterator.next()).andReturn(DOCUMENT);
|
|
|
+ expect(documentIterator.next()).andReturn(DOCUMENT_2);
|
|
|
+ documentIterator.close(); expectLastCall();
|
|
|
+ expect(documentSource.open(DOCUMENT, 2)).andReturn(documentIterator2);
|
|
|
+ expect(documentIterator2.next()).andReturn(DOCUMENT_2);
|
|
|
+ expect(documentIterator2.next()).andReturn(DOCUMENT_3);
|
|
|
+ documentIterator2.close(); expectLastCall();
|
|
|
+
|
|
|
+ replayAll();
|
|
|
+
|
|
|
+ ExecutionContext executionContext = new ExecutionContext();
|
|
|
+ documentItemReader.open(executionContext);
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT));
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT_2));
|
|
|
+ documentItemReader.update(executionContext);
|
|
|
+ assertThat(executionContext.get(DocumentItemReader.POSITION), is(DOCUMENT));
|
|
|
+ documentItemReader.close();
|
|
|
+
|
|
|
+ documentItemReader.open(executionContext);
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT_2));
|
|
|
+ assertThat(documentItemReader.read(), is(DOCUMENT_3));
|
|
|
+ documentItemReader.close();
|
|
|
+ }
|
|
|
+}
|