Merge "Add a test for createDocument and getPartialObject."
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
index 9c726ba..0d81a30 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java
@@ -188,6 +188,15 @@
}
}
+ @VisibleForTesting
+ long getPartialObject(int deviceId, int objectHandle, long offset, long size, byte[] buffer)
+ throws IOException {
+ final MtpDevice device = getDevice(deviceId);
+ synchronized (device) {
+ return device.getPartialObject(objectHandle, offset, size, buffer);
+ }
+ }
+
byte[] getThumbnail(int deviceId, int objectHandle) throws IOException {
final MtpDevice device = getDevice(deviceId);
synchronized (device) {
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
index 7527f54..25e9900 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpManagerTest.java
@@ -21,8 +21,10 @@
import android.hardware.usb.UsbManager;
import android.mtp.MtpConstants;
import android.mtp.MtpEvent;
+import android.mtp.MtpObjectInfo;
import android.os.CancellationSignal;
import android.os.OperationCanceledException;
+import android.os.ParcelFileDescriptor;
import android.os.SystemClock;
import android.test.InstrumentationTestCase;
@@ -98,6 +100,52 @@
}
}
+ public void testCreateDocumentAndGetPartialObject() throws Exception {
+ final ParcelFileDescriptor[] fds = ParcelFileDescriptor.createPipe();
+ final ParcelFileDescriptor.AutoCloseOutputStream stream =
+ new ParcelFileDescriptor.AutoCloseOutputStream(fds[1]);
+ int storageId = 0;
+ for (final MtpDeviceRecord record : mManager.getDevices()) {
+ if (record.deviceId == mUsbDevice.getDeviceId()) {
+ storageId = record.roots[0].mStorageId;
+ break;
+ }
+ }
+ assertTrue("Valid storage not found.", storageId != 0);
+ final String testFileName = "MtpManagerTest_testFile.txt";
+ for (final int handle : mManager.getObjectHandles(
+ mUsbDevice.getDeviceId(), storageId, MtpManager.OBJECT_HANDLE_ROOT_CHILDREN)) {
+ if (mManager.getObjectInfo(mUsbDevice.getDeviceId(), handle)
+ .getName().equals(testFileName)) {
+ mManager.deleteDocument(mUsbDevice.getDeviceId(), handle);
+ break;
+ }
+ }
+ final byte[] expectedBytes = "Hello Android!".getBytes("ascii");
+ final int objectHandle;
+ try {
+ stream.write(expectedBytes);
+ objectHandle = mManager.createDocument(
+ mUsbDevice.getDeviceId(),
+ new MtpObjectInfo.Builder()
+ .setStorageId(storageId)
+ .setName(testFileName)
+ .setCompressedSize(expectedBytes.length)
+ .setFormat(MtpConstants.FORMAT_TEXT)
+ .build(),
+ fds[0]);
+ } finally {
+ stream.close();
+ }
+ final byte[] bytes = new byte[100];
+ assertEquals(5, mManager.getPartialObject(
+ mUsbDevice.getDeviceId(), objectHandle, 0, 5, bytes));
+ assertEquals("Hello", new String(bytes, 0, 5, "ascii"));
+ assertEquals(8, mManager.getPartialObject(
+ mUsbDevice.getDeviceId(), objectHandle, 6, 100, bytes));
+ assertEquals("Android!", new String(bytes, 0, 8, "ascii"));
+ }
+
private Context getContext() {
return getInstrumentation().getContext();
}