Skip to content

Commit 7c0f13c

Browse files
committed
Update tests
1 parent 526d371 commit 7c0f13c

File tree

4 files changed

+69
-11
lines changed

4 files changed

+69
-11
lines changed

malicious-site-protection/malicious-site-protection-impl/src/main/kotlin/com/duckduckgo/malicioussiteprotection/impl/domain/RealMaliciousSiteProtection.kt

+6-3
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,15 @@ class RealMaliciousSiteProtection @Inject constructor(
105105
try {
106106
val result = when (val matches = maliciousSiteRepository.matches(hashPrefix.substring(0, 4))) {
107107
is Result -> matches.matches.firstOrNull { match ->
108-
(match.feed != SCAM || maliciousSiteProtectionRCFeature.scamProtectionEnabled()) &&
109-
Pattern.compile(match.regex).matcher(url.toString()).find() &&
108+
Pattern.compile(match.regex).matcher(url.toString()).find() &&
110109
(hostname == match.hostname) &&
111110
(hash == match.hash)
112111
}?.feed?.let { feed: Feed ->
113-
Malicious(feed)
112+
if (feed != SCAM || maliciousSiteProtectionRCFeature.scamProtectionEnabled()) {
113+
Malicious(feed)
114+
} else {
115+
Ignored
116+
}
114117
} ?: Safe
115118
is MatchesResult.Ignored -> Ignored
116119
}

malicious-site-protection/malicious-site-protection-impl/src/test/kotlin/com/duckduckgo/malicioussiteprotection/impl/MaliciousSiteProtectionReferenceTest.kt

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class MaliciousSiteProtectionReferenceTest(private val testCase: TestCase) {
9898
maliciousSiteDatasetService,
9999
coroutineRule.testDispatcherProvider,
100100
mockPixel,
101+
mockMaliciousSiteProtectionRCFeature,
101102
)
102103

103104
@Before

malicious-site-protection/malicious-site-protection-impl/src/test/kotlin/com/duckduckgo/malicioussiteprotection/impl/data/RealMaliciousSiteRepositoryTest.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.duckduckgo.malicioussiteprotection.impl.data
33
import com.duckduckgo.app.statistics.pixels.Pixel
44
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.PHISHING
55
import com.duckduckgo.malicioussiteprotection.impl.MaliciousSitePixelName.MALICIOUS_SITE_CLIENT_TIMEOUT
6+
import com.duckduckgo.malicioussiteprotection.impl.MaliciousSiteProtectionRCFeature
67
import com.duckduckgo.malicioussiteprotection.impl.data.db.FilterEntity
78
import com.duckduckgo.malicioussiteprotection.impl.data.db.HashPrefixEntity
89
import com.duckduckgo.malicioussiteprotection.impl.data.db.MaliciousSiteDao
@@ -42,12 +43,14 @@ class RealMaliciousSiteRepositoryTest {
4243
private val maliciousSiteService: MaliciousSiteService = mock()
4344
private val maliciousSiteDatasetService: MaliciousSiteDatasetService = mock()
4445
private val mockPixel: Pixel = mock()
46+
private val mockMaliciousSiteProtectionRCFeature: MaliciousSiteProtectionRCFeature = mock()
4547
private val repository = RealMaliciousSiteRepository(
4648
maliciousSiteDao,
4749
maliciousSiteService,
4850
maliciousSiteDatasetService,
4951
coroutineRule.testDispatcherProvider,
5052
mockPixel,
53+
mockMaliciousSiteProtectionRCFeature,
5154
)
5255

5356
@Test
@@ -116,9 +119,9 @@ class RealMaliciousSiteRepositoryTest {
116119

117120
whenever(maliciousSiteDao.getHashPrefix(hashPrefix)).thenReturn(HashPrefixEntity(hashPrefix, PHISHING.name))
118121

119-
val result = repository.containsHashPrefix(hashPrefix)
122+
val result = repository.getFeedForHashPrefix(hashPrefix)
120123

121-
assertTrue(result)
124+
assertEquals(PHISHING, result)
122125
}
123126

124127
@Test

malicious-site-protection/malicious-site-protection-impl/src/test/kotlin/com/duckduckgo/malicioussiteprotection/impl/domain/RealMaliciousSiteProtectionTest.kt

+57-6
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
2121
import com.duckduckgo.common.test.CoroutineTestRule
2222
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection
2323
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.PHISHING
24+
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.SCAM
2425
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.IsMaliciousResult.ConfirmedResult
26+
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.MaliciousStatus
2527
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.MaliciousStatus.Ignored
2628
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.MaliciousStatus.Malicious
2729
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.MaliciousStatus.Safe
@@ -79,7 +81,7 @@ class RealMaliciousSiteProtectionTest {
7981
val hash = messageDigest.digest(hostname.toByteArray()).joinToString("") { "%02x".format(it) }
8082
val hashPrefix = hash.substring(0, 8)
8183

82-
whenever(mockMaliciousSiteRepository.containsHashPrefix(hashPrefix)).thenReturn(false)
84+
whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(null)
8385

8486
val result = realMaliciousSiteProtection.isMalicious(url) {}
8587

@@ -94,7 +96,7 @@ class RealMaliciousSiteProtectionTest {
9496
val hashPrefix = hash.substring(0, 8)
9597
val filter = Filter(hash, ".*malicious.*")
9698

97-
whenever(mockMaliciousSiteRepository.containsHashPrefix(hashPrefix)).thenReturn(true)
99+
whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(PHISHING)
98100
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(
99101
listOf(
100102
FilterSet(
@@ -109,6 +111,30 @@ class RealMaliciousSiteProtectionTest {
109111
assertEquals(ConfirmedResult(Malicious(PHISHING)), result)
110112
}
111113

114+
@Test
115+
fun isMalicious_returnsIgnored_whenUrlIsScamButScamProtectionDisabled() = runTest {
116+
val url = Uri.parse("https://malicious.com")
117+
val hostname = url.host!!
118+
val hash = messageDigest.digest(hostname.toByteArray()).joinToString("") { "%02x".format(it) }
119+
val hashPrefix = hash.substring(0, 8)
120+
val filter = Filter(hash, ".*malicious.*")
121+
122+
whenever(mockMaliciousSiteProtectionRCFeature.scamProtectionEnabled()).thenReturn(false)
123+
whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(SCAM)
124+
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(
125+
listOf(
126+
FilterSet(
127+
listOf(filter),
128+
SCAM,
129+
),
130+
),
131+
)
132+
133+
val result = realMaliciousSiteProtection.isMalicious(url) {}
134+
135+
assertEquals(ConfirmedResult(Ignored), result)
136+
}
137+
112138
@Test
113139
fun isMalicious_returnsIgnored_whenUrlIsMaliciousButRCFeatureDisabled() = runTest {
114140
val url = Uri.parse("https://malicious.com")
@@ -117,7 +143,7 @@ class RealMaliciousSiteProtectionTest {
117143
val hashPrefix = hash.substring(0, 8)
118144
val filter = Filter(hash, ".*malicious.*")
119145

120-
whenever(mockMaliciousSiteRepository.containsHashPrefix(hashPrefix)).thenReturn(true)
146+
whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(PHISHING)
121147
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf(FilterSet(listOf(filter), PHISHING)))
122148
whenever(mockMaliciousSiteProtectionRCFeature.isFeatureEnabled()).thenReturn(false)
123149

@@ -134,7 +160,7 @@ class RealMaliciousSiteProtectionTest {
134160
val hashPrefix = hash.substring(0, 8)
135161
val filter = Filter(hash, ".*malicious.*")
136162

137-
whenever(mockMaliciousSiteRepository.containsHashPrefix(hashPrefix)).thenReturn(true)
163+
whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(PHISHING)
138164
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf(FilterSet(listOf(filter), PHISHING)))
139165
whenever(mockMaliciousSiteProtectionRCRepository.isExempted(hostname)).thenReturn(true)
140166

@@ -151,7 +177,7 @@ class RealMaliciousSiteProtectionTest {
151177
val hashPrefix = hash.substring(0, 8)
152178
val filter = Filter(hash, ".*unsafe.*")
153179

154-
whenever(mockMaliciousSiteRepository.containsHashPrefix(hashPrefix)).thenReturn(true)
180+
whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(PHISHING)
155181
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf(FilterSet(listOf(filter), PHISHING)))
156182

157183
val result = realMaliciousSiteProtection.isMalicious(url) {}
@@ -168,7 +194,7 @@ class RealMaliciousSiteProtectionTest {
168194
val filter = Filter(hash, ".*whatever.*")
169195
var onSiteBlockedAsyncCalled = false
170196

171-
whenever(mockMaliciousSiteRepository.containsHashPrefix(hashPrefix)).thenReturn(true)
197+
whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(PHISHING)
172198
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf(FilterSet(listOf(filter), PHISHING)))
173199
whenever(mockMaliciousSiteRepository.matches(hashPrefix.substring(0, 4)))
174200
.thenReturn(Result(listOf(Match(hostname, url.toString(), ".*malicious.*", hash, PHISHING))))
@@ -179,4 +205,29 @@ class RealMaliciousSiteProtectionTest {
179205

180206
assertTrue(onSiteBlockedAsyncCalled)
181207
}
208+
209+
@Test
210+
fun isMalicious_InvokesOnSiteBlockedAsyncWithIgnored_whenUrlIsScamAndNeedsToGoToNetworkButScamProtectionIsDisabled() = runTest {
211+
val url = Uri.parse("https://malicious.com")
212+
val hostname = url.host!!
213+
val hash = messageDigest.digest(hostname.toByteArray()).joinToString("") { "%02x".format(it) }
214+
val hashPrefix = hash.substring(0, 8)
215+
val filter = Filter(hash, ".*whatever.*")
216+
var onSiteBlockedAsyncCalled = false
217+
var maliciousStatus: MaliciousStatus? = null
218+
219+
whenever(mockMaliciousSiteProtectionRCFeature.scamProtectionEnabled()).thenReturn(false)
220+
whenever(mockMaliciousSiteRepository.getFeedForHashPrefix(hashPrefix)).thenReturn(PHISHING)
221+
whenever(mockMaliciousSiteRepository.getFilters(hash)).thenReturn(listOf(FilterSet(listOf(filter), PHISHING)))
222+
whenever(mockMaliciousSiteRepository.matches(hashPrefix.substring(0, 4)))
223+
.thenReturn(Result(listOf(Match(hostname, url.toString(), ".*malicious.*", hash, SCAM))))
224+
225+
realMaliciousSiteProtection.isMalicious(url) { status: MaliciousStatus ->
226+
onSiteBlockedAsyncCalled = true
227+
maliciousStatus = status
228+
}
229+
230+
assertTrue(onSiteBlockedAsyncCalled)
231+
assertEquals(Ignored, maliciousStatus)
232+
}
182233
}

0 commit comments

Comments
 (0)