1
0
Fork 0
fenix/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackerBucketsTest.kt

113 lines
4.3 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.trackingprotection
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory.SCRIPTS_AND_SUB_RESOURCES
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory.CRYPTOMINING
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory.FINGERPRINTING
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy.TrackingCategory.MOZILLA_SOCIAL
import mozilla.components.concept.engine.content.blocking.TrackerLog
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.mozilla.fenix.trackingprotection.TrackingProtectionCategory.CRYPTOMINERS
import org.mozilla.fenix.trackingprotection.TrackingProtectionCategory.FINGERPRINTERS
private typealias FenixTrackingProtectionCategory = TrackingProtectionCategory
class TrackerBucketsTest {
@Test
fun `initializes with empty map`() {
assertTrue(TrackerBuckets().buckets.blockedBucketMap.isEmpty())
assertTrue(TrackerBuckets().buckets.loadedBucketMap.isEmpty())
}
@Test
fun `getter accesses corresponding bucket`() {
val buckets = TrackerBuckets()
buckets.updateIfNeeded(
listOf(
TrackerLog(
"http://facebook.com",
listOf(MOZILLA_SOCIAL)
),
TrackerLog("https://google.com", listOf(), listOf(FINGERPRINTING)),
TrackerLog("https://mozilla.com")
)
)
assertEquals(listOf("google.com"), buckets.buckets.blockedBucketMap[FINGERPRINTERS])
assertEquals(
listOf("facebook.com"),
buckets.buckets.loadedBucketMap[FenixTrackingProtectionCategory.SOCIAL_MEDIA_TRACKERS]
)
assertTrue(buckets.buckets.blockedBucketMap[CRYPTOMINERS].isNullOrEmpty())
assertTrue(buckets.buckets.loadedBucketMap[CRYPTOMINERS].isNullOrEmpty())
}
@Test
fun `sorts trackers into bucket`() {
val buckets = TrackerBuckets()
buckets.updateIfNeeded(
listOf(
TrackerLog(
"http://facebook.com",
listOf(MOZILLA_SOCIAL)
),
TrackerLog("https://google.com", listOf(), listOf(FINGERPRINTING)),
TrackerLog("https://mozilla.com")
)
)
assertEquals(
mapOf(
FenixTrackingProtectionCategory.SOCIAL_MEDIA_TRACKERS to listOf("facebook.com")
), buckets.buckets.loadedBucketMap
)
assertEquals(
mapOf(
FINGERPRINTERS to listOf("google.com")
), buckets.buckets.blockedBucketMap
)
}
@Test
fun `trackers in the same site but with different categories`() {
val buckets = TrackerBuckets()
val acCategories = listOf(
CRYPTOMINING,
MOZILLA_SOCIAL,
FINGERPRINTING,
SCRIPTS_AND_SUB_RESOURCES
)
buckets.updateIfNeeded(
listOf(
TrackerLog(
url = "http://facebook.com",
cookiesHasBeenBlocked = true,
blockedCategories = acCategories,
loadedCategories = acCategories
)
)
)
val expectedBlockedMap =
mapOf(
FenixTrackingProtectionCategory.SOCIAL_MEDIA_TRACKERS to listOf("facebook.com"),
FenixTrackingProtectionCategory.TRACKING_CONTENT to listOf("facebook.com"),
FenixTrackingProtectionCategory.FINGERPRINTERS to listOf("facebook.com"),
FenixTrackingProtectionCategory.CRYPTOMINERS to listOf("facebook.com"),
FenixTrackingProtectionCategory.CROSS_SITE_TRACKING_COOKIES to listOf("facebook.com")
)
val expectedLoadedMap =
expectedBlockedMap - FenixTrackingProtectionCategory.CROSS_SITE_TRACKING_COOKIES
assertEquals(expectedBlockedMap, buckets.buckets.blockedBucketMap)
assertEquals(expectedLoadedMap, buckets.buckets.loadedBucketMap)
}
}