Loading tests/BlobStoreTestUtils/src/com/android/utils/blob/DummyBlobData.java +7 −34 Original line number Original line Diff line number Diff line Loading @@ -15,6 +15,9 @@ */ */ package com.android.utils.blob; package com.android.utils.blob; import static com.android.utils.blob.Utils.BUFFER_SIZE_BYTES; import static com.android.utils.blob.Utils.copy; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat; import android.app.blob.BlobHandle; import android.app.blob.BlobHandle; Loading @@ -23,22 +26,17 @@ import android.content.Context; import android.os.FileUtils; import android.os.FileUtils; import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor; import java.io.BufferedInputStream; import java.io.File; import java.io.File; import java.io.FileDescriptor; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.io.RandomAccessFile; import java.nio.file.Files; import java.security.MessageDigest; import java.security.MessageDigest; import java.util.Random; import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit; public class DummyBlobData { public class DummyBlobData { private static final long DEFAULT_SIZE_BYTES = 10 * 1024L * 1024L; private static final long DEFAULT_SIZE_BYTES = 10 * 1024L * 1024L; private static final int BUFFER_SIZE_BYTES = 16 * 1024; private final Context mContext; private final Context mContext; private final Random mRandom; private final Random mRandom; Loading Loading @@ -83,7 +81,7 @@ public class DummyBlobData { } } public BlobHandle getBlobHandle() throws Exception { public BlobHandle getBlobHandle() throws Exception { return BlobHandle.createWithSha256(createSha256Digest(mFile), mLabel, return BlobHandle.createWithSha256(mFileDigest, mLabel, mExpiryTimeMs, "test_tag"); mExpiryTimeMs, "test_tag"); } } Loading @@ -106,11 +104,7 @@ public class DummyBlobData { public void writeToSession(BlobStoreManager.Session session, public void writeToSession(BlobStoreManager.Session session, long offsetBytes, long lengthBytes) throws Exception { long offsetBytes, long lengthBytes) throws Exception { try (FileInputStream in = new FileInputStream(mFile)) { try (FileInputStream in = new FileInputStream(mFile)) { in.getChannel().position(offsetBytes); Utils.writeToSession(session, in, offsetBytes, lengthBytes); try (FileOutputStream out = new ParcelFileDescriptor.AutoCloseOutputStream( session.openWrite(offsetBytes, lengthBytes))) { copy(in, out, lengthBytes); } } } } } Loading @@ -123,16 +117,8 @@ public class DummyBlobData { } } } } private void copy(InputStream in, OutputStream out, long lengthBytes) throws Exception { public ParcelFileDescriptor openForRead() throws Exception { final byte[] buffer = new byte[BUFFER_SIZE_BYTES]; return ParcelFileDescriptor.open(mFile, ParcelFileDescriptor.MODE_READ_ONLY); long bytesWrittern = 0; while (bytesWrittern < lengthBytes) { final int toWrite = (bytesWrittern + buffer.length <= lengthBytes) ? buffer.length : (int) (lengthBytes - bytesWrittern); in.read(buffer, 0, toWrite); out.write(buffer, 0, toWrite); bytesWrittern += toWrite; } } } public void readFromSessionAndVerifyBytes(BlobStoreManager.Session session, public void readFromSessionAndVerifyBytes(BlobStoreManager.Session session, Loading Loading @@ -198,19 +184,6 @@ public class DummyBlobData { return digest.digest(); return digest.digest(); } } private byte[] createSha256Digest(File file) throws Exception { final MessageDigest digest = MessageDigest.getInstance("SHA-256"); try (BufferedInputStream in = new BufferedInputStream( Files.newInputStream(file.toPath()))) { final byte[] buffer = new byte[BUFFER_SIZE_BYTES]; int bytesRead; while ((bytesRead = in.read(buffer)) > 0) { digest.update(buffer, 0, bytesRead); } } return digest.digest(); } private void writeRandomData(RandomAccessFile file, long fileSize) private void writeRandomData(RandomAccessFile file, long fileSize) throws Exception { throws Exception { long bytesWritten = 0; long bytesWritten = 0; Loading tests/BlobStoreTestUtils/src/com/android/utils/blob/Utils.java 0 → 100644 +59 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2020 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.utils.blob; import android.app.blob.BlobStoreManager; import android.os.ParcelFileDescriptor; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Utils { public static final int BUFFER_SIZE_BYTES = 16 * 1024; public static void copy(InputStream in, OutputStream out, long lengthBytes) throws IOException { final byte[] buffer = new byte[BUFFER_SIZE_BYTES]; long bytesWrittern = 0; while (bytesWrittern < lengthBytes) { final int toWrite = (bytesWrittern + buffer.length <= lengthBytes) ? buffer.length : (int) (lengthBytes - bytesWrittern); in.read(buffer, 0, toWrite); out.write(buffer, 0, toWrite); bytesWrittern += toWrite; } } public static void writeToSession(BlobStoreManager.Session session, ParcelFileDescriptor input, long lengthBytes) throws IOException { try (FileInputStream in = new ParcelFileDescriptor.AutoCloseInputStream(input)) { writeToSession(session, in, 0, lengthBytes); } } public static void writeToSession(BlobStoreManager.Session session, FileInputStream in, long offsetBytes, long lengthBytes) throws IOException { in.getChannel().position(offsetBytes); try (FileOutputStream out = new ParcelFileDescriptor.AutoCloseOutputStream( session.openWrite(offsetBytes, lengthBytes))) { copy(in, out, lengthBytes); } } } Loading
tests/BlobStoreTestUtils/src/com/android/utils/blob/DummyBlobData.java +7 −34 Original line number Original line Diff line number Diff line Loading @@ -15,6 +15,9 @@ */ */ package com.android.utils.blob; package com.android.utils.blob; import static com.android.utils.blob.Utils.BUFFER_SIZE_BYTES; import static com.android.utils.blob.Utils.copy; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat; import android.app.blob.BlobHandle; import android.app.blob.BlobHandle; Loading @@ -23,22 +26,17 @@ import android.content.Context; import android.os.FileUtils; import android.os.FileUtils; import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor; import java.io.BufferedInputStream; import java.io.File; import java.io.File; import java.io.FileDescriptor; import java.io.FileDescriptor; import java.io.FileInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; import java.io.RandomAccessFile; import java.nio.file.Files; import java.security.MessageDigest; import java.security.MessageDigest; import java.util.Random; import java.util.Random; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit; public class DummyBlobData { public class DummyBlobData { private static final long DEFAULT_SIZE_BYTES = 10 * 1024L * 1024L; private static final long DEFAULT_SIZE_BYTES = 10 * 1024L * 1024L; private static final int BUFFER_SIZE_BYTES = 16 * 1024; private final Context mContext; private final Context mContext; private final Random mRandom; private final Random mRandom; Loading Loading @@ -83,7 +81,7 @@ public class DummyBlobData { } } public BlobHandle getBlobHandle() throws Exception { public BlobHandle getBlobHandle() throws Exception { return BlobHandle.createWithSha256(createSha256Digest(mFile), mLabel, return BlobHandle.createWithSha256(mFileDigest, mLabel, mExpiryTimeMs, "test_tag"); mExpiryTimeMs, "test_tag"); } } Loading @@ -106,11 +104,7 @@ public class DummyBlobData { public void writeToSession(BlobStoreManager.Session session, public void writeToSession(BlobStoreManager.Session session, long offsetBytes, long lengthBytes) throws Exception { long offsetBytes, long lengthBytes) throws Exception { try (FileInputStream in = new FileInputStream(mFile)) { try (FileInputStream in = new FileInputStream(mFile)) { in.getChannel().position(offsetBytes); Utils.writeToSession(session, in, offsetBytes, lengthBytes); try (FileOutputStream out = new ParcelFileDescriptor.AutoCloseOutputStream( session.openWrite(offsetBytes, lengthBytes))) { copy(in, out, lengthBytes); } } } } } Loading @@ -123,16 +117,8 @@ public class DummyBlobData { } } } } private void copy(InputStream in, OutputStream out, long lengthBytes) throws Exception { public ParcelFileDescriptor openForRead() throws Exception { final byte[] buffer = new byte[BUFFER_SIZE_BYTES]; return ParcelFileDescriptor.open(mFile, ParcelFileDescriptor.MODE_READ_ONLY); long bytesWrittern = 0; while (bytesWrittern < lengthBytes) { final int toWrite = (bytesWrittern + buffer.length <= lengthBytes) ? buffer.length : (int) (lengthBytes - bytesWrittern); in.read(buffer, 0, toWrite); out.write(buffer, 0, toWrite); bytesWrittern += toWrite; } } } public void readFromSessionAndVerifyBytes(BlobStoreManager.Session session, public void readFromSessionAndVerifyBytes(BlobStoreManager.Session session, Loading Loading @@ -198,19 +184,6 @@ public class DummyBlobData { return digest.digest(); return digest.digest(); } } private byte[] createSha256Digest(File file) throws Exception { final MessageDigest digest = MessageDigest.getInstance("SHA-256"); try (BufferedInputStream in = new BufferedInputStream( Files.newInputStream(file.toPath()))) { final byte[] buffer = new byte[BUFFER_SIZE_BYTES]; int bytesRead; while ((bytesRead = in.read(buffer)) > 0) { digest.update(buffer, 0, bytesRead); } } return digest.digest(); } private void writeRandomData(RandomAccessFile file, long fileSize) private void writeRandomData(RandomAccessFile file, long fileSize) throws Exception { throws Exception { long bytesWritten = 0; long bytesWritten = 0; Loading
tests/BlobStoreTestUtils/src/com/android/utils/blob/Utils.java 0 → 100644 +59 −0 Original line number Original line Diff line number Diff line /* * Copyright (C) 2020 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.utils.blob; import android.app.blob.BlobStoreManager; import android.os.ParcelFileDescriptor; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Utils { public static final int BUFFER_SIZE_BYTES = 16 * 1024; public static void copy(InputStream in, OutputStream out, long lengthBytes) throws IOException { final byte[] buffer = new byte[BUFFER_SIZE_BYTES]; long bytesWrittern = 0; while (bytesWrittern < lengthBytes) { final int toWrite = (bytesWrittern + buffer.length <= lengthBytes) ? buffer.length : (int) (lengthBytes - bytesWrittern); in.read(buffer, 0, toWrite); out.write(buffer, 0, toWrite); bytesWrittern += toWrite; } } public static void writeToSession(BlobStoreManager.Session session, ParcelFileDescriptor input, long lengthBytes) throws IOException { try (FileInputStream in = new ParcelFileDescriptor.AutoCloseInputStream(input)) { writeToSession(session, in, 0, lengthBytes); } } public static void writeToSession(BlobStoreManager.Session session, FileInputStream in, long offsetBytes, long lengthBytes) throws IOException { in.getChannel().position(offsetBytes); try (FileOutputStream out = new ParcelFileDescriptor.AutoCloseOutputStream( session.openWrite(offsetBytes, lengthBytes))) { copy(in, out, lengthBytes); } } }