Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1531)

Unified Diff: chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java

Issue 2033953002: Fix DexLoaderTest#testLoadAfterDeleteCachedDexes() flakiness (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/webapk/shell_apk/javatests/dex_optimizer/BUILD.gn ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java
diff --git a/chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java b/chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java
index 1e77656b4ab66fced3d13a2deb9f8088f3a7bf47..a002a794c4696b6b739cc68e2a034825ca8d8c4f 100644
--- a/chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java
+++ b/chrome/android/webapk/shell_apk/javatests/src/org/chromium/webapk/shell_apk/DexLoaderTest.java
@@ -42,15 +42,18 @@ public class DexLoaderTest extends InstrumentationTestCase {
"org.chromium.webapk.shell_apk.test.dex_optimizer.DexOptimizerServiceImpl";
/**
- * Name of the dex file in DexOptimizer.apk.
+ * Name of dex files in DexOptimizer.apk.
*/
private static final String DEX_ASSET_NAME = "canary.dex";
+ private static final String DEX_ASSET_NAME2 = "canary2.dex";
/**
- * Class to load to check whether dex is valid.
+ * Classes to load to check whether dex is valid.
*/
private static final String CANARY_CLASS_NAME =
"org.chromium.webapk.shell_apk.test.canary.Canary";
+ private static final String CANARY_CLASS_NAME2 =
+ "org.chromium.webapk.shell_apk.test.canary.Canary2";
private Context mContext;
private Context mRemoteContext;
@@ -217,47 +220,33 @@ public class DexLoaderTest extends InstrumentationTestCase {
}
/**
- * Test that {@link DexLoader#load()} re-extracts the dex file from the APK after a call to
- * {@link DexLoader#deleteCachedDexes()}.
+ * Test loading a dex file from a directory which was previously used for loading a different
+ * dex file.
*/
@MediumTest
- public void testLoadAfterDeleteCachedDexes() {
+ public void testLoadDifferentDexInLocalDataDir() {
assertTrue(mLocalDexDir.mkdir());
- {
- // Load dex the first time. This should extract the dex file from the APK's assets and
- // generate the optimized dex file.
- FileMonitor localDexDirMonitor = new FileMonitor(mLocalDexDir);
- localDexDirMonitor.startWatching();
- ClassLoader loader = DexLoader.load(
- mRemoteContext, DEX_ASSET_NAME, CANARY_CLASS_NAME, null, mLocalDexDir);
- localDexDirMonitor.stopWatching();
-
- assertNotNull(loader);
- assertTrue(canLoadCanaryClass(loader));
+ // Load canary.dex
+ ClassLoader loader1 = DexLoader.load(
+ mRemoteContext, DEX_ASSET_NAME, CANARY_CLASS_NAME, null, mLocalDexDir);
+ assertNotNull(loader1);
+ assertTrue(canLoadCanaryClass(loader1));
- assertTrue(localDexDirMonitor.mReadPaths.contains(DEX_ASSET_NAME));
- assertTrue(localDexDirMonitor.mModifiedPaths.contains(DEX_ASSET_NAME));
- }
+ File canaryDexFile1 = new File(mLocalDexDir, DEX_ASSET_NAME);
+ assertTrue(canaryDexFile1.exists());
DexLoader.deleteCachedDexes(mLocalDexDir);
- {
- // Load dex a second time.
- FileMonitor localDexDirMonitor = new FileMonitor(mLocalDexDir);
- localDexDirMonitor.startWatching();
- ClassLoader loader = DexLoader.load(
- mRemoteContext, DEX_ASSET_NAME, CANARY_CLASS_NAME, null, mLocalDexDir);
- localDexDirMonitor.stopWatching();
+ ClassLoader loader2 = DexLoader.load(
+ mRemoteContext, DEX_ASSET_NAME2, CANARY_CLASS_NAME2, null, mLocalDexDir);
+ assertNotNull(loader2);
+ assertTrue(canLoadClass(loader2, CANARY_CLASS_NAME2));
- // The returned ClassLoader should be valid.
- assertNotNull(loader);
- assertTrue(canLoadCanaryClass(loader));
-
- // We should have re-extracted the dex from the APK's assets.
- assertTrue(localDexDirMonitor.mReadPaths.contains(DEX_ASSET_NAME));
- assertTrue(localDexDirMonitor.mModifiedPaths.contains(DEX_ASSET_NAME));
- }
+ // canary2.dex should have been extracted and the previously extracted canary.dex file
+ // should have been deleted.
+ assertTrue(new File(mLocalDexDir, DEX_ASSET_NAME2).exists());
+ assertFalse(canaryDexFile1.exists());
}
/**
@@ -325,8 +314,13 @@ public class DexLoaderTest extends InstrumentationTestCase {
/** Returns whether the ClassLoader can load {@link CANARY_CLASS_NAME} */
private boolean canLoadCanaryClass(ClassLoader loader) {
+ return canLoadClass(loader, CANARY_CLASS_NAME);
+ }
+
+ /** Returns whether the ClassLoader can load a class */
+ private boolean canLoadClass(ClassLoader loader, String className) {
try {
- loader.loadClass(CANARY_CLASS_NAME);
+ loader.loadClass(className);
return true;
} catch (Exception e) {
return false;
« no previous file with comments | « chrome/android/webapk/shell_apk/javatests/dex_optimizer/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698