Bug 1830080 Add more careful handling of preview-collection in maybeFetchExperiments

(cherry picked from commit 22d398fe20df0b0d19fa3ca6de196ac74acb311c)
fenix/113.0
James Hugman 1 year ago committed by mergify[bot]
parent 263e97730f
commit daf88cc58a

@ -109,17 +109,17 @@ fun NimbusInterface.maybeFetchExperiments(
feature: NimbusSystem = FxNimbusMessaging.features.nimbusSystem.value(),
currentTimeMillis: Long = System.currentTimeMillis(),
) {
val minimumPeriodMinutes = if (!context.settings().nimbusUsePreview) {
feature.refreshIntervalForeground
if (context.settings().nimbusUsePreview) {
context.settings().nimbusLastFetchTime = 0L
fetchExperiments()
} else {
0
}
val lastFetchTimeMillis = context.settings().nimbusLastFetchTime
val minimumPeriodMillis = minimumPeriodMinutes * Settings.ONE_MINUTE_MS
val minimumPeriodMinutes = feature.refreshIntervalForeground
val lastFetchTimeMillis = context.settings().nimbusLastFetchTime
val minimumPeriodMillis = minimumPeriodMinutes * Settings.ONE_MINUTE_MS
if (currentTimeMillis - lastFetchTimeMillis >= minimumPeriodMillis) {
context.settings().nimbusLastFetchTime = currentTimeMillis
fetchExperiments()
if (currentTimeMillis - lastFetchTimeMillis >= minimumPeriodMillis) {
context.settings().nimbusLastFetchTime = currentTimeMillis
fetchExperiments()
}
}
}

@ -100,4 +100,65 @@ class NimbusSystemTest {
)
assertTrue(nimbus.isFetching)
}
@Test
fun `GIVEN a nimbus object calling maybeFetchExperiments WHEN using a preview collection THEN always call fetchExperiments`() {
var currentTime = 0L
fun assertFetchEveryTime() {
nimbus.maybeFetchExperiments(
context,
config,
currentTime,
)
assertTrue(nimbus.isFetching)
assertEquals(lastTimeSlot.captured, 0L)
nimbus.isFetching = false
}
// Using usePreview, we call fetch every time we call maybeFetch.
every { settings.nimbusUsePreview } returns true
currentTime = Settings.ONE_HOUR_MS
assertFetchEveryTime()
currentTime += Settings.ONE_MINUTE_MS
assertFetchEveryTime()
currentTime += Settings.ONE_MINUTE_MS
assertFetchEveryTime()
// Now turn preview collection off.
// We should fetch exactly once…
every { settings.nimbusUsePreview } returns false
currentTime += Settings.ONE_MINUTE_MS
nimbus.maybeFetchExperiments(
context,
config,
currentTime,
)
assertTrue(nimbus.isFetching)
assertEquals(lastTimeSlot.captured, currentTime)
nimbus.isFetching = false
every { settings.nimbusLastFetchTime } returns currentTime
// … and then back off. We show here that the next call to maybeFetch
// doesn't call fetch.
currentTime += Settings.ONE_MINUTE_MS
nimbus.maybeFetchExperiments(
context,
config,
currentTime,
)
assertFalse(nimbus.isFetching)
// Now wait, another hour, and we've reset the behaviour back to normal operation.
currentTime += Settings.ONE_HOUR_MS + Settings.ONE_MINUTE_MS
nimbus.maybeFetchExperiments(
context,
config,
currentTime,
)
assertTrue(nimbus.isFetching)
assertEquals(lastTimeSlot.captured, currentTime)
}
}

Loading…
Cancel
Save