Mirror of BoringSSL (grpc依赖)
https://boringssl.googlesource.com/boringssl
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.9 KiB
38 lines
1.9 KiB
# BoringSSL SSL Tests |
|
|
|
This directory contains BoringSSL's protocol-level test suite. |
|
|
|
Testing a TLS implementation can be difficult. We need to produce invalid but |
|
sufficiently correct handshakes to get our implementation close to its edge |
|
cases. TLS's cryptographic steps mean we cannot use a transcript and effectively |
|
need a TLS implementation on the other end. But we do not wish to litter |
|
BoringSSL with options for bugs to test against. |
|
|
|
Instead, we use a fork of the Go `crypto/tls` package, heavily patched with |
|
configurable bugs. This code, along with a test suite and harness written in Go, |
|
lives in the `runner` directory. The harness runs BoringSSL via a C/C++ shim |
|
binary which lives in this directory. All communication with the shim binary |
|
occurs with command-line flags, sockets, and standard I/O. |
|
|
|
This strategy also ensures we always test against a second implementation. All |
|
features should be implemented twice, once in C for BoringSSL and once in Go for |
|
testing. If possible, the Go code should be suitable for potentially |
|
upstreaming. However, sometimes test code has different needs. For example, our |
|
test DTLS code enforces strict ordering on sequence numbers and has controlled |
|
packet drop simulation. |
|
|
|
To run the tests manually, run `go test` from the `runner` directory. It takes |
|
command-line flags found at the top of `runner/runner.go`. The `-help` option |
|
also works after using `go test -c` to make a `runner.test` binary first. |
|
|
|
If adding a new test, these files may be a good starting point: |
|
|
|
* `runner/runner.go`: the test harness and all the individual tests. |
|
* `runner/common.go`: contains the `Config` and `ProtocolBugs` struct which |
|
control the Go TLS implementation's behavior. |
|
* `test_config.h`, `test_config.cc`: the command-line flags which control the |
|
shim's behavior. |
|
* `bssl_shim.cc`: the shim binary itself. |
|
|
|
For porting the test suite to a different implementation see |
|
[PORTING.md](./PORTING.md).
|
|
|