Tommy Carpenter | 4249398 | 2019-11-06 07:27:16 -0500 | [diff] [blame] | 1 | .. This work is licensed under a Creative Commons Attribution 4.0 International License. |
| 2 | .. http://creativecommons.org/licenses/by/4.0 |
Tommy Carpenter | cc2250a | 2019-05-30 15:06:37 -0400 | [diff] [blame] | 3 | |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 4 | A1 Developer Guide |
| 5 | ================== |
Tommy Carpenter | 4249398 | 2019-11-06 07:27:16 -0500 | [diff] [blame] | 6 | |
| 7 | .. contents:: |
| 8 | :depth: 3 |
| 9 | :local: |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 10 | |
| 11 | Tech Stack |
Tommy Carpenter | 4249398 | 2019-11-06 07:27:16 -0500 | [diff] [blame] | 12 | ---------- |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 13 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 14 | The A1 Mediator is implemented in Python, currently 3.8, and depends on these third-party packages |
| 15 | and technologies: |
| 16 | |
| 17 | - OpenAPI3 |
| 18 | - Connexion |
| 19 | - Flask with Gevent serving |
| 20 | - Swagger |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 21 | |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 22 | Version bumping A1 |
| 23 | ------------------ |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 24 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 25 | This project follows semver. When the version string changes, these files must be updated: |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 26 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 27 | #. ``setup.py`` |
| 28 | #. ``container-tag.yaml`` |
| 29 | #. ``integration_tests/a1mediator/Chart.yaml`` |
| 30 | #. ``docs/release-notes.rst`` |
| 31 | #. ``a1/openapi.yaml`` But note this is an API version, not a software version; there's no need to bump on non-API changes. |
| 32 | #. And over in the ric-plt/ric-dep repo that contains the A1 Mediator helm chart, files ``values.yaml`` and ``Chart.yaml``. |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 33 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 34 | It's convenient to use the Python utility `bumpversion` to maintain the first three items. |
| 35 | After setup (``pip install bumpversion``) you can change the patch version like this:: |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 36 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 37 | bumpversion --verbose patch |
Tommy Carpenter | 810fcb7 | 2019-06-05 12:42:52 -0400 | [diff] [blame] | 38 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 39 | Or change the minor version like this:: |
Tommy Carpenter | 18dcbc3 | 2019-06-04 10:20:30 -0400 | [diff] [blame] | 40 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 41 | bumpversion --verbose minor |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 42 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 43 | After the `bumpversion` utility has modified the files, update the release notes then commit. |
Tommy Carpenter | 971c91c | 2019-06-12 09:25:48 -0400 | [diff] [blame] | 44 | |
Lott, Christopher (cl778h) | d502470 | 2019-08-20 15:22:45 -0400 | [diff] [blame] | 45 | |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 46 | Version bumping RMR |
Tommy Carpenter | 78ba273 | 2020-02-07 14:06:20 -0500 | [diff] [blame] | 47 | ------------------- |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 48 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 49 | A1 (Dockerfile), Dockerfile-Unit-Test, and all three integration test receivers use an Alpine |
| 50 | base image and install RMR from a base builder image. Must update and rebuild all 5 containers |
| 51 | in the A1 repo (or just A1 itself for production usage). |
Tommy Carpenter | 102b895 | 2020-03-20 10:02:46 -0400 | [diff] [blame] | 52 | |
Lott, Christopher (cl778h) | d26734f | 2020-04-27 17:25:05 -0400 | [diff] [blame] | 53 | In addition these items in this repo must be kept in sync: |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 54 | |
| 55 | #. ``rmr-version.yaml`` controls what rmr gets installed for unit testing in Jenkins |
| 56 | #. ``integration_tests/install_rmr.sh`` is a useful script for a variety of local testing. |
Lott, Christopher (cl778h) | d502470 | 2019-08-20 15:22:45 -0400 | [diff] [blame] | 57 | |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 58 | Version bumping Python |
| 59 | ---------------------- |
| 60 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 61 | If you want to update the version of python; for example this was recently done to move |
| 62 | from 3.7 to 3.8, update these files: |
Tommy Carpenter | 8bcc51a | 2019-10-21 16:07:31 -0400 | [diff] [blame] | 63 | |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 64 | #. ``Dockerfile`` |
| 65 | #. ``Dockerfile-Unit-Test`` |
| 66 | #. ``tox.ini`` |
Lott, Christopher (cl778h) | d502470 | 2019-08-20 15:22:45 -0400 | [diff] [blame] | 67 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 68 | Unit Testing |
Tommy Carpenter | 4249398 | 2019-11-06 07:27:16 -0500 | [diff] [blame] | 69 | ------------ |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 70 | |
Lott, Christopher (cl778h) | fe30c17 | 2020-04-29 15:23:28 -0400 | [diff] [blame] | 71 | Running the unit tests requires the python packages ``tox`` and ``pytest``. |
| 72 | |
| 73 | The RMR library is also required during unit tests. If running directly from tox |
| 74 | (outside a Docker container), install RMR using the script in the integration_tests |
| 75 | directory: ``install_rmr.sh``. |
| 76 | |
| 77 | Upon completion, view the test coverage like this: |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 78 | |
| 79 | :: |
| 80 | |
| 81 | tox |
| 82 | open htmlcov/index.html |
| 83 | |
Lott, Christopher (cl778h) | d26734f | 2020-04-27 17:25:05 -0400 | [diff] [blame] | 84 | Alternatively, you can run the unit tests in Docker (this is somewhat |
| 85 | less nice because you don't get the pretty HTML) |
Tommy Carpenter | 296f8de | 2019-08-07 11:38:44 -0400 | [diff] [blame] | 86 | |
| 87 | :: |
| 88 | |
Lott, Christopher (cl778h) | fe30c17 | 2020-04-29 15:23:28 -0400 | [diff] [blame] | 89 | docker build --no-cache -f Dockerfile-Unit-Test . |
Tommy Carpenter | 296f8de | 2019-08-07 11:38:44 -0400 | [diff] [blame] | 90 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 91 | Integration testing |
Tommy Carpenter | 4249398 | 2019-11-06 07:27:16 -0500 | [diff] [blame] | 92 | ------------------- |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 93 | |
Lott, Christopher (cl778h) | d26734f | 2020-04-27 17:25:05 -0400 | [diff] [blame] | 94 | This tests A1’s external API with three test receivers. This requires |
| 95 | docker, kubernetes and helm. |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 96 | |
Lott, Christopher (cl778h) | 75d92b7 | 2020-04-24 11:52:42 -0400 | [diff] [blame] | 97 | Build all the images: |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 98 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 99 | :: |
| 100 | |
Lott, Christopher (cl778h) | 75d92b7 | 2020-04-24 11:52:42 -0400 | [diff] [blame] | 101 | docker build -t a1:latest . |
| 102 | cd integration_tests/testxappcode |
| 103 | docker build -t delayreceiver:latest -f Dockerfile-delay-receiver . |
| 104 | docker build -t queryreceiver:latest -f Dockerfile-query-receiver . |
| 105 | docker build -t testreceiver:latest -f Dockerfile-test-receiver . |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 106 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 107 | |
Tommy Carpenter | 9d5ad71 | 2019-12-02 11:02:01 -0500 | [diff] [blame] | 108 | Then, run all the tests from the root (this requires the python packages ``tox``, ``pytest``, and ``tavern``). |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 109 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 110 | :: |
| 111 | |
| 112 | tox -c tox-integration.ini |
| 113 | |
| 114 | This script: |
Lott, Christopher (cl778h) | 2222dfa | 2020-05-04 09:39:20 -0400 | [diff] [blame^] | 115 | |
| 116 | #. Deploys 3 helm charts (5 containers) into a local kubernetes installation |
| 117 | #. Port forwards a pod ClusterIP to localhost |
| 118 | #. Uses “tavern” to run some tests against the server |
| 119 | #. Barrages the server with Apache bench |
| 120 | #. Tears everything down |