blob: f9a95ccfa429b0b8d194d3c811a877d7cc12ceb6 [file] [log] [blame]
Tommy Carpentercc2250a2019-05-30 15:06:37 -04001.. ==================================================================================
2.. Copyright (c) 2019 Nokia
3.. Copyright (c) 2018-2019 AT&T Intellectual Property.
4..
5.. Licensed under the Apache License, Version 2.0 (the "License");
6.. you may not use this file except in compliance with the License.
7.. You may obtain a copy of the License at
8..
9.. http://www.apache.org/licenses/LICENSE-2.0
10..
11.. Unless required by applicable law or agreed to in writing, software
12.. distributed under the License is distributed on an "AS IS" BASIS,
13.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14.. See the License for the specific language governing permissions and
15.. limitations under the License.
16.. ==================================================================================
17
18A1 Dev Guide
19============
Tommy Carpenter5ad8f032019-05-30 14:33:21 -040020
21Tech Stack
22==========
23
24- OpenAPI3
25- Connexion
26- Flask with Gevent serving
27- Python3.7
28
29Version bumping
30===============
31
32This project follows semver. When changes are made, the versions are in:
33
341) ``docs/release-notes.rst``
35
362) ``setup.py``
37
Tommy Carpenter810fcb72019-06-05 12:42:52 -0400383) ``container-tag.yaml``
39
Tommy Carpenter18dcbc32019-06-04 10:20:30 -0400404) ``a1mediator/values.yaml``
41
425) ``a1mediator/Chart.yaml``
43
446) ``a1/openapi.yml``
Tommy Carpenter5ad8f032019-05-30 14:33:21 -040045
46Running locally
47===============
48
491. This requires that RMR is installed on the base system. (the
50 Dockerfile does this when running in Docker)
51
522. It also requires rmr-python >= 0.10.1 installed. (The dockerfile also
53 does this)
54
553. Create a ``local.rt`` file and copy it into ``/opt/route/local.rt``.
56 Note, the example one in ``local_tests`` will need to be modified for
57 your scenario and machine.
58
594. Copy a ric manifest into ``/opt/ricmanifest.json`` and an rmr mapping
60 table into ``/opt/rmr_string_int_mapping.txt``. You can use the test
61 ones packaged if you want:
62
63 ::
64
65 cp tests/fixtures/ricmanifest.json /opt/ricmanifest.json cp
66 tests/fixtures/rmr_string_int_mapping.txt
67 /opt/rmr_string_int_mapping.txt
68
695. Then:
70
71 sudo pip install ignore-installed .; set -x LD_LIBRARY_PATH
72 /usr/local/lib/; set -x RMR_SEED_RT /opt/route/local.rt ; set -x
73 RMR_RCV_RETRY_INTERVAL 500; set -x RMR_RETRY_TIMES 10;
74 /usr/bin/run.py
75
76Testing locally
77===============
78
Tommy Carpenter09edf282019-06-11 09:10:23 -040079There are also two test receivers in ``integration_tests`` you can run locally.
Tommy Carpenter5ad8f032019-05-30 14:33:21 -040080The first is meant to be used with the ``control_admission`` policy
81(that comes in test fixture ric manifest):
82
83::
84
85 set -x LD_LIBRARY_PATH /usr/local/lib/; set -x RMR_SEED_RT /opt/route/local.rt ; python receiver.py
86
87The second can be used against the ``test_policy`` policy to test the
88async nature of A1, and to test race conditions. You can start it with
89several env variables as follows:
90
91::
92
93 set -x LD_LIBRARY_PATH /usr/local/lib/; set -x RMR_SEED_RT /opt/route/local.rt ; set -x TEST_RCV_PORT 4563; set -x TEST_RCV_RETURN_MINT 10001; set -x TEST_RCV_SEC_DELAY 5; set -x TEST_RCV_RETURN_PAYLOAD '{"ACK_FROM": "DELAYED_TEST", "status": "SUCCESS"}' ; python receiver.py
94
95To test the async nature of A1, trigger a call to ``test_policy``, which
96will target the delayed receicer, then immediately call
97``control_admission``. The ``control_admission`` policy return should be
98returned immediately, whereas the ``test_policy`` should return after
99about ``TEST_RCV_SEC_DELAY 5``. The ``test_policy`` should not block A1
100while it is sleeping, and both responses should be correct.
101
102::
103
104 curl -v -X PUT -H "Content-Type: application/json" -d '{}' localhost:10000/ric/policies/test_policy
105 curl -v -X PUT -H "Content-Type: application/json" -d '{"dc_admission_start_time": "10:00:00", "dc_admission_end_time": "11:00:00"}' localhost:10000/ric/policies/control_admission_time
106
107Finally, there is a test bombarder that will flood A1 with messages
108with good message types but bad transaction IDs, to test A1s resilience
109against queue-overflow attacks
110
111::
112
113 set -x LD_LIBRARY_PATH /usr/local/lib/; set -x RMR_SEED_RT /opt/route/local.rt ; python bombard.py