Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5854a6c authored by Daichi Hirono's avatar Daichi Hirono Committed by android-build-merger
Browse files

Merge "Regard timeout as an error in the MtpDocumentsProvider test." into nyc-dev

am: aa0fa384

* commit 'aa0fa384':
  Regard timeout as an error in the MtpDocumentsProvider test.
parents aa86a3a4 aa0fa384
Loading
Loading
Loading
Loading
+2 −5
Original line number Original line Diff line number Diff line
@@ -36,7 +36,6 @@ import android.provider.DocumentsContract.Root;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract;
import android.provider.DocumentsProvider;
import android.provider.DocumentsProvider;
import android.provider.Settings;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.util.Log;
import android.util.Log;


import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
@@ -48,6 +47,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.HashMap;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;
import java.util.concurrent.TimeoutException;


/**
/**
 * DocumentsProvider for MTP devices.
 * DocumentsProvider for MTP devices.
@@ -426,7 +426,7 @@ public class MtpDocumentsProvider extends DocumentsProvider {
                    closeDeviceInternal(id);
                    closeDeviceInternal(id);
                }
                }
                mRootScanner.pause();
                mRootScanner.pause();
            } catch (InterruptedException|IOException e) {
            } catch (InterruptedException | IOException | TimeoutException e) {
                // It should fail unit tests by throwing runtime exception.
                // It should fail unit tests by throwing runtime exception.
                throw new RuntimeException(e);
                throw new RuntimeException(e);
            } finally {
            } finally {
@@ -464,9 +464,6 @@ public class MtpDocumentsProvider extends DocumentsProvider {
        getDeviceToolkit(deviceId).close();
        getDeviceToolkit(deviceId).close();
        mDeviceToolkits.remove(deviceId);
        mDeviceToolkits.remove(deviceId);
        mMtpManager.closeDevice(deviceId);
        mMtpManager.closeDevice(deviceId);
        if (mDeviceToolkits.size() == 0) {
            mRootScanner.pause();
        }
    }
    }


    private DeviceToolkit getDeviceToolkit(int deviceId) throws FileNotFoundException {
    private DeviceToolkit getDeviceToolkit(int deviceId) throws FileNotFoundException {
+12 −4
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;


final class RootScanner {
final class RootScanner {
    /**
    /**
@@ -95,16 +96,20 @@ final class RootScanner {
     * Stops background thread and wait for its termination.
     * Stops background thread and wait for its termination.
     * @throws InterruptedException
     * @throws InterruptedException
     */
     */
    synchronized void pause() throws InterruptedException {
    synchronized void pause() throws InterruptedException, TimeoutException {
        if (mExecutor == null) {
        if (mExecutor == null) {
            return;
            return;
        }
        }
        mExecutor.shutdownNow();
        mExecutor.shutdownNow();
        try {
            if (!mExecutor.awaitTermination(AWAIT_TERMINATION_TIMEOUT, TimeUnit.MILLISECONDS)) {
            if (!mExecutor.awaitTermination(AWAIT_TERMINATION_TIMEOUT, TimeUnit.MILLISECONDS)) {
            Log.e(MtpDocumentsProvider.TAG, "Failed to terminate RootScanner's background thread.");
                throw new TimeoutException(
                        "Timeout for terminating RootScanner's background thread.");
            }
            }
        } finally {
            mExecutor = null;
            mExecutor = null;
        }
        }
    }


    /**
    /**
     * Runnable to scan roots and update the database information.
     * Runnable to scan roots and update the database information.
@@ -173,6 +178,9 @@ final class RootScanner {
                }
                }
                mFirstScanCompleted.countDown();
                mFirstScanCompleted.countDown();
                pollingCount++;
                pollingCount++;
                if (devices.length == 0) {
                    break;
                }
                try {
                try {
                    // Use SHORT_POLLING_PERIOD for the first SHORT_POLLING_TIMES because it is
                    // Use SHORT_POLLING_PERIOD for the first SHORT_POLLING_TIMES because it is
                    // more likely to add new root just after the device is added.
                    // more likely to add new root just after the device is added.
+0 −2
Original line number Original line Diff line number Diff line
@@ -262,11 +262,9 @@ public class MtpDocumentsProviderTest extends AndroidTestCase {
                null));
                null));
        {
        {
            mProvider.openDevice(0);
            mProvider.openDevice(0);
            mProvider.resumeRootScanner();
            mResolver.waitForNotification(ROOTS_URI, 1);
            mResolver.waitForNotification(ROOTS_URI, 1);


            mProvider.openDevice(1);
            mProvider.openDevice(1);
            mProvider.resumeRootScanner();
            mResolver.waitForNotification(ROOTS_URI, 2);
            mResolver.waitForNotification(ROOTS_URI, 2);


            final Cursor cursor = mProvider.queryRoots(null);
            final Cursor cursor = mProvider.queryRoots(null);
+1 −0
Original line number Original line Diff line number Diff line
@@ -48,6 +48,7 @@ public class PipeManagerTest extends AndroidTestCase {
    @Override
    @Override
    protected void tearDown() throws Exception {
    protected void tearDown() throws Exception {
        assertTrue(mPipeManager.close());
        assertTrue(mPipeManager.close());
        mDatabase.close();
    }
    }


    public void testReadDocument_basic() throws Exception {
    public void testReadDocument_basic() throws Exception {