Cobalt Black Box Test Framework


Black Box Test is a place to put End-To-End tests of the Cobalt process. Black Box Tests can launch, send signals to, and terminate Cobalt using platforms' app launcher. Black Box Tests can also control Cobalt using JavaScript or webdriver and can be used to test multiple restarts of the Cobalt process and data that persists between them. They can also be used to test Cobalt's interaction with different web server behavior.

Some examples of things you can test using the Black Box Tests:

  1. Persistent Cookies between consecutive Cobalt sessions.
  2. Basic functionalities after resuming from suspend state.
  3. Re-fetch network requests after network shortage.

Running Tests:

  1. To run all tests:

    $ python path/to/ --platform PLATFORM --config CONFIG

    e.g. $ python path/to/ --platform linux-x64x11 --config devel

  2. To run an individual test:

    $ python path/to/ --platform PLATFORM --config CONFIG --test_name TEST_NAME

    e.g. $ python path/to/ --platform linux-x64x11 --config devel --test_name preload_font

    You can apply --gtest_filter through --target_params, e.g. $ python path/to/ --platform linux-x64x11 --config devel --test_name web_platform_tests --target_params=“--gtest_filter=fetch/*”

    Note: When declaring a gtest_filter, it will override the filters defined in GetWebPlatformTestFilters in


Each script in tests/ includes one python unittest test case. In a test script, you can perform any webdriver operations on Cobalt through BlackBoxCobaltRunner class.


A wrapper around the app launcher. BlackBoxCobaltRunner includes a webdriver module attached to the app launcher's Cobalt instance after it starts running. Includes a method(JSTestsSucceeded()) to check test result on the JavaScript side. Call this method to wait for JavaScript test result. black_box_js_test_utils.js provides some utility functions that are meant to work with runner.JSTestsSucceeded() in the python test scripts. Together, they allow for test logic to exist in either the python test scripts or JavaScript test data. e.g. Call OnEndTest() to signal test completion in the JavaScripts, JSTestsSucceeded() will react to the signal and return the test status of JavaScript test logic; another example is that when python script wants to wait for some setup steps on JavaScript, call runner.WaitForJSTestsSetup(). Calling setupFinished() in JavaScript whenever ready will unblock the wait.

Test Data

A default local test server will be launcher before any unit test starts to serve the test data in black_box_tests/testdata/. The server's port will be passed to the app launcher to fetch test data from. Test data can include target web page for Cobalt to open and any additional resource(font file, JavaScripts...). Tests are free to start their own HTTP servers if the default test server is inadequate(e.g. The test is testing that Cobalt handles receipt of a specific HTTP server generated error code properly).

Adding a New Test

  1. Add a python test script in tests/.
  2. Add target web page(s) and associated resources(if any) to testdata/.
  3. Add the test name(name of the python test script) to to automate new test. Add the name to the list of tests requiring app launcher support for system signals(e.g. suspend/resume), or the list of tests requiring deep link support, or the list of tests that don't.