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 | |
| 14 | - OpenAPI3 |
| 15 | - Connexion |
| 16 | - Flask with Gevent serving |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 17 | - Python3.8 |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 18 | |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 19 | Version bumping A1 |
| 20 | ------------------ |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 21 | |
| 22 | This project follows semver. When changes are made, the versions are in: |
| 23 | |
| 24 | 1) ``docs/release-notes.rst`` |
| 25 | |
| 26 | 2) ``setup.py`` |
| 27 | |
Tommy Carpenter | 810fcb7 | 2019-06-05 12:42:52 -0400 | [diff] [blame] | 28 | 3) ``container-tag.yaml`` |
| 29 | |
Lott, Christopher (cl778h) | 438a0a6 | 2019-06-18 06:50:13 -0400 | [diff] [blame] | 30 | 4) ``integration_tests/a1mediator/Chart.yaml`` |
Tommy Carpenter | 18dcbc3 | 2019-06-04 10:20:30 -0400 | [diff] [blame] | 31 | |
Tommy Carpenter | 45f8f98 | 2020-03-06 09:41:57 -0500 | [diff] [blame] | 32 | 5) ``a1/openapi.yaml`` (this is an API version, not a software version; no need to bump on patch changes) |
Tommy Carpenter | 5ad8f03 | 2019-05-30 14:33:21 -0400 | [diff] [blame] | 33 | |
Tommy Carpenter | 45f8f98 | 2020-03-06 09:41:57 -0500 | [diff] [blame] | 34 | 6) in the ric-plt repo that contains a1 helm chart, ``values.yaml``, ``Chart.yml`` |
Tommy Carpenter | 971c91c | 2019-06-12 09:25:48 -0400 | [diff] [blame] | 35 | |
Lott, Christopher (cl778h) | d502470 | 2019-08-20 15:22:45 -0400 | [diff] [blame] | 36 | |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 37 | Version bumping RMR |
Tommy Carpenter | 78ba273 | 2020-02-07 14:06:20 -0500 | [diff] [blame] | 38 | ------------------- |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 39 | |
Lott, Christopher (cl778h) | d26734f | 2020-04-27 17:25:05 -0400 | [diff] [blame] | 40 | As of 2020/02/13, A1 (Dockerfile), Dockerfile-Unit-Test, and all three |
| 41 | integration test receivers use an Alpine base image and install RMR |
| 42 | from a base builder image. Must update and rebuild all 5 containers |
| 43 | in the A1 repo (or just A1 itself for prod usage). |
Tommy Carpenter | 102b895 | 2020-03-20 10:02:46 -0400 | [diff] [blame] | 44 | |
Lott, Christopher (cl778h) | d26734f | 2020-04-27 17:25:05 -0400 | [diff] [blame] | 45 | In addition these items in this repo must be kept in sync: |
| 46 | * ``rmr-version.yaml`` controls what rmr gets installed for unit testing in Jenkins |
| 47 | * ``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] | 48 | |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 49 | Version bumping Python |
| 50 | ---------------------- |
| 51 | |
Tommy Carpenter | 102b895 | 2020-03-20 10:02:46 -0400 | [diff] [blame] | 52 | If you want to update the version of python itself (ie just done from 37 to 38): |
Tommy Carpenter | 8bcc51a | 2019-10-21 16:07:31 -0400 | [diff] [blame] | 53 | |
Tommy Carpenter | 102b895 | 2020-03-20 10:02:46 -0400 | [diff] [blame] | 54 | 1) ``Dockerfile`` |
Tommy Carpenter | 9d5ad71 | 2019-12-02 11:02:01 -0500 | [diff] [blame] | 55 | |
Tommy Carpenter | 102b895 | 2020-03-20 10:02:46 -0400 | [diff] [blame] | 56 | 2) ``Dockerfile-Unit-Test`` |
Tommy Carpenter | 8bcc51a | 2019-10-21 16:07:31 -0400 | [diff] [blame] | 57 | |
Tommy Carpenter | 102b895 | 2020-03-20 10:02:46 -0400 | [diff] [blame] | 58 | 3) ``tox.ini`` |
Lott, Christopher (cl778h) | d502470 | 2019-08-20 15:22:45 -0400 | [diff] [blame] | 59 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 60 | Unit Testing |
Tommy Carpenter | 4249398 | 2019-11-06 07:27:16 -0500 | [diff] [blame] | 61 | ------------ |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 62 | |
Lott, Christopher (cl778h) | d26734f | 2020-04-27 17:25:05 -0400 | [diff] [blame] | 63 | Note, before this will work, for the first time on the machine running |
| 64 | the tests, run ``./install_deps.sh``. This is only needed once on the |
| 65 | machine. Also, this requires the python packages ``tox`` and |
| 66 | ``pytest``. |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 67 | |
| 68 | :: |
| 69 | |
| 70 | tox |
| 71 | open htmlcov/index.html |
| 72 | |
Lott, Christopher (cl778h) | d26734f | 2020-04-27 17:25:05 -0400 | [diff] [blame] | 73 | Alternatively, you can run the unit tests in Docker (this is somewhat |
| 74 | less nice because you don't get the pretty HTML) |
Tommy Carpenter | 296f8de | 2019-08-07 11:38:44 -0400 | [diff] [blame] | 75 | |
| 76 | :: |
| 77 | |
| 78 | docker build --no-cache -t a1test:latest -f Dockerfile-Unit-Test |
| 79 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 80 | Integration testing |
Tommy Carpenter | 4249398 | 2019-11-06 07:27:16 -0500 | [diff] [blame] | 81 | ------------------- |
Lott, Christopher (cl778h) | 14d016e | 2020-04-27 10:45:47 -0400 | [diff] [blame] | 82 | |
Lott, Christopher (cl778h) | d26734f | 2020-04-27 17:25:05 -0400 | [diff] [blame] | 83 | This tests A1’s external API with three test receivers. This requires |
| 84 | docker, kubernetes and helm. |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 85 | |
Lott, Christopher (cl778h) | 75d92b7 | 2020-04-24 11:52:42 -0400 | [diff] [blame] | 86 | Build all the images: |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 87 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 88 | :: |
| 89 | |
Lott, Christopher (cl778h) | 75d92b7 | 2020-04-24 11:52:42 -0400 | [diff] [blame] | 90 | docker build -t a1:latest . |
| 91 | cd integration_tests/testxappcode |
| 92 | docker build -t delayreceiver:latest -f Dockerfile-delay-receiver . |
| 93 | docker build -t queryreceiver:latest -f Dockerfile-query-receiver . |
| 94 | docker build -t testreceiver:latest -f Dockerfile-test-receiver . |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 95 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 96 | |
Tommy Carpenter | 9d5ad71 | 2019-12-02 11:02:01 -0500 | [diff] [blame] | 97 | 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] | 98 | |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 99 | :: |
| 100 | |
| 101 | tox -c tox-integration.ini |
| 102 | |
| 103 | This script: |
Tommy Carpenter | 2c1c4e9 | 2020-04-07 08:36:42 -0400 | [diff] [blame] | 104 | 1. Deploys 3 helm charts (5 containers) into a local kubernetes installation |
Tommy Carpenter | 7dbbfbc | 2019-06-18 09:58:55 -0400 | [diff] [blame] | 105 | 2. Port forwards a pod ClusterIP to localhost |
| 106 | 3. Uses “tavern” to run some tests against the server |
| 107 | 4. Barrages the server with apache bench |
| 108 | 5. Tears everything down |