devserver: Disable automatic content negotiation.

Production devservers use Apache 2.4 with content negotiation
enabled to serve static files. This results in unexpected content
to be returned in some circumstances.

Say foo.h264.json has been staged but foo.h264 is not. In this
case, a request to foo.h264 is responded with foo.h264.json due
to the automatic content negotiation.

% curl -I http://.../switch_1080p_720p_240frames_20190425.h264
HTTP/1.1 200 OK
Date: Wed, 12 Jun 2019 01:47:06 GMT
Server: Apache/2.4.7 (Ubuntu)
Content-Location: switch_1080p_720p_240frames_20190425.h264.json
Vary: negotiate
TCN: choice
Last-Modified: Wed, 12 Jun 2019 00:05:18 GMT
ETag: "263e-58b152b2817bb;58b152b29503d"
Accept-Ranges: bytes
Content-Length: 9790
Content-Type: application/json

Adding "Negotiate: vlist" disables the automatic content negotiation
and lets the server respond by 300 Multiple Choices.

% curl -I -H 'Negotiate: vlist' http://.../switch_1080p_720p_240frames_20190425.h264
HTTP/1.1 300 Multiple Choices
Date: Wed, 12 Jun 2019 01:49:16 GMT
Server: Apache/2.4.7 (Ubuntu)
Alternates: {"switch_1080p_720p_240frames_20190425.h264.json" 1 {type
application/json} {length 9790}}
Vary: negotiate
TCN: list
Content-Type: text/html; charset=iso-8859-1

BUG=chromium:967305
TEST=fast_build.sh -T

Change-Id: I06bf1b14ad71ddd3da1b19fb63bf3ed1e26119c7
Reviewed-on: https://chromium-review.googlesource.com/1654708
Commit-Ready: Shuhei Takahashi <nya@chromium.org>
Tested-by: Shuhei Takahashi <nya@chromium.org>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: Keigo Oka <oka@chromium.org>
2 files changed
tree: 23b777e1f6484d49a5c08fd2321204fdb5bc8eb3
  1. docs/
  2. src/
  3. tools/
  4. .gitignore
  5. fast_build.sh
  6. OWNERS
  7. PRESUBMIT.cfg
  8. README.md
README.md

Tast (go/tast)

Tast logo with Go gopher with green rubber PASS stamp

Tast is an integration-testing system for Chrome OS. Its focus is on maintainability, speed, and ease of interpreting and reproducing test results. It supports building, deploying, and running tests. It doesn't implement other functionality like managing labs of devices used for testing, scheduling tests, or storing test results.

To try it out, see the quickstart document. The overview is a good starting point for learning more about how the system is structured.

Directory structure

This repository is organized in accordance with the Go in Chromium OS suggestions.

  • src/chromiumos/
    • cmd/local_test_runner/ - main package for the local_test_runner executable used to execute local test bundles on-device.
    • cmd/remote_test_runner/ - main package for the remote_test_runner executable used to execute remote test bundles on the host system.
    • cmd/tast/ - main package for the tast executable used to build and run tests.
      • ... - Packages used only by the tast executable.
    • tast/... - Common packages shared by multiple executables.

Tests are located in the tast-tests repository.

Documentation

For more information, see the list of documentation.

GoDoc

Mailing list

The tast-users mailing list is used for discussions about writing and running tests.

Bug reports

Please file bug reports and feature requests in the Chromium issue tracker using the Tests>Tast component.

Other notes

The Go gopher concept and design was originally created by Renee French and is covered by the Creative Commons Attribution 3.0 license. The Tast logo above is also covered by the Creative Commons Attribution 3.0 license.