 Chromium Code Reviews
 Chromium Code Reviews Issue 1839283002:
  [Cronet] Purge storage directory if version does not match  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 1839283002:
  [Cronet] Purge storage directory if version does not match  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| Index: components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java | 
| diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..8f7258ade4387a263dc08870c7688a8e66524fff | 
| --- /dev/null | 
| +++ b/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java | 
| @@ -0,0 +1,191 @@ | 
| +// Copyright 2016 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +package org.chromium.net; | 
| + | 
| +import android.test.suitebuilder.annotation.SmallTest; | 
| + | 
| +import org.chromium.base.PathUtils; | 
| +import org.chromium.base.test.util.Feature; | 
| + | 
| +import java.io.BufferedReader; | 
| +import java.io.File; | 
| +import java.io.FileInputStream; | 
| +import java.io.FileOutputStream; | 
| +import java.io.FileReader; | 
| +import java.util.Arrays; | 
| + | 
| +/** | 
| + * Test CronetEngine disk storage. | 
| + */ | 
| +public class DiskStorageTest extends CronetTestBase { | 
| + CronetTestFramework mTestFramework; | 
| + | 
| + @Override | 
| + protected void setUp() throws Exception { | 
| + super.setUp(); | 
| + System.loadLibrary("cronet_tests"); | 
| + assertTrue(NativeTestServer.startNativeTestServer(getContext())); | 
| + } | 
| + | 
| + @Override | 
| + protected void tearDown() throws Exception { | 
| + NativeTestServer.shutdownNativeTestServer(); | 
| + super.tearDown(); | 
| + } | 
| + | 
| + @SmallTest | 
| + @Feature({"Cronet"}) | 
| + @OnlyRunNativeCronet | 
| + public void testReadOnlyStorageDirectory() throws Exception { | 
| + String readOnlyStoragePath = PathUtils.getDataDirectory(getContext()) + "/read_only"; | 
| + File readOnlyStorage = new File(readOnlyStoragePath); | 
| + assertTrue(readOnlyStorage.mkdir()); | 
| + // Setting the storage directory as readonly has no effect. | 
| + assertTrue(readOnlyStorage.setReadOnly()); | 
| + CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 
| + builder.setStoragePath(readOnlyStoragePath); | 
| + builder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK, 1024 * 1024); | 
| + | 
| + mTestFramework = new CronetTestFramework(null, null, getContext(), builder); | 
| + TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 
| + String url = NativeTestServer.getFileURL("/cacheable.txt"); | 
| + UrlRequest.Builder requestBuilder = new UrlRequest.Builder( | 
| + url, callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 
| + UrlRequest urlRequest = requestBuilder.build(); | 
| + urlRequest.start(); | 
| + callback.blockForDone(); | 
| + assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 
| + mTestFramework.mCronetEngine.shutdown(); | 
| + FileInputStream newVersionFile = null; | 
| + // Make sure that version file is in readOnlyStoragePath. | 
| + File versionFile = new File(readOnlyStoragePath + "/version"); | 
| + try { | 
| + newVersionFile = new FileInputStream(versionFile); | 
| + byte[] buffer = new byte[] {0, 0, 0, 0}; | 
| + int bytesRead = newVersionFile.read(buffer, 0, 4); | 
| + assertEquals(4, bytesRead); | 
| + assertTrue(Arrays.equals(new byte[] {1, 0, 0, 0}, buffer)); | 
| + } finally { | 
| + if (newVersionFile != null) { | 
| + newVersionFile.close(); | 
| + } | 
| + } | 
| + } | 
| + | 
| + @SmallTest | 
| + @Feature({"Cronet"}) | 
| + @OnlyRunNativeCronet | 
| + public void testPurgeOldVersion() throws Exception { | 
| + String testStorage = CronetTestFramework.getTestStorage(getContext()); | 
| + File versionFile = new File(testStorage + "/version"); | 
| + FileOutputStream versionOut = null; | 
| + try { | 
| + versionOut = new FileOutputStream(versionFile); | 
| + versionOut.write(new byte[] {0, 0, 0, 0}, 0, 4); | 
| + } finally { | 
| + if (versionOut != null) { | 
| + versionOut.close(); | 
| + } | 
| + } | 
| + File oldPrefsFile = new File(testStorage + "/local_prefs.json"); | 
| + FileOutputStream oldPrefsOut = null; | 
| + try { | 
| + oldPrefsOut = new FileOutputStream(oldPrefsFile); | 
| + String dummy = "dummy content"; | 
| + oldPrefsOut.write(dummy.getBytes(), 0, dummy.length()); | 
| + } finally { | 
| + if (oldPrefsOut != null) { | 
| + oldPrefsOut.close(); | 
| + } | 
| + } | 
| + | 
| + CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 
| + builder.setStoragePath(CronetTestFramework.getTestStorage(getContext())); | 
| + builder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK, 1024 * 1024); | 
| + | 
| + mTestFramework = new CronetTestFramework(null, null, getContext(), builder); | 
| + TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 
| + String url = NativeTestServer.getFileURL("/cacheable.txt"); | 
| + UrlRequest.Builder requestBuilder = new UrlRequest.Builder( | 
| + url, callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 
| + UrlRequest urlRequest = requestBuilder.build(); | 
| + urlRequest.start(); | 
| + callback.blockForDone(); | 
| + assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 
| + mTestFramework.mCronetEngine.shutdown(); | 
| + FileInputStream newVersionFile = null; | 
| + try { | 
| + newVersionFile = new FileInputStream(versionFile); | 
| + byte[] buffer = new byte[] {0, 0, 0, 0}; | 
| + int bytesRead = newVersionFile.read(buffer, 0, 4); | 
| + assertEquals(4, bytesRead); | 
| + assertTrue(Arrays.equals(new byte[] {1, 0, 0, 0}, buffer)); | 
| + } finally { | 
| + if (newVersionFile != null) { | 
| + newVersionFile.close(); | 
| + } | 
| + } | 
| + oldPrefsFile = new File(testStorage + "/local_prefs.json"); | 
| + assertTrue(!oldPrefsFile.exists()); | 
| + } | 
| + | 
| + @SmallTest | 
| + @Feature({"Cronet"}) | 
| + @OnlyRunNativeCronet | 
| + // Tests that if cache version is current, Cronet does not purge the | 
| + // directory. | 
| 
mef
2016/04/05 18:00:50
nit: would this fit onto previous line?
 
xunjieli
2016/04/05 18:22:55
Done.
 | 
| + public void testCacheVersionCurrent() throws Exception { | 
| + // Initialize a CronetEngine and shut it down. | 
| + CronetEngine.Builder builder = new CronetEngine.Builder(getContext()); | 
| + builder.setStoragePath(CronetTestFramework.getTestStorage(getContext())); | 
| + builder.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_DISK, 1024 * 1024); | 
| + | 
| + mTestFramework = new CronetTestFramework(null, null, getContext(), builder); | 
| + TestUrlRequestCallback callback = new TestUrlRequestCallback(); | 
| + String url = NativeTestServer.getFileURL("/cacheable.txt"); | 
| + UrlRequest.Builder requestBuilder = new UrlRequest.Builder( | 
| + url, callback, callback.getExecutor(), mTestFramework.mCronetEngine); | 
| + UrlRequest urlRequest = requestBuilder.build(); | 
| + urlRequest.start(); | 
| + callback.blockForDone(); | 
| + assertEquals(200, callback.mResponseInfo.getHttpStatusCode()); | 
| + mTestFramework.mCronetEngine.shutdown(); | 
| + | 
| + // Create a dummy file in storage directory. | 
| + String testStorage = CronetTestFramework.getTestStorage(getContext()); | 
| + File dummyFile = new File(testStorage + "/dummy.json"); | 
| + FileOutputStream dummyFileOut = null; | 
| + String dummyContent = "dummy content"; | 
| + try { | 
| + dummyFileOut = new FileOutputStream(dummyFile); | 
| + dummyFileOut.write(dummyContent.getBytes(), 0, dummyContent.length()); | 
| + } finally { | 
| + if (dummyFileOut != null) { | 
| + dummyFileOut.close(); | 
| + } | 
| + } | 
| + | 
| + // Creates a new CronetEngine and make a request. | 
| + CronetEngine engine = builder.build(); | 
| + TestUrlRequestCallback callback2 = new TestUrlRequestCallback(); | 
| + String url2 = NativeTestServer.getFileURL("/cacheable.txt"); | 
| + UrlRequest.Builder requestBuilder2 = | 
| + new UrlRequest.Builder(url2, callback2, callback2.getExecutor(), engine); | 
| + UrlRequest urlRequest2 = requestBuilder2.build(); | 
| + urlRequest2.start(); | 
| + callback2.blockForDone(); | 
| + assertEquals(200, callback2.mResponseInfo.getHttpStatusCode()); | 
| + engine.shutdown(); | 
| + // Dummy file still exists. | 
| + BufferedReader reader = new BufferedReader(new FileReader(dummyFile)); | 
| + StringBuilder stringBuilder = new StringBuilder(); | 
| + String line; | 
| + while ((line = reader.readLine()) != null) { | 
| + stringBuilder.append(line); | 
| + } | 
| + reader.close(); | 
| + assertEquals(dummyContent, stringBuilder.toString()); | 
| + } | 
| +} |