|
@@ -20,7 +20,6 @@ package org.apache.hadoop.fs.azurebfs.services;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.util.Arrays;
|
|
|
-import java.util.HashSet;
|
|
|
import java.util.Random;
|
|
|
|
|
|
import org.junit.Test;
|
|
@@ -28,19 +27,22 @@ import org.junit.Test;
|
|
|
import org.mockito.ArgumentCaptor;
|
|
|
|
|
|
import org.apache.hadoop.fs.azurebfs.AbfsConfiguration;
|
|
|
+import org.apache.hadoop.fs.azurebfs.contracts.services.AppendRequestParameters;
|
|
|
import org.apache.hadoop.conf.Configuration;
|
|
|
|
|
|
+import static org.mockito.ArgumentMatchers.eq;
|
|
|
+import static org.mockito.ArgumentMatchers.refEq;
|
|
|
import static org.mockito.Mockito.mock;
|
|
|
import static org.mockito.Mockito.when;
|
|
|
import static org.mockito.Mockito.times;
|
|
|
import static org.mockito.Mockito.verify;
|
|
|
-import static org.mockito.Mockito.anyInt;
|
|
|
import static org.mockito.Mockito.anyBoolean;
|
|
|
import static org.mockito.Mockito.any;
|
|
|
import static org.mockito.Mockito.anyString;
|
|
|
import static org.mockito.Mockito.anyLong;
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
+import static org.apache.hadoop.fs.azurebfs.contracts.services.AppendRequestParameters.Mode.APPEND_MODE;
|
|
|
|
|
|
public final class TestAbfsOutputStream {
|
|
|
|
|
@@ -83,22 +85,15 @@ public final class TestAbfsOutputStream {
|
|
|
abfsConf = new AbfsConfiguration(conf, accountName1);
|
|
|
AbfsPerfTracker tracker = new AbfsPerfTracker("test", accountName1, abfsConf);
|
|
|
when(client.getAbfsPerfTracker()).thenReturn(tracker);
|
|
|
- when(client.append(anyString(), anyLong(), any(byte[].class), anyInt(), anyInt(), any(), anyBoolean())).thenReturn(op);
|
|
|
+ when(client.append(anyString(), any(byte[].class), any(AppendRequestParameters.class), any())).thenReturn(op);
|
|
|
when(client.flush(anyString(), anyLong(), anyBoolean(), anyBoolean(), any())).thenReturn(op);
|
|
|
|
|
|
- AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0, populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
+ AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0,
|
|
|
+ populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
final byte[] b = new byte[WRITE_SIZE];
|
|
|
new Random().nextBytes(b);
|
|
|
out.write(b);
|
|
|
out.hsync();
|
|
|
- ArgumentCaptor<String> acString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acLong = ArgumentCaptor.forClass(Long.class);
|
|
|
- ArgumentCaptor<Integer> acBufferOffset = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<Integer> acBufferLength = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<byte[]> acByteArray = ArgumentCaptor.forClass(byte[].class);
|
|
|
- ArgumentCaptor<Boolean> acAppendBlobAppend = ArgumentCaptor.forClass(Boolean.class);
|
|
|
- ArgumentCaptor<String> acSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
-
|
|
|
|
|
|
final byte[] b1 = new byte[2*WRITE_SIZE];
|
|
|
new Random().nextBytes(b1);
|
|
@@ -108,13 +103,18 @@ public final class TestAbfsOutputStream {
|
|
|
|
|
|
out.hsync();
|
|
|
|
|
|
- verify(client, times(2)).append(acString.capture(), acLong.capture(), acByteArray.capture(), acBufferOffset.capture(), acBufferLength.capture(),
|
|
|
- acSASToken.capture(), acAppendBlobAppend.capture());
|
|
|
- assertThat(Arrays.asList(PATH, PATH)).describedAs("Path of the requests").isEqualTo(acString.getAllValues());
|
|
|
- assertThat(Arrays.asList(Long.valueOf(0), Long.valueOf(WRITE_SIZE))).describedAs("Write Position").isEqualTo(acLong.getAllValues());
|
|
|
- assertThat(Arrays.asList(0, 0)).describedAs("Buffer Offset").isEqualTo(acBufferOffset.getAllValues());
|
|
|
- assertThat(Arrays.asList(WRITE_SIZE, 2*WRITE_SIZE)).describedAs("Buffer length").isEqualTo(acBufferLength.getAllValues());
|
|
|
-
|
|
|
+ AppendRequestParameters firstReqParameters = new AppendRequestParameters(
|
|
|
+ 0, 0, WRITE_SIZE, APPEND_MODE, false);
|
|
|
+ AppendRequestParameters secondReqParameters = new AppendRequestParameters(
|
|
|
+ WRITE_SIZE, 0, 2 * WRITE_SIZE, APPEND_MODE, false);
|
|
|
+
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(firstReqParameters), any());
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(secondReqParameters), any());
|
|
|
+ // confirm there were only 2 invocations in all
|
|
|
+ verify(client, times(2)).append(
|
|
|
+ eq(PATH), any(byte[].class), any(), any());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -132,10 +132,11 @@ public final class TestAbfsOutputStream {
|
|
|
AbfsPerfTracker tracker = new AbfsPerfTracker("test", accountName1, abfsConf);
|
|
|
|
|
|
when(client.getAbfsPerfTracker()).thenReturn(tracker);
|
|
|
- when(client.append(anyString(), anyLong(), any(byte[].class), anyInt(), anyInt(), any(), anyBoolean())).thenReturn(op);
|
|
|
+ when(client.append(anyString(), any(byte[].class), any(AppendRequestParameters.class), any())).thenReturn(op);
|
|
|
when(client.flush(anyString(), anyLong(), anyBoolean(), anyBoolean(), any())).thenReturn(op);
|
|
|
|
|
|
- AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0, populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
+ AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0,
|
|
|
+ populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
final byte[] b = new byte[WRITE_SIZE];
|
|
|
new Random().nextBytes(b);
|
|
|
|
|
@@ -144,33 +145,29 @@ public final class TestAbfsOutputStream {
|
|
|
}
|
|
|
out.close();
|
|
|
|
|
|
- ArgumentCaptor<String> acString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acLong = ArgumentCaptor.forClass(Long.class);
|
|
|
- ArgumentCaptor<Integer> acBufferOffset = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<Integer> acBufferLength = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<byte[]> acByteArray = ArgumentCaptor.forClass(byte[].class);
|
|
|
- ArgumentCaptor<Boolean> acAppendBlobAppend = ArgumentCaptor.forClass(Boolean.class);
|
|
|
- ArgumentCaptor<String> acSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
-
|
|
|
- verify(client, times(2)).append(acString.capture(), acLong.capture(), acByteArray.capture(), acBufferOffset.capture(), acBufferLength.capture(),
|
|
|
- acSASToken.capture(), acAppendBlobAppend.capture());
|
|
|
- assertThat(Arrays.asList(PATH, PATH)).describedAs("Path").isEqualTo(acString.getAllValues());
|
|
|
- assertThat(new HashSet<Long>(Arrays.asList(Long.valueOf(0), Long.valueOf(BUFFER_SIZE)))).describedAs("Position").isEqualTo(new HashSet<Long>(
|
|
|
- acLong.getAllValues()));
|
|
|
- assertThat(Arrays.asList(0, 0)).describedAs("Buffer Offset").isEqualTo(acBufferOffset.getAllValues());
|
|
|
- assertThat(new HashSet<Integer>(Arrays.asList(BUFFER_SIZE, 5*WRITE_SIZE-BUFFER_SIZE))).describedAs("Buffer Length").isEqualTo(new HashSet<Integer>(
|
|
|
- acBufferLength.getAllValues()));
|
|
|
-
|
|
|
- ArgumentCaptor<String> acFlushString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acFlushLong = ArgumentCaptor.forClass(Long.class);
|
|
|
+ AppendRequestParameters firstReqParameters = new AppendRequestParameters(
|
|
|
+ 0, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+ AppendRequestParameters secondReqParameters = new AppendRequestParameters(
|
|
|
+ BUFFER_SIZE, 0, 5*WRITE_SIZE-BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(firstReqParameters), any());
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(secondReqParameters), any());
|
|
|
+ // confirm there were only 2 invocations in all
|
|
|
+ verify(client, times(2)).append(
|
|
|
+ eq(PATH), any(byte[].class), any(), any());
|
|
|
+
|
|
|
+ ArgumentCaptor<String> acFlushPath = ArgumentCaptor.forClass(String.class);
|
|
|
+ ArgumentCaptor<Long> acFlushPosition = ArgumentCaptor.forClass(Long.class);
|
|
|
ArgumentCaptor<Boolean> acFlushRetainUnCommittedData = ArgumentCaptor.forClass(Boolean.class);
|
|
|
ArgumentCaptor<Boolean> acFlushClose = ArgumentCaptor.forClass(Boolean.class);
|
|
|
ArgumentCaptor<String> acFlushSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
|
|
|
- verify(client, times(1)).flush(acFlushString.capture(), acFlushLong.capture(), acFlushRetainUnCommittedData.capture(), acFlushClose.capture(),
|
|
|
- acFlushSASToken.capture());
|
|
|
- assertThat(Arrays.asList(PATH)).describedAs("path").isEqualTo(acFlushString.getAllValues());
|
|
|
- assertThat(Arrays.asList(Long.valueOf(5*WRITE_SIZE))).describedAs("position").isEqualTo(acFlushLong.getAllValues());
|
|
|
+ verify(client, times(1)).flush(acFlushPath.capture(), acFlushPosition.capture(), acFlushRetainUnCommittedData.capture(), acFlushClose.capture(),
|
|
|
+ acFlushSASToken.capture());
|
|
|
+ assertThat(Arrays.asList(PATH)).describedAs("path").isEqualTo(acFlushPath.getAllValues());
|
|
|
+ assertThat(Arrays.asList(Long.valueOf(5*WRITE_SIZE))).describedAs("position").isEqualTo(acFlushPosition.getAllValues());
|
|
|
assertThat(Arrays.asList(false)).describedAs("RetainUnCommittedData flag").isEqualTo(acFlushRetainUnCommittedData.getAllValues());
|
|
|
assertThat(Arrays.asList(true)).describedAs("Close flag").isEqualTo(acFlushClose.getAllValues());
|
|
|
}
|
|
@@ -191,12 +188,13 @@ public final class TestAbfsOutputStream {
|
|
|
AbfsPerfTracker tracker = new AbfsPerfTracker("test", accountName1, abfsConf);
|
|
|
|
|
|
when(client.getAbfsPerfTracker()).thenReturn(tracker);
|
|
|
- when(client.append(anyString(), anyLong(), any(byte[].class), anyInt(), anyInt(), any(), anyBoolean())).thenReturn(op);
|
|
|
+ when(client.append(anyString(), any(byte[].class), any(AppendRequestParameters.class), any())).thenReturn(op);
|
|
|
when(client.flush(anyString(), anyLong(), anyBoolean(), anyBoolean(), any())).thenReturn(op);
|
|
|
when(op.getSasToken()).thenReturn("testToken");
|
|
|
when(op.getResult()).thenReturn(httpOp);
|
|
|
|
|
|
- AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0, populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
+ AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0,
|
|
|
+ populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
final byte[] b = new byte[BUFFER_SIZE];
|
|
|
new Random().nextBytes(b);
|
|
|
|
|
@@ -205,35 +203,31 @@ public final class TestAbfsOutputStream {
|
|
|
}
|
|
|
out.close();
|
|
|
|
|
|
- ArgumentCaptor<String> acString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acLong = ArgumentCaptor.forClass(Long.class);
|
|
|
- ArgumentCaptor<Integer> acBufferOffset = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<Integer> acBufferLength = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<byte[]> acByteArray = ArgumentCaptor.forClass(byte[].class);
|
|
|
- ArgumentCaptor<Boolean> acAppendBlobAppend = ArgumentCaptor.forClass(Boolean.class);
|
|
|
- ArgumentCaptor<String> acSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
-
|
|
|
- verify(client, times(2)).append(acString.capture(), acLong.capture(), acByteArray.capture(), acBufferOffset.capture(), acBufferLength.capture(),
|
|
|
- acSASToken.capture(), acAppendBlobAppend.capture());
|
|
|
- assertThat(Arrays.asList(PATH, PATH)).describedAs("path").isEqualTo(acString.getAllValues());
|
|
|
- assertThat(new HashSet<Long>(Arrays.asList(Long.valueOf(0), Long.valueOf(BUFFER_SIZE)))).describedAs("Position").isEqualTo(new HashSet<Long>(
|
|
|
- acLong.getAllValues()));
|
|
|
- assertThat(Arrays.asList(0, 0)).describedAs("Buffer Offset").isEqualTo(acBufferOffset.getAllValues());
|
|
|
- assertThat(Arrays.asList(BUFFER_SIZE, BUFFER_SIZE)).describedAs("Buffer Length").isEqualTo(acBufferLength.getAllValues());
|
|
|
-
|
|
|
- ArgumentCaptor<String> acFlushString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acFlushLong = ArgumentCaptor.forClass(Long.class);
|
|
|
+ AppendRequestParameters firstReqParameters = new AppendRequestParameters(
|
|
|
+ 0, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+ AppendRequestParameters secondReqParameters = new AppendRequestParameters(
|
|
|
+ BUFFER_SIZE, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(firstReqParameters), any());
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(secondReqParameters), any());
|
|
|
+ // confirm there were only 2 invocations in all
|
|
|
+ verify(client, times(2)).append(
|
|
|
+ eq(PATH), any(byte[].class), any(), any());
|
|
|
+
|
|
|
+ ArgumentCaptor<String> acFlushPath = ArgumentCaptor.forClass(String.class);
|
|
|
+ ArgumentCaptor<Long> acFlushPosition = ArgumentCaptor.forClass(Long.class);
|
|
|
ArgumentCaptor<Boolean> acFlushRetainUnCommittedData = ArgumentCaptor.forClass(Boolean.class);
|
|
|
ArgumentCaptor<Boolean> acFlushClose = ArgumentCaptor.forClass(Boolean.class);
|
|
|
ArgumentCaptor<String> acFlushSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
|
|
|
- verify(client, times(1)).flush(acFlushString.capture(), acFlushLong.capture(), acFlushRetainUnCommittedData.capture(), acFlushClose.capture(),
|
|
|
- acFlushSASToken.capture());
|
|
|
- assertThat(Arrays.asList(PATH)).describedAs("path").isEqualTo(acFlushString.getAllValues());
|
|
|
- assertThat(Arrays.asList(Long.valueOf(2*BUFFER_SIZE))).describedAs("position").isEqualTo(acFlushLong.getAllValues());
|
|
|
+ verify(client, times(1)).flush(acFlushPath.capture(), acFlushPosition.capture(), acFlushRetainUnCommittedData.capture(), acFlushClose.capture(),
|
|
|
+ acFlushSASToken.capture());
|
|
|
+ assertThat(Arrays.asList(PATH)).describedAs("path").isEqualTo(acFlushPath.getAllValues());
|
|
|
+ assertThat(Arrays.asList(Long.valueOf(2*BUFFER_SIZE))).describedAs("position").isEqualTo(acFlushPosition.getAllValues());
|
|
|
assertThat(Arrays.asList(false)).describedAs("RetainUnCommittedData flag").isEqualTo(acFlushRetainUnCommittedData.getAllValues());
|
|
|
assertThat(Arrays.asList(true)).describedAs("Close flag").isEqualTo(acFlushClose.getAllValues());
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -252,12 +246,13 @@ public final class TestAbfsOutputStream {
|
|
|
AbfsPerfTracker tracker = new AbfsPerfTracker("test", accountName1, abfsConf);
|
|
|
|
|
|
when(client.getAbfsPerfTracker()).thenReturn(tracker);
|
|
|
- when(client.append(anyString(), anyLong(), any(byte[].class), anyInt(), anyInt(), any(), anyBoolean())).thenReturn(op);
|
|
|
+ when(client.append(anyString(), any(byte[].class), any(AppendRequestParameters.class), any())).thenReturn(op);
|
|
|
when(client.flush(anyString(), anyLong(), anyBoolean(), anyBoolean(), any())).thenReturn(op);
|
|
|
when(op.getSasToken()).thenReturn("testToken");
|
|
|
when(op.getResult()).thenReturn(httpOp);
|
|
|
|
|
|
- AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0, populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
+ AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0,
|
|
|
+ populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
final byte[] b = new byte[BUFFER_SIZE];
|
|
|
new Random().nextBytes(b);
|
|
|
|
|
@@ -266,22 +261,18 @@ public final class TestAbfsOutputStream {
|
|
|
}
|
|
|
Thread.sleep(1000);
|
|
|
|
|
|
- ArgumentCaptor<String> acString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acLong = ArgumentCaptor.forClass(Long.class);
|
|
|
- ArgumentCaptor<Integer> acBufferOffset = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<Integer> acBufferLength = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<byte[]> acByteArray = ArgumentCaptor.forClass(byte[].class);
|
|
|
- ArgumentCaptor<Boolean> acAppendBlobAppend = ArgumentCaptor.forClass(Boolean.class);
|
|
|
- ArgumentCaptor<String> acSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
-
|
|
|
- verify(client, times(2)).append(acString.capture(), acLong.capture(), acByteArray.capture(), acBufferOffset.capture(), acBufferLength.capture(),
|
|
|
- acSASToken.capture(), acAppendBlobAppend.capture());
|
|
|
- assertThat(Arrays.asList(PATH, PATH)).describedAs("File Path").isEqualTo(acString.getAllValues());
|
|
|
- assertThat(new HashSet<Long>(Arrays.asList(Long.valueOf(0), Long.valueOf(BUFFER_SIZE)))).describedAs("Position in file").isEqualTo(
|
|
|
- new HashSet<Long>(acLong.getAllValues()));
|
|
|
- assertThat(Arrays.asList(0, 0)).describedAs("buffer offset").isEqualTo(acBufferOffset.getAllValues());
|
|
|
- assertThat(Arrays.asList(BUFFER_SIZE, BUFFER_SIZE)).describedAs("buffer length").isEqualTo(acBufferLength.getAllValues());
|
|
|
-
|
|
|
+ AppendRequestParameters firstReqParameters = new AppendRequestParameters(
|
|
|
+ 0, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+ AppendRequestParameters secondReqParameters = new AppendRequestParameters(
|
|
|
+ BUFFER_SIZE, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(firstReqParameters), any());
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(secondReqParameters), any());
|
|
|
+ // confirm there were only 2 invocations in all
|
|
|
+ verify(client, times(2)).append(
|
|
|
+ eq(PATH), any(byte[].class), any(), any());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -299,10 +290,11 @@ public final class TestAbfsOutputStream {
|
|
|
AbfsPerfTracker tracker = new AbfsPerfTracker("test", accountName1, abfsConf);
|
|
|
|
|
|
when(client.getAbfsPerfTracker()).thenReturn(tracker);
|
|
|
- when(client.append(anyString(), anyLong(), any(byte[].class), anyInt(), anyInt(), any(), anyBoolean())).thenReturn(op);
|
|
|
+ when(client.append(anyString(), any(byte[].class), any(AppendRequestParameters.class), any())).thenReturn(op);
|
|
|
when(client.flush(anyString(), anyLong(), anyBoolean(), anyBoolean(), any())).thenReturn(op);
|
|
|
|
|
|
- AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0, populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, true));
|
|
|
+ AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0,
|
|
|
+ populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, true));
|
|
|
final byte[] b = new byte[BUFFER_SIZE];
|
|
|
new Random().nextBytes(b);
|
|
|
|
|
@@ -311,22 +303,18 @@ public final class TestAbfsOutputStream {
|
|
|
}
|
|
|
Thread.sleep(1000);
|
|
|
|
|
|
- ArgumentCaptor<String> acString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acLong = ArgumentCaptor.forClass(Long.class);
|
|
|
- ArgumentCaptor<Integer> acBufferOffset = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<Integer> acBufferLength = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<byte[]> acByteArray = ArgumentCaptor.forClass(byte[].class);
|
|
|
- ArgumentCaptor<Boolean> acAppendBlobAppend = ArgumentCaptor.forClass(Boolean.class);
|
|
|
- ArgumentCaptor<String> acSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
-
|
|
|
- verify(client, times(2)).append(acString.capture(), acLong.capture(), acByteArray.capture(), acBufferOffset.capture(), acBufferLength.capture(),
|
|
|
- acSASToken.capture(), acAppendBlobAppend.capture());
|
|
|
- assertThat(Arrays.asList(PATH, PATH)).describedAs("File Path").isEqualTo(acString.getAllValues());
|
|
|
- assertThat(Arrays.asList(Long.valueOf(0), Long.valueOf(BUFFER_SIZE))).describedAs("File Position").isEqualTo(acLong.getAllValues());
|
|
|
- assertThat(Arrays.asList(0, 0)).describedAs("Buffer Offset").isEqualTo(acBufferOffset.getAllValues());
|
|
|
- assertThat(Arrays.asList(BUFFER_SIZE, BUFFER_SIZE)).describedAs("Buffer Length").isEqualTo(acBufferLength.getAllValues());
|
|
|
- assertThat(Arrays.asList(true, true)).describedAs("is AppendBlob Append").isEqualTo(acAppendBlobAppend.getAllValues());
|
|
|
-
|
|
|
+ AppendRequestParameters firstReqParameters = new AppendRequestParameters(
|
|
|
+ 0, 0, BUFFER_SIZE, APPEND_MODE, true);
|
|
|
+ AppendRequestParameters secondReqParameters = new AppendRequestParameters(
|
|
|
+ BUFFER_SIZE, 0, BUFFER_SIZE, APPEND_MODE, true);
|
|
|
+
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(firstReqParameters), any());
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(secondReqParameters), any());
|
|
|
+ // confirm there were only 2 invocations in all
|
|
|
+ verify(client, times(2)).append(
|
|
|
+ eq(PATH), any(byte[].class), any(), any());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -337,6 +325,7 @@ public final class TestAbfsOutputStream {
|
|
|
|
|
|
AbfsClient client = mock(AbfsClient.class);
|
|
|
AbfsRestOperation op = mock(AbfsRestOperation.class);
|
|
|
+ when(op.getSasToken()).thenReturn("");
|
|
|
AbfsConfiguration abfsConf;
|
|
|
final Configuration conf = new Configuration();
|
|
|
conf.set(accountKey1, accountValue1);
|
|
@@ -344,10 +333,11 @@ public final class TestAbfsOutputStream {
|
|
|
AbfsPerfTracker tracker = new AbfsPerfTracker("test", accountName1, abfsConf);
|
|
|
|
|
|
when(client.getAbfsPerfTracker()).thenReturn(tracker);
|
|
|
- when(client.append(anyString(), anyLong(), any(byte[].class), anyInt(), anyInt(), any(), anyBoolean())).thenReturn(op);
|
|
|
+ when(client.append(anyString(), any(byte[].class), any(AppendRequestParameters.class), any())).thenReturn(op);
|
|
|
when(client.flush(anyString(), anyLong(), anyBoolean(), anyBoolean(), any())).thenReturn(op);
|
|
|
|
|
|
- AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0, populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
+ AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0,
|
|
|
+ populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
final byte[] b = new byte[BUFFER_SIZE];
|
|
|
new Random().nextBytes(b);
|
|
|
|
|
@@ -356,35 +346,31 @@ public final class TestAbfsOutputStream {
|
|
|
}
|
|
|
out.hflush();
|
|
|
|
|
|
- ArgumentCaptor<String> acString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acLong = ArgumentCaptor.forClass(Long.class);
|
|
|
- ArgumentCaptor<Integer> acBufferOffset = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<Integer> acBufferLength = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<byte[]> acByteArray = ArgumentCaptor.forClass(byte[].class);
|
|
|
- ArgumentCaptor<Boolean> acAppendBlobAppend = ArgumentCaptor.forClass(Boolean.class);
|
|
|
- ArgumentCaptor<String> acSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
-
|
|
|
- verify(client, times(2)).append(acString.capture(), acLong.capture(), acByteArray.capture(), acBufferOffset.capture(), acBufferLength.capture(),
|
|
|
- acSASToken.capture(), acAppendBlobAppend.capture());
|
|
|
- assertThat(Arrays.asList(PATH, PATH)).describedAs("File Path").isEqualTo(acString.getAllValues());
|
|
|
- assertThat(new HashSet<Long>(Arrays.asList(Long.valueOf(0), Long.valueOf(BUFFER_SIZE)))).describedAs("File Position").isEqualTo(
|
|
|
- new HashSet<Long>(acLong.getAllValues()));
|
|
|
- assertThat(Arrays.asList(0, 0)).describedAs("Buffer Offset").isEqualTo(acBufferOffset.getAllValues());
|
|
|
- assertThat(Arrays.asList(BUFFER_SIZE, BUFFER_SIZE)).describedAs("Buffer Length").isEqualTo(acBufferLength.getAllValues());
|
|
|
-
|
|
|
- ArgumentCaptor<String> acFlushString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acFlushLong = ArgumentCaptor.forClass(Long.class);
|
|
|
+ AppendRequestParameters firstReqParameters = new AppendRequestParameters(
|
|
|
+ 0, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+ AppendRequestParameters secondReqParameters = new AppendRequestParameters(
|
|
|
+ BUFFER_SIZE, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(firstReqParameters), any());
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(secondReqParameters), any());
|
|
|
+ // confirm there were only 2 invocations in all
|
|
|
+ verify(client, times(2)).append(
|
|
|
+ eq(PATH), any(byte[].class), any(), any());
|
|
|
+
|
|
|
+ ArgumentCaptor<String> acFlushPath = ArgumentCaptor.forClass(String.class);
|
|
|
+ ArgumentCaptor<Long> acFlushPosition = ArgumentCaptor.forClass(Long.class);
|
|
|
ArgumentCaptor<Boolean> acFlushRetainUnCommittedData = ArgumentCaptor.forClass(Boolean.class);
|
|
|
ArgumentCaptor<Boolean> acFlushClose = ArgumentCaptor.forClass(Boolean.class);
|
|
|
ArgumentCaptor<String> acFlushSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
|
|
|
- verify(client, times(1)).flush(acFlushString.capture(), acFlushLong.capture(), acFlushRetainUnCommittedData.capture(), acFlushClose.capture(),
|
|
|
- acFlushSASToken.capture());
|
|
|
- assertThat(Arrays.asList(PATH)).describedAs("path").isEqualTo(acFlushString.getAllValues());
|
|
|
- assertThat(Arrays.asList(Long.valueOf(2*BUFFER_SIZE))).describedAs("position").isEqualTo(acFlushLong.getAllValues());
|
|
|
+ verify(client, times(1)).flush(acFlushPath.capture(), acFlushPosition.capture(), acFlushRetainUnCommittedData.capture(), acFlushClose.capture(),
|
|
|
+ acFlushSASToken.capture());
|
|
|
+ assertThat(Arrays.asList(PATH)).describedAs("path").isEqualTo(acFlushPath.getAllValues());
|
|
|
+ assertThat(Arrays.asList(Long.valueOf(2*BUFFER_SIZE))).describedAs("position").isEqualTo(acFlushPosition.getAllValues());
|
|
|
assertThat(Arrays.asList(false)).describedAs("RetainUnCommittedData flag").isEqualTo(acFlushRetainUnCommittedData.getAllValues());
|
|
|
assertThat(Arrays.asList(false)).describedAs("Close flag").isEqualTo(acFlushClose.getAllValues());
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -401,10 +387,11 @@ public final class TestAbfsOutputStream {
|
|
|
abfsConf = new AbfsConfiguration(conf, accountName1);
|
|
|
AbfsPerfTracker tracker = new AbfsPerfTracker("test", accountName1, abfsConf);
|
|
|
when(client.getAbfsPerfTracker()).thenReturn(tracker);
|
|
|
- when(client.append(anyString(), anyLong(), any(byte[].class), anyInt(), anyInt(), any(), anyBoolean())).thenReturn(op);
|
|
|
+ when(client.append(anyString(), any(byte[].class), any(AppendRequestParameters.class), any())).thenReturn(op);
|
|
|
when(client.flush(anyString(), anyLong(), anyBoolean(), anyBoolean(), any())).thenReturn(op);
|
|
|
|
|
|
- AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0, populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
+ AbfsOutputStream out = new AbfsOutputStream(client, null, PATH, 0,
|
|
|
+ populateAbfsOutputStreamContext(BUFFER_SIZE, true, false, false));
|
|
|
final byte[] b = new byte[BUFFER_SIZE];
|
|
|
new Random().nextBytes(b);
|
|
|
|
|
@@ -415,21 +402,17 @@ public final class TestAbfsOutputStream {
|
|
|
out.flush();
|
|
|
Thread.sleep(1000);
|
|
|
|
|
|
- ArgumentCaptor<String> acString = ArgumentCaptor.forClass(String.class);
|
|
|
- ArgumentCaptor<Long> acLong = ArgumentCaptor.forClass(Long.class);
|
|
|
- ArgumentCaptor<Integer> acBufferOffset = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<Integer> acBufferLength = ArgumentCaptor.forClass(Integer.class);
|
|
|
- ArgumentCaptor<byte[]> acByteArray = ArgumentCaptor.forClass(byte[].class);
|
|
|
- ArgumentCaptor<Boolean> acAppendBlobAppend = ArgumentCaptor.forClass(Boolean.class);
|
|
|
- ArgumentCaptor<String> acSASToken = ArgumentCaptor.forClass(String.class);
|
|
|
-
|
|
|
- verify(client, times(2)).append(acString.capture(), acLong.capture(), acByteArray.capture(), acBufferOffset.capture(), acBufferLength.capture(),
|
|
|
- acSASToken.capture(), acAppendBlobAppend.capture());
|
|
|
- assertThat(Arrays.asList(PATH, PATH)).describedAs("path").isEqualTo(acString.getAllValues());
|
|
|
- assertThat(new HashSet<Long>(Arrays.asList(Long.valueOf(0), Long.valueOf(BUFFER_SIZE)))).describedAs("Position").isEqualTo(
|
|
|
- new HashSet<Long>(acLong.getAllValues()));
|
|
|
- assertThat(Arrays.asList(0, 0)).describedAs("Buffer Offset").isEqualTo(acBufferOffset.getAllValues());
|
|
|
- assertThat(Arrays.asList(BUFFER_SIZE, BUFFER_SIZE)).describedAs("Buffer Length").isEqualTo(acBufferLength.getAllValues());
|
|
|
-
|
|
|
+ AppendRequestParameters firstReqParameters = new AppendRequestParameters(
|
|
|
+ 0, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+ AppendRequestParameters secondReqParameters = new AppendRequestParameters(
|
|
|
+ BUFFER_SIZE, 0, BUFFER_SIZE, APPEND_MODE, false);
|
|
|
+
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(firstReqParameters), any());
|
|
|
+ verify(client, times(1)).append(
|
|
|
+ eq(PATH), any(byte[].class), refEq(secondReqParameters), any());
|
|
|
+ // confirm there were only 2 invocations in all
|
|
|
+ verify(client, times(2)).append(
|
|
|
+ eq(PATH), any(byte[].class), any(), any());
|
|
|
}
|
|
|
}
|