This should make the timeout logic clearer, without changing the logic at
all. This does increase the timeouts, with the second pass using 1 minute
instead of 30 seconds, and the third pass using 10 minutes instead of 1
minute. Since this often or usually runs in the background, it should
allow some pretty long timeouts in the worst case.
It seems that ARM emulators timeout even when just trying to run the
assumeTrue() tests via Espresso. There needs to be one test still enabled
in the file, otherwise, the run fails with:
org.fdroid.fdroid.MainActivityEspressoTest > initializationError[Nexus_One_API_19(AVD) - 4.4.2] FAILED
java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191)
The two excluded URLs seem to always resolve to IPv6 addresses first, then
fail since there isn't IPv6 connectivity. Donno why, but only on old android
versions, so just skip them there.
Compression seems to just give stacktraces:
HttpDownloaderTest I URL: https://en.wikipedia.org/wiki/Index.html
TestRunner I failed: downloadUninterruptedTest(org.fdroid.fdroid.net.HttpDownloaderTest)
I ----- begin exception -----
I java.io.EOFException
I at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:206)
I at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:98)
I at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81)
I at libcore.net.http.HttpEngine.initContentStream(HttpEngine.java:541)
I at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:844)
I at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
I at libcore.net.http.HttpURLConnectionImpl.getHeaderField(HttpURLConnectionImpl.java:139)
I at libcore.net.http.HttpsURLConnectionImpl.getHeaderField(HttpsURLConnectionImpl.java:246)
I at org.fdroid.fdroid.net.HttpDownloader.download(HttpDownloader.java:111)
I at org.fdroid.fdroid.net.HttpDownloaderTest.downloadUninterruptedTest(HttpDownloaderTest.java:74)
I at java.lang.reflect.Method.invokeNative(Native Method)
I at java.lang.reflect.Method.invoke(Method.java:511)
I at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
I at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
I at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
I at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
I at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
I at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
I at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
I at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
I at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
I at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
I at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
I at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
I at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
I at org.junit.runners.Suite.runChild(Suite.java:128)
I at org.junit.runners.Suite.runChild(Suite.java:27)
I at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
I at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
I at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
I at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
I at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
I at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
I at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
I at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
I at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:56)
I at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:384)
I at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
This is insurance to make sure that packageNames are not abused for
exploiting F-Droid. The database queries already use SQL Prepared
Statements, but who know what else might be exploitable.
fdroid/fdroidclient#1588
Keep PRNGFixes as it is since it is security sensitive, standardized
code from Google. While F-Droid never wants to do anything with
hardware IDs at all, this code uses the Build.SERIAL as a seed for the
random number generator, so it is safe privacy-wise.
ACRA E ACRA caught a IllegalStateException for org.fdroid.fdroid.debug
E java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread.
E at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:62)
E at android.os.Handler.handleCallback(Handler.java:751)
E at android.os.Handler.dispatchMessage(Handler.java:95)
E at android.os.Looper.loop(Looper.java:154)
E at android.app.ActivityThread.main(ActivityThread.java:6128)
E at java.lang.reflect.Method.invoke(Native Method)
E at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
E at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
E Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.hashCode()' on a
null object reference
E at org.fdroid.fdroid.localrepo.peers.BonjourPeer.hashCode(BonjourPeer.java:41)
E at sun.misc.Hashing.singleWordWangJenkinsHash(Hashing.java:48)
E at java.util.HashMap.put(HashMap.java:423)
E at java.util.HashSet.add(HashSet.java:217)
E at rx.internal.operators.OperatorDistinct$1.onNext(OperatorDistinct.java:62)
E at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:202)
E at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:162)
E at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
E ... 7 more
The query was trying to figure out some thing about suggestedVercode
which shouldn't at all be necessary for setting the iconUrl.
The index already contains the icon pointing to the suggested version by
that repository, so we just take that regardless.