Bug: Intermittent [TV] toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Test timed out -
Status: RESOLVED
Priority: P5
Resolution: INCOMPLETE
Created: 2020-06-17 22:18:33+00:00
Resolved: 2021-04-27 17:02:30+00:00

**Filed by:** cbrindusan [at] mozilla.com
**Parsed log:** https://treeherder.mozilla.org/logviewer.html#?job_id=306677287&repo=autoland
**Full log:** https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/Lpc3g0anSXGVkLXKG3Sdxg/runs/0/artifacts/public/logs/live_backing.log
**Reftest URL:** https://hg.mozilla.org/mozilla-central/raw-file/tip/layout/tools/reftest/reftest-analyzer.xhtml#logurl=https://firefox-ci-tc.services.mozilla.com/api/queue/v1/task/Lpc3g0anSXGVkLXKG3Sdxg/runs/0/artifacts/public/logs/live_backing.log&only_show_unexpected=1

---

[task 2020-06-17T20:01:50.612Z] 20:01:50     INFO - TEST-START | toolkit/components/normandy/test/browser/browser_RecipeRunner.js
[task 2020-06-17T20:01:50.792Z] 20:01:50     INFO - GECKO(5648) | console.log: Mark timer services-settings-poll-changes as ran recently
[task 2020-06-17T20:01:50.792Z] 20:01:50     INFO - GECKO(5648) | console.log: Mark timer addon-background-update-timer as ran recently
[task 2020-06-17T20:01:50.792Z] 20:01:50     INFO - GECKO(5648) | console.log: Mark timer search-engine-update-timer as ran recently
[task 2020-06-17T20:01:50.792Z] 20:01:50     INFO - GECKO(5648) | console.log: Mark timer background-update-timer as ran recently
[task 2020-06-17T20:01:50.793Z] 20:01:50     INFO - GECKO(5648) | *** UTM:SVC TimerManager:unregisterTimer - id: recipe-client-addon-run
[task 2020-06-17T20:01:50.793Z] 20:01:50     INFO - GECKO(5648) | *** UTM:SVC TimerManager:registerTimer - timerID: recipe-client-addon-run interval: 1 skipFirst: false
[task 2020-06-17T20:02:35.634Z] 20:02:35     INFO - TEST-INFO | started process screenshot
[task 2020-06-17T20:02:35.696Z] 20:02:35     INFO - TEST-INFO | screenshot: exit 0
[task 2020-06-17T20:02:35.697Z] 20:02:35     INFO - <snipped 43 output lines - if you need more context, please use SimpleTest.requestCompleteLog() in your test>
[task 2020-06-17T20:02:35.698Z] 20:02:35     INFO - Buffered messages logged at 20:01:50
[task 2020-06-17T20:02:35.698Z] 20:02:35     INFO - Leaving test bound wrapper
[task 2020-06-17T20:02:35.698Z] 20:02:35     INFO - Entering test bound test_getRecipeSuitability_canHandleExceptions
[task 2020-06-17T20:02:35.699Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | broken filters are reported - 
[task 2020-06-17T20:02:35.700Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | [[{"id":"1","action":"action","filter_expression":"broken"},"content_error"]] deepEqual [[{"id":"1","action":"action","filter_expression":"broken"},"content_error"]] - 
[task 2020-06-17T20:02:35.701Z] 20:02:35     INFO - Leaving test bound test_getRecipeSuitability_canHandleExceptions
[task 2020-06-17T20:02:35.701Z] 20:02:35     INFO - Entering test bound test_getRecipeSuitability_checksCapabilities
[task 2020-06-17T20:02:35.701Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Recipes with no capabilities should pass - 
[task 2020-06-17T20:02:35.702Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Filter should be evaluated - 
[task 2020-06-17T20:02:35.702Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Recipes with empty capabilities should pass - 
[task 2020-06-17T20:02:35.702Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Filter should be evaluated - 
[task 2020-06-17T20:02:35.703Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Recipes with a matching capability should pass - 
[task 2020-06-17T20:02:35.703Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Filter should be evaluated - [task 2020-06-17T20:02:35.704Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Recipes with non-matching capabilities should not pass - 
[task 2020-06-17T20:02:35.704Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Filter should not be evaluated - 
[task 2020-06-17T20:02:35.704Z] 20:02:35     INFO - Leaving test bound test_getRecipeSuitability_checksCapabilities
[task 2020-06-17T20:02:35.705Z] 20:02:35     INFO - Entering test bound testClientClassificationCache
[task 2020-06-17T20:02:35.705Z] 20:02:35     INFO - Console message: [JavaScript Error: "1592424110633	app.normandy.recipe-runner	ERROR	Error checking filter for "undefined". Filter: [broken]. Error: "this filter was broken somehow"" {file: "resource://gre/modules/Log.jsm" line: 723}]
[task 2020-06-17T20:02:35.705Z] 20:02:35     INFO - append@resource://gre/modules/Log.jsm:723:12
[task 2020-06-17T20:02:35.705Z] 20:02:35     INFO - log@resource://gre/modules/Log.jsm:379:16
[task 2020-06-17T20:02:35.705Z] 20:02:35     INFO - error@resource://gre/modules/Log.jsm:387:10
[task 2020-06-17T20:02:35.705Z] 20:02:35     INFO - getAllSuitabilities@resource://normandy/lib/RecipeRunner.jsm:549:11
[task 2020-06-17T20:02:35.706Z] 20:02:35     INFO - 
[task 2020-06-17T20:02:35.706Z] 20:02:35     INFO - Console message: [JavaScript Warning: "normandy.recipe_freshness - The key must not be empty."]
[task 2020-06-17T20:02:35.706Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | getClientClassification hasn't been called - 
[task 2020-06-17T20:02:35.706Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | getClientClassification was called eagerly - 
[task 2020-06-17T20:02:35.707Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | getClientClassification hasn't been called - 
[task 2020-06-17T20:02:35.707Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | getClientClassification was not called eagerly - 
[task 2020-06-17T20:02:35.707Z] 20:02:35     INFO - Leaving test bound testClientClassificationCache
[task 2020-06-17T20:02:35.707Z] 20:02:35     INFO - Entering test bound testRunEvents
[task 2020-06-17T20:02:35.708Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | The test should pass without timing out - 
[task 2020-06-17T20:02:35.708Z] 20:02:35     INFO - Leaving test bound testRunEvents
[task 2020-06-17T20:02:35.709Z] 20:02:35     INFO - Entering test bound test_run_includesCapabilities
[task 2020-06-17T20:02:35.709Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | getCapabilities should be called - 
[task 2020-06-17T20:02:35.710Z] 20:02:35     INFO - Console message: [JavaScript Error: "1592424110672	app.normandy.recipe-runner	ERROR	Error checking filter for "undefined". Filter: [undefined]. Error: "TypeError: can't access property "replace", expr is undefined"" {file: "resource://gre/modules/Log.jsm" line: 723}]
[task 2020-06-17T20:02:35.710Z] 20:02:35     INFO - append@resource://gre/modules/Log.jsm:723:12
[task 2020-06-17T20:02:35.710Z] 20:02:35     INFO - log@resource://gre/modules/Log.jsm:379:16
[task 2020-06-17T20:02:35.711Z] 20:02:35     INFO - error@resource://gre/modules/Log.jsm:387:10[task 2020-06-17T20:02:35.711Z] 20:02:35     INFO - getAllSuitabilities@resource://normandy/lib/RecipeRunner.jsm:549:11
[task 2020-06-17T20:02:35.711Z] 20:02:35     INFO - 
[task 2020-06-17T20:02:35.711Z] 20:02:35     INFO - Console message: [JavaScript Warning: "normandy.recipe_freshness - Truncating float/double number."]
[task 2020-06-17T20:02:35.712Z] 20:02:35     INFO - Console message: [JavaScript Error: "1592424110672	app.normandy.recipe-runner	ERROR	Could not execute recipe undefined:: Action undefined is either missing or invalid." {file: "resource://gre/modules/Log.jsm" line: 723}]
[task 2020-06-17T20:02:35.712Z] 20:02:35     INFO - append@resource://gre/modules/Log.jsm:723:12
[task 2020-06-17T20:02:35.712Z] 20:02:35     INFO - log@resource://gre/modules/Log.jsm:379:16
[task 2020-06-17T20:02:35.712Z] 20:02:35     INFO - error@resource://gre/modules/Log.jsm:387:10
[task 2020-06-17T20:02:35.713Z] 20:02:35     INFO - processRecipe@resource://normandy/lib/ActionsManager.jsm:82:11
[task 2020-06-17T20:02:35.713Z] 20:02:35     INFO - run@resource://normandy/lib/RecipeRunner.jsm:335:32
[task 2020-06-17T20:02:35.713Z] 20:02:35     INFO - 
[task 2020-06-17T20:02:35.713Z] 20:02:35     INFO - Console message: [JavaScript Warning: "normandy.recipe_freshness - Truncating float/double number."]
[task 2020-06-17T20:02:35.713Z] 20:02:35     INFO - Leaving test bound test_run_includesCapabilities
[task 2020-06-17T20:02:35.714Z] 20:02:35     INFO - Entering test bound testReadFromRemoteSettings
[task 2020-06-17T20:02:35.714Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | The recipes should be accesible from Remote Settings - [{"id":1,"name":"match","action":"matchAction","filter_expression":"true"},{"id":2,"name":"noMatch","action":"noMatchAction","filter_expression":"false"},{"id":3,"name":"missing","action":"missingAction","filter_expression":"true"}] deepEqual [{"id":1,"name":"match","action":"matchAction","filter_expression":"true"},{"id":2,"name":"noMatch","action":"noMatchAction","filter_expression":"false"},{"id":3,"name":"missing","action":"missingAction","filter_expression":"true"}] - 
[task 2020-06-17T20:02:35.715Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | all recipes should have their signature verified - [[{"id":1,"name":"match","action":"matchAction","filter_expression":"true"},{"signature":"abc"},"recipe"],[{"id":3,"name":"missing","action":"missingAction","filter_expression":"true"},{"signature":"abc"},"recipe"],[{"id":2,"name":"noMatch","action":"noMatchAction","filter_expression":"false"},{"signature":"abc"},"recipe"]] deepEqual [[{"id":1,"name":"match","action":"matchAction","filter_expression":"true"},{"signature":"abc"},"recipe"],[{"id":3,"name":"missing","action":"missingAction","filter_expression":"true"},{"signature":"abc"},"recipe"],[{"id":2,"name":"noMatch","action":"noMatchAction","filter_expression":"false"},{"signature":"abc"},"recipe"]] - 
[task 2020-06-17T20:02:35.716Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Recipes should be reported with the correct suitabilities - [[{"id":1,"name":"match","action":"matchAction","filter_expression":"true"},"RECIPE_SUITABILITY_FILTER_MATCH"],[{"id":3,"name":"missing","action":"missingAction","filter_expression":"true"},"RECIPE_SUITABILITY_FILTER_MATCH"],[{"id":2,"name":"noMatch","action":"noMatchAction","filter_expression":"false"},"RECIPE_SUITABILITY_FILTER_MISMATCH"]] deepEqual [[{"id":1,"name":"match","action":"matchAction","filter_expression":"true"},"RECIPE_SUITABILITY_FILTER_MATCH"],[{"id":3,"name":"missing","action":"missingAction","filter_expression":"true"},"RECIPE_SUITABILITY_FILTER_MATCH"],[{"id":2,"name":"noMatch","action":"noMatchAction","filter_expression":"false"},"RECIPE_SUITABILITY_FILTER_MISMATCH"]] - 
[task 2020-06-17T20:02:35.717Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Filtered-out recipes should be reported - [[{"id":2,"name":"noMatch","action":"noMatchAction","filter_expression":"false"},"backoff"]] deepEqual [[{"id":2,"name":"noMatch","action":"noMatchAction","filter_expression":"false"},"backoff"]] - 
[task 2020-06-17T20:02:35.717Z] 20:02:35     INFO - Leaving test bound testReadFromRemoteSettings
[task 2020-06-17T20:02:35.718Z] 20:02:35     INFO - Entering test bound testReadFromRemoteSettings
[task 2020-06-17T20:02:35.719Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | recipes should be marked if their capabilities aren't compatible - [[{"name":"match","filter_expression":"true","capabilities":["compatible"]},"RECIPE_SUITABILITY_FILTER_MATCH"],[{"name":"noMatch","filter_expression":"true","capabilities":["incompatible"]},"RECIPE_SUITABILITY_CAPABILITIES_MISMATCH"]] deepEqual [[{"name":"match","filter_expression":"true","capabilities":["compatible"]},"RECIPE_SUITABILITY_FILTER_MATCH"],[{"name":"noMatch","filter_expression":"true","capabilities":["incompatible"]},"RECIPE_SUITABILITY_CAPABILITIES_MISMATCH"]] - 
[task 2020-06-17T20:02:35.719Z] 20:02:35     INFO - Leaving test bound testReadFromRemoteSettings
[task 2020-06-17T20:02:35.719Z] 20:02:35     INFO - Entering test bound testBadSignatureFromRemoteSettings
[task 2020-06-17T20:02:35.720Z] 20:02:35     INFO - Console message: [JavaScript Warning: "normandy.recipe_freshness - The key must not be empty."][task 2020-06-17T20:02:35.720Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | [[{"id":1,"name":"badSig","action":"matchAction","filter_expression":"true"},"RECIPE_SUITABILITY_SIGNATURE_ERROR"]] deepEqual [[{"id":1,"name":"badSig","action":"matchAction","filter_expression":"true"},"RECIPE_SUITABILITY_SIGNATURE_ERROR"]] - 
[task 2020-06-17T20:02:35.721Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | The recipe should have its uptake status recorded - [[{"id":1,"name":"badSig","action":"matchAction","filter_expression":"true"},"sign_error"]] deepEqual [[{"id":1,"name":"badSig","action":"matchAction","filter_expression":"true"},"sign_error"]] - 
[task 2020-06-17T20:02:35.721Z] 20:02:35     INFO - Leaving test bound testBadSignatureFromRemoteSettings
[task 2020-06-17T20:02:35.722Z] 20:02:35     INFO - Entering test bound testInit
[task 2020-06-17T20:02:35.723Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner.run should not be called immediately when not in dev mode or first run - 
[task 2020-06-17T20:02:35.723Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner.init registers a timer - 
[task 2020-06-17T20:02:35.724Z] 20:02:35     INFO - Leaving test bound testInit
[task 2020-06-17T20:02:35.724Z] 20:02:35     INFO - Entering test bound testInitDevMode
[task 2020-06-17T20:02:35.724Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner.run should be called immediately when in dev mode - [[{"trigger":"devMode"}]] deepEqual [[{"trigger":"devMode"}]] - 
[task 2020-06-17T20:02:35.725Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner.init should register a timer - 
[task 2020-06-17T20:02:35.726Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner.init should sync remote settings in dev mode - 
[task 2020-06-17T20:02:35.726Z] 20:02:35     INFO - Leaving test bound testInitDevMode
[task 2020-06-17T20:02:35.727Z] 20:02:35     INFO - Entering test bound testInitFirstRun
[task 2020-06-17T20:02:35.727Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner.run is called immediately on first run - [[{"trigger":"firstRun"}]] deepEqual [[{"trigger":"firstRun"}]] - 
[task 2020-06-17T20:02:35.727Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | On first run, the first run pref is set to false - 
[task 2020-06-17T20:02:35.728Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner.registerTimer registers a timer - 
[task 2020-06-17T20:02:35.728Z] 20:02:35     INFO - Leaving test bound testInitFirstRun
[task 2020-06-17T20:02:35.728Z] 20:02:35     INFO - Entering test bound testPrefWatching
[task 2020-06-17T20:02:35.729Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Enable should be called initially - 
[task 2020-06-17T20:02:35.729Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Disable should not be called initially - 
[task 2020-06-17T20:02:35.730Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Enable should not be called again - 
[task 2020-06-17T20:02:35.730Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner should disable when Shield is disabled - 
[task 2020-06-17T20:02:35.731Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner should re-enable when Shield is enabled - 
[task 2020-06-17T20:02:35.731Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Disable should not be called again - [task 2020-06-17T20:02:35.731Z] 20:02:35     INFO - Console message: 1592424110752	app.normandy.recipe-runner	WARN	Disabling Shield because app.normandy.api_url is not an HTTPS url: http://example.com.
[task 2020-06-17T20:02:35.732Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Enable should not be called again - 
[task 2020-06-17T20:02:35.732Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner should disable when an invalid api url is given - 
[task 2020-06-17T20:02:35.732Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner should re-enable when a valid api url is given - 
[task 2020-06-17T20:02:35.733Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Disable should not be called again - 
[task 2020-06-17T20:02:35.734Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | RecipeRunner.run should not be called during this test - 
[task 2020-06-17T20:02:35.734Z] 20:02:35     INFO - Console message: 1592424110756	app.normandy.recipe-runner	WARN	Disabling Shield because app.normandy.api_url is not an HTTPS url: http://example.com.
[task 2020-06-17T20:02:35.735Z] 20:02:35     INFO - Leaving test bound testPrefWatching
[task 2020-06-17T20:02:35.735Z] 20:02:35     INFO - Entering test bound testPrefWatching
[task 2020-06-17T20:02:35.735Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Enable should be idempotent - 
[task 2020-06-17T20:02:35.736Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Disable should be idempotent - 
[task 2020-06-17T20:02:35.736Z] 20:02:35     INFO - Leaving test bound testPrefWatching
[task 2020-06-17T20:02:35.736Z] 20:02:35     INFO - Entering test bound testRunOnSyncRemoteSettings
[task 2020-06-17T20:02:35.737Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | remote settings should be set up in the runner - 
[task 2020-06-17T20:02:35.737Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | run() should not be called if disabled - 
[task 2020-06-17T20:02:35.737Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | run() should be called if enabled - 
[task 2020-06-17T20:02:35.738Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | run() should not be called if disabled - 
[task 2020-06-17T20:02:35.738Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | run() should be called if runner is re-enabled - 
[task 2020-06-17T20:02:35.739Z] 20:02:35     INFO - Console message: 1592424110763	app.normandy.recipe-runner	WARN	Disabling Shield because app.normandy.api_url is not an HTTPS url: http://example.com.
[task 2020-06-17T20:02:35.739Z] 20:02:35     INFO - Leaving test bound testRunOnSyncRemoteSettings
[task 2020-06-17T20:02:35.739Z] 20:02:35     INFO - Entering test bound testOnSyncRunDelayed[task 2020-06-17T20:02:35.740Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | precondition: No timer should be active - 
[task 2020-06-17T20:02:35.741Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | run() should be not called yet - 
[task 2020-06-17T20:02:35.741Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | A timer should be set - 
[task 2020-06-17T20:02:35.742Z] 20:02:35     INFO - Leaving test bound testOnSyncRunDelayed
[task 2020-06-17T20:02:35.742Z] 20:02:35     INFO - Entering test bound testRunCanRunOnlyOnce
[task 2020-06-17T20:02:35.743Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | run() is no-op if already running - 
[task 2020-06-17T20:02:35.743Z] 20:02:35     INFO - Leaving test bound testRunCanRunOnlyOnce
[task 2020-06-17T20:02:35.743Z] 20:02:35     INFO - Entering test bound testSyncDelaysTimer
[task 2020-06-17T20:02:35.744Z] 20:02:35     INFO - TEST-PASS | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | run() shouldn't have run yet - 
[task 2020-06-17T20:02:35.744Z] 20:02:35     INFO - Console message: UTM:SVC TimerManager:unregisterTimer - id: recipe-client-addon-run
[task 2020-06-17T20:02:35.744Z] 20:02:35     INFO - Console message: UTM:SVC TimerManager:registerTimer - timerID: recipe-client-addon-run interval: 1 skipFirst: false
[task 2020-06-17T20:02:35.745Z] 20:02:35     INFO - Buffered messages finished
[task 2020-06-17T20:02:35.745Z] 20:02:35     INFO - TEST-UNEXPECTED-FAIL | toolkit/components/normandy/test/browser/browser_RecipeRunner.js | Test timed out -