Add async BufferedFile and StreamingPacketFile impls
Bug: 245971639
Change-Id: Ief1719262c2cb68819f6feb955e97793f3638ec0
diff --git a/staticlibs/testutils/Android.bp b/staticlibs/testutils/Android.bp
index bcf89b3..3382156 100644
--- a/staticlibs/testutils/Android.bp
+++ b/staticlibs/testutils/Android.bp
@@ -38,6 +38,7 @@
"net-utils-device-common",
"net-utils-device-common-async",
"net-utils-device-common-netlink",
+ "net-utils-device-common-wear",
"modules-utils-build_system",
],
lint: { strict_updatability_linting: true },
diff --git a/staticlibs/testutils/devicetests/com/android/testutils/async/FakeOsAccess.java b/staticlibs/testutils/devicetests/com/android/testutils/async/FakeOsAccess.java
index 1b8e26b..48b57d7 100644
--- a/staticlibs/testutils/devicetests/com/android/testutils/async/FakeOsAccess.java
+++ b/staticlibs/testutils/devicetests/com/android/testutils/async/FakeOsAccess.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.testutils;
+package com.android.testutils.async;
import android.os.ParcelFileDescriptor;
import android.system.StructPollfd;
diff --git a/staticlibs/testutils/devicetests/com/android/testutils/async/RateLimiter.java b/staticlibs/testutils/devicetests/com/android/testutils/async/RateLimiter.java
index 137873d..d5cca0a 100644
--- a/staticlibs/testutils/devicetests/com/android/testutils/async/RateLimiter.java
+++ b/staticlibs/testutils/devicetests/com/android/testutils/async/RateLimiter.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.testutils;
+package com.android.testutils.async;
import com.android.net.module.util.async.OsAccess;
diff --git a/staticlibs/testutils/devicetests/com/android/testutils/async/ReadableDataAnswer.java b/staticlibs/testutils/devicetests/com/android/testutils/async/ReadableDataAnswer.java
new file mode 100644
index 0000000..4bf5527
--- /dev/null
+++ b/staticlibs/testutils/devicetests/com/android/testutils/async/ReadableDataAnswer.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed 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 com.android.testutils.async;
+
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import java.util.ArrayList;
+
+public class ReadableDataAnswer implements Answer {
+ private final ArrayList<byte[]> mBuffers = new ArrayList<>();
+ private int mBufferPos;
+
+ public ReadableDataAnswer(byte[] ... buffers) {
+ for (byte[] buffer : buffers) {
+ addBuffer(buffer);
+ }
+ }
+
+ public void addBuffer(byte[] buffer) {
+ if (buffer.length != 0) {
+ mBuffers.add(buffer);
+ }
+ }
+
+ public int getRemainingSize() {
+ int totalSize = 0;
+ for (byte[] buffer : mBuffers) {
+ totalSize += buffer.length;
+ }
+ return totalSize - mBufferPos;
+ }
+
+ private void cleanupBuffers() {
+ if (!mBuffers.isEmpty() && mBufferPos == mBuffers.get(0).length) {
+ mBuffers.remove(0);
+ mBufferPos = 0;
+ }
+ }
+
+ @Override
+ public Object answer(InvocationOnMock invocation) throws Throwable {
+ cleanupBuffers();
+
+ if (mBuffers.isEmpty()) {
+ return Integer.valueOf(0);
+ }
+
+ byte[] src = mBuffers.get(0);
+
+ byte[] dst = invocation.<byte[]>getArgument(0);
+ int dstPos = invocation.<Integer>getArgument(1);
+ int dstLen = invocation.<Integer>getArgument(2);
+
+ int copyLen = Math.min(dstLen, src.length - mBufferPos);
+ System.arraycopy(src, mBufferPos, dst, dstPos, copyLen);
+ mBufferPos += copyLen;
+
+ cleanupBuffers();
+ return Integer.valueOf(copyLen);
+ }
+}