Richard Levitte | fb68fba | 2017-03-10 20:42:12 +0100 | [diff] [blame] | 1 | Running external test suites with OpenSSL |
| 2 | ========================================= |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 3 | |
Richard Levitte | fb68fba | 2017-03-10 20:42:12 +0100 | [diff] [blame] | 4 | It is possible to integrate external test suites into OpenSSL's "make test". |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 5 | This capability is considered a developer option and does not work on all |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 6 | platforms. |
| 7 | |
Richard Levitte | fb68fba | 2017-03-10 20:42:12 +0100 | [diff] [blame] | 8 | |
| 9 | |
| 10 | The BoringSSL test suite |
| 11 | ======================== |
| 12 | |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 13 | In order to run the BoringSSL tests with OpenSSL, first checkout the BoringSSL |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 14 | source code into an appropriate directory. This can be done in two ways: |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 15 | |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 16 | 1) Separately from the OpenSSL checkout using: |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 17 | |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 18 | $ git clone https://boringssl.googlesource.com/boringssl boringssl |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 19 | |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 20 | The BoringSSL tests are only confirmed to work at a specific commit in the |
| 21 | BoringSSL repository. Later commits may or may not pass the test suite: |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 22 | |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 23 | $ cd boringssl |
| 24 | $ git checkout 490469f850e |
| 25 | |
| 26 | 2) Using the already configured submodule settings in OpenSSL: |
| 27 | |
| 28 | $ git submodule update --init |
| 29 | |
| 30 | Configure the OpenSSL source code to enable the external tests: |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 31 | |
| 32 | $ cd ../openssl |
| 33 | $ ./config enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers \ |
| 34 | enable-external-tests |
| 35 | |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 36 | Note that using other config options than those given above may cause the tests |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 37 | to fail. |
| 38 | |
| 39 | Run the OpenSSL tests by providing the path to the BoringSSL test runner in the |
| 40 | BORING_RUNNER_DIR environment variable: |
| 41 | |
| 42 | $ BORING_RUNNER_DIR=/path/to/boringssl/ssl/test/runner make test |
| 43 | |
| 44 | Note that the test suite may change directory while running so the path provided |
| 45 | should be absolute and not relative to the current working directory. |
| 46 | |
| 47 | To see more detailed output you can run just the BoringSSL tests with the |
| 48 | verbose option: |
| 49 | |
| 50 | $ VERBOSE=1 BORING_RUNNER_DIR=/path/to/boringssl/ssl/test/runner make \ |
Richard Levitte | fb68fba | 2017-03-10 20:42:12 +0100 | [diff] [blame] | 51 | TESTS="test_external_boringssl" test |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 52 | |
| 53 | |
| 54 | Test failures and suppressions |
Richard Levitte | fb68fba | 2017-03-10 20:42:12 +0100 | [diff] [blame] | 55 | ------------------------------ |
Matt Caswell | 5227337 | 2016-10-15 11:09:20 +0100 | [diff] [blame] | 56 | |
| 57 | A large number of the BoringSSL tests are known to fail. A test could fail |
| 58 | because of many possible reasons. For example: |
| 59 | |
| 60 | - A bug in OpenSSL |
| 61 | - Different interpretations of standards |
| 62 | - Assumptions about the way BoringSSL works that do not apply to OpenSSL |
| 63 | - The test uses APIs added to BoringSSL that are not present in OpenSSL |
| 64 | - etc |
| 65 | |
| 66 | In order to provide a "clean" baseline run with all the tests passing a config |
| 67 | file has been provided that suppresses the running of tests that are known to |
| 68 | fail. These suppressions are held in the file "test/ossl_shim/ossl_config.json" |
| 69 | within the OpenSSL source code. |
| 70 | |
| 71 | The community is encouraged to contribute patches which reduce the number of |
| 72 | suppressions that are currently present. |
| 73 | |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 74 | |
| 75 | Python PYCA/Cryptography test suite |
| 76 | =================================== |
| 77 | |
| 78 | This python test suite runs cryptographic tests with a local OpenSSL build as |
| 79 | the implementation. |
| 80 | |
| 81 | First checkout the PYCA/Cryptography module into ./pyca-cryptography using: |
| 82 | |
| 83 | $ git submodule update --init |
| 84 | |
| 85 | Then configure/build OpenSSL compatible with the python module: |
| 86 | |
| 87 | $ ./config shared enable-external-tests |
| 88 | $ make |
| 89 | |
| 90 | The tests will run in a python virtual environment which requires virtualenv |
| 91 | to be installed. |
| 92 | |
| 93 | $ make test VERBOSE=1 TESTS=test_external_pyca |
| 94 | |
| 95 | Test failures and suppressions |
Robbie Harwood | 483bc2d | 2017-04-05 12:50:07 -0400 | [diff] [blame] | 96 | ------------------------------ |
Jon Spillett | 5c9e344 | 2017-03-09 10:50:55 +1000 | [diff] [blame] | 97 | |
| 98 | Some tests target older (<=1.0.2) versions so will not run. Other tests target |
| 99 | other crypto implementations so are not relevant. Currently no tests fail. |
| 100 | |
Robbie Harwood | 77edd02 | 2017-04-05 12:49:27 -0400 | [diff] [blame] | 101 | |
| 102 | krb5 test suite |
| 103 | =============== |
| 104 | |
| 105 | Much like the PYCA/Cryptography test suite, this builds and runs the krb5 |
| 106 | tests against the local OpenSSL build. |
| 107 | |
| 108 | You will need a git checkout of krb5 at the top level: |
| 109 | |
| 110 | $ git clone https://github.com/krb5/krb5 |
| 111 | |
| 112 | krb5's master has to pass this same CI, but a known-good version is |
| 113 | krb5-1.15.1-final if you want to be sure. |
| 114 | |
| 115 | $ cd krb5 |
| 116 | $ git checkout krb5-1.15.1-final |
| 117 | $ cd .. |
| 118 | |
| 119 | OpenSSL must be built with external tests enabled: |
| 120 | |
| 121 | $ ./config enable-external-tests |
| 122 | $ make |
| 123 | |
| 124 | krb5's tests will then be run as part of the rest of the suite, or can be |
| 125 | explicitly run (with more debugging): |
| 126 | |
| 127 | $ VERBOSE=1 make TESTS=test_external_krb5 test |
| 128 | |
FdaSilvaYY | 44e6995 | 2017-08-11 10:15:22 -0400 | [diff] [blame] | 129 | Test-failures suppressions |
Josh Soref | 46f4e1b | 2017-11-11 19:03:10 -0500 | [diff] [blame] | 130 | -------------------------- |
Robbie Harwood | 77edd02 | 2017-04-05 12:49:27 -0400 | [diff] [blame] | 131 | |
| 132 | krb5 will automatically adapt its test suite to account for the configuration |
| 133 | of your system. Certain tests may require more installed packages to run. No |
| 134 | tests are expected to fail. |
Jon Spillett | 5ff5f74 | 2017-08-11 10:48:40 +1000 | [diff] [blame] | 135 | |
| 136 | |
| 137 | Updating test suites |
| 138 | ==================== |
| 139 | |
| 140 | To update the commit for any of the above test suites: |
| 141 | |
| 142 | - Make sure the submodules are cloned locally: |
| 143 | |
| 144 | $ git submodule update --init --recursive |
| 145 | |
| 146 | - Enter subdirectory and pull from the repository (use a specific branch/tag if required): |
| 147 | |
| 148 | $ cd <submodule-dir> |
| 149 | $ git pull origin master |
| 150 | |
| 151 | - Go to root directory, there should be a new git status: |
| 152 | |
| 153 | $ cd ../ |
| 154 | $ git status |
| 155 | ... |
| 156 | # modified: <submodule-dir> (new commits) |
| 157 | ... |
| 158 | |
| 159 | - Add/commit/push the update |
| 160 | |
| 161 | git add <submodule-dir> |
| 162 | git commit -m "Updated <submodule> to latest commit" |
| 163 | git push |
| 164 | |