File tree Expand file tree Collapse file tree 2 files changed +20
-16
lines changed
androidTest/java/com/duckduckgo/app/httpsupgrade
main/java/com/duckduckgo/app/httpsupgrade Expand file tree Collapse file tree 2 files changed +20
-16
lines changed Original file line number Diff line number Diff line change 1616
1717package com.duckduckgo.app.httpsupgrade
1818
19- import android.arch.core.executor.testing.InstantTaskExecutorRule
2019import android.net.Uri
21- import com.duckduckgo.app.InstantSchedulersRule
2220import com.duckduckgo.app.httpsupgrade.api.HttpsBloomFilterFactory
2321import com.duckduckgo.app.httpsupgrade.db.HttpsWhitelistDao
2422import com.nhaarman.mockito_kotlin.mock
2523import com.nhaarman.mockito_kotlin.whenever
2624import org.junit.Assert.assertFalse
2725import org.junit.Assert.assertTrue
2826import org.junit.Before
29- import org.junit.Rule
3027import org.junit.Test
3128
3229class HttpsUpgraderTest {
3330
34- @get:Rule
35- @Suppress(" unused" )
36- var instantTaskExecutorRule = InstantTaskExecutorRule ()
37-
38- @get:Rule
39- @Suppress(" unused" )
40- val schedulers = InstantSchedulersRule ()
41-
4231 lateinit var testee: HttpsUpgrader
4332
4433 private var mockHttpsBloomFilterFactory: HttpsBloomFilterFactory = mock()
@@ -49,6 +38,7 @@ class HttpsUpgraderTest {
4938 fun before () {
5039 whenever(mockHttpsBloomFilterFactory.create()).thenReturn(bloomFilter)
5140 testee = HttpsUpgraderImpl (mockWhitelistDao, mockHttpsBloomFilterFactory)
41+ testee.reloadData()
5242 }
5343
5444 @Test
Original file line number Diff line number Diff line change @@ -23,6 +23,8 @@ import com.duckduckgo.app.global.isHttps
2323import com.duckduckgo.app.httpsupgrade.api.HttpsBloomFilterFactory
2424import com.duckduckgo.app.httpsupgrade.db.HttpsWhitelistDao
2525import timber.log.Timber
26+ import java.util.concurrent.locks.ReentrantLock
27+ import kotlin.concurrent.thread
2628
2729interface HttpsUpgrader {
2830
@@ -42,8 +44,13 @@ class HttpsUpgraderImpl(
4244) : HttpsUpgrader {
4345
4446 private var httpsBloomFilter: BloomFilter ? = null
45- private var dataLoaded = false
47+ private val reloadLock = ReentrantLock ()
4648
49+ init {
50+ thread {
51+ reloadData()
52+ }
53+ }
4754
4855 @WorkerThread
4956 override fun shouldUpgrade (uri : Uri ): Boolean {
@@ -52,9 +59,7 @@ class HttpsUpgraderImpl(
5259 return false
5360 }
5461
55- if (! dataLoaded) {
56- reloadData()
57- }
62+ waitForAnyReloadsToComplete()
5863
5964 val host = uri.host
6065 if (whitelistedDao.contains(host)) {
@@ -75,9 +80,18 @@ class HttpsUpgraderImpl(
7580 return false
7681 }
7782
83+ private fun waitForAnyReloadsToComplete () {
84+ // wait for lock (by locking and unlocking) before continuing
85+ if (reloadLock.isLocked) {
86+ reloadLock.lock()
87+ reloadLock.unlock()
88+ }
89+ }
90+
7891 override fun reloadData () {
79- dataLoaded = true
92+ reloadLock.lock()
8093 httpsBloomFilter = bloomFactory.create()
94+ reloadLock.unlock()
8195 }
8296
8397 companion object {
You can’t perform that action at this time.
0 commit comments