Updated README files and adaptation of consul/cbs config
[integration.git] / test / mocks / datafilecollector-testharness / mr-sim / README.md
1 #MR-simulator 
2 This readme contains:
3
4 **Introduction**
5
6 **Building and running**
7
8 **Configuration**
9
10 ###Introduction###
11 The MR-sim is a python script delivering batches of events including one or more fileReady for one or more PNFs.
12 It is possible to configure number of events, PNFs, consumer groups, exising or missing files, file prefixes and change identifier.
13 In addition, MR sim can be configured to deliver file url for up to 5 FTP servers (simulating the PNFs).
14
15 ###Building and running###
16 It is possible build and run MR-sim manually as a container if needed. In addition MR-sim can be executed as python script, see instuctions further down.
17 Otherwise it is recommended to use the test scripts in the auto-test dir or run all simulators in one go using scripts in the simulator-group dir.
18
19 To build and run manually as a docker container:
20 1. Build docker container with ```docker build -t mrsim:latest .```
21 2. Run the container ```docker-compose up```
22
23 ###Configuration###
24 The event pattern, called TC, of the MR-sim is controlled with a arg to python script. See section TC info for available patterns.
25 All other configuration is done via envrionment variables.
26 The simulator listens to port 2222.
27
28 The following envrionment vaiables are used:
29
30 **FTPS_SIMS** - A comma-separated list of hostname:port for the FTP servers to generate ftps file urls for. If not set MR sim will assume 'localhost:21'. Minimum 1 and maximum 5 host-port pairs can be given.
31
32 **SFTP_SIMS** - A comma-separated list of hostname:port for the FTP servers to generate sftp file urls for. If not set MR sim will assume 'localhost:1022'. Minimum 1 and maximum 5 host-port pairs can be given.
33
34 **NUM_FTP_SERVERS** - Number of FTP servers to use out of those specified in the envrioment variables above. The number shall be in the range 1-5.
35
36 **MR_GROUPS** - A comma-separated list of consummer-group:changeId[:changeId]*. Defines which change identifier that should be used for each consumer gropu. If not set the MR-sim will assume 'OpenDcae-c12:PM_MEAS_FILES'.
37
38 **MR_FILE_PREFIX_MAPPING** - A comma-separated list of changeId:filePrefix. Defines which file prefix to use for each change identifier, needed to distinguish files for each change identifiers. If not set the MR-sim will assume 'PM_MEAS_FILES:A
39
40
41
42 ###Statistics read-out and commands###
43 The simulator can be queried for statistics  and  started/stopped (use curl from cmd line or open in browser, curl used below):
44
45 `curl localhost:2222` - Just returns 'Hello World'.
46
47 `curl localhost:2222/tc_info` - returns the tc string (as given on the cmd line)
48
49 `curl localhost:2222/start` - start event delivery (default status).
50
51 `curl localhost:2222/stop` - stop event delivery.
52
53 `curl localhost:2222/status` - returns the status, started or stopped .
54
55 `curl localhost:2222/execution_time` - returns the execution time in mm:ss
56
57 `curl localhost:2222/groups` - returns a comma-separated list of configured consumer groups..
58
59 `curl localhost:2222/changeids` - returns a commar-separated list of configured change id sets, where each set is a list of colon-separated change for each configured consumer group.
60
61 `curl localhost:2222/fileprefixes` - returns the setting of env var MR_FILE_PREFIX_MAPPING.
62
63
64 `curl localhost:2222/ctr_requests`   - returns an integer of the number of get requests, for all groups,  to the event poll path
65
66 `curl localhost:2222/groups/ctr_requests`   - returns a list of integers of the number of get requests, for each consumer group, to the event poll path
67
68 `curl localhost:2222/ctr_requests/<consumer-group>`   - returns an integer of the number of get requests, for the specified consumer group, to the event poll path
69
70
71 `curl localhost:2222/ctr_responses`   - returns an integer of the number of get responses, for all groups,  to the event poll path
72
73 `curl localhost:2222/groups/ctr_responses`   - returns a list of integers of the number of get responses, for each consumer group, to the event poll path
74
75 `curl localhost:2222/ctr_responses/<consumer-group>`   - returns an integer of the number of get responses, for the specified consumer group, to the event poll path
76
77
78 `curl localhost:2222/ctr_files` - returns an integer of the number generated files for all groups
79
80 `curl localhost:2222/groups/ctr_files` - returns a list of integers of the number generated files for each group
81
82 `curl localhost:2222/ctr_files/<consumer-group>` - returns an integer or the number generated files for the specified group
83
84
85 `curl localhost:2222/ctr_unique_files` - returns an integer of the number generated unique files for all groups
86
87 `curl localhost:2222/groups/ctr_unique_files` - returns a list of integers of the number generated unique files for each group
88
89 `curl localhost:2222/ctr_unique_files/<consumer-group>` - returns an integer or the number generated unique files for the specified group
90
91
92
93 `curl localhost:2222/ctr_events` - returns the total number of events for all groups
94
95 `curl localhost:2222/groups/ctr_events` - returns a list the integer of the total number of events for each group
96
97 `curl localhost:2222/ctr_events/<consumer-group>` - returns the total number of events for a specified group
98
99
100 `curl localhost:2222/exe_time_first_poll` - returns the execution time in mm:ss from the first poll
101
102 `curl localhost:2222/groups/exe_time_first_poll` - returns a list of the execution time in mm:ss from the first poll for each group
103
104 `curl localhost:2222/exe_time_first_poll/<consumer-group>` - returns the execution time in mm:ss from the first poll for the specified group
105
106
107 `curl localhost:2222/ctr_unique_PNFs` - returns the number of unique PNFS in all events.
108
109 `curl localhost:2222/groups/ctr_unique_PNFs` - returns a list of the number of unique PNFS in all events for each group.
110
111 `curl localhost:2222/ctr_unique_PNFs/<consumer-group>` - returns the number of unique PNFS in all events for the specified group.
112
113
114 #Alternative to running python (as described below) on your machine, use the docker files.
115 1. Build docker container with ```docker build -t mrsim:latest .```
116 2. Run the container ```docker-compose up```
117 The behavior can be changed by argument to the python script in the docker-compose.yml
118
119
120 ##Common TC info
121 File names for 1MB, 5MB and 50MB files
122 Files in the format: <size-in-mb>MB_<sequence-number>.tar.gz    Ex. for 5MB file with sequence number 12:  5MB_12.tar.gz
123 The sequence numbers are stepped so that all files have unique names
124 Missing files (files that are not expected to be found in the ftp server. Format: MissingFile_<sequence-number>.tar.gz
125
126 When the number of events are exhausted, empty replies are returned '[]', for the limited test cases. For endless tc no empty replies will be given.
127 Test cases are limited unless noted as 'endless'.
128
129 TC100 - One ME, SFTP, 1 1MB file, 1 event
130
131 TC101 - One ME, SFTP, 1 5MB file, 1 event
132
133 TC102 - One ME, SFTP, 1 50MB file, 1 event
134
135 TC110 - One ME, SFTP, 1MB files, 1 file per event, 100 events, 1 event per poll.
136
137 TC111 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll.
138
139 TC112 - One ME, SFTP, 5MB files, 100 files per event, 100 events, 1 event per poll.
140
141 TC113 - One ME, SFTP, 1MB files, 100 files per event, 100 events. All events in one poll.
142
143
144 TC120 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% of replies each: no response, empty message, slow response, 404-error, malformed json
145
146 TC121 - One ME, SFTP, 1MB files, 100 files per event, 100 events, 1 event per poll. 10% missing files
147
148 TC122 - One ME, SFTP, 1MB files, 100 files per event, 100 events. 1 event per poll. All files with identical name.
149
150 TC500 - 700 MEs, SFTP, 1MB files, 2 new files per event, 700 events, all event in one poll
151
152 TC501 - 700 MEs, SFTP, 5MB files, 2 new files per event, 700 events, all event in one poll
153
154 TC502 - 700 MEs, SFTP, 50MB files, 2 new files per event, 700 events, all event in one poll
155
156 TC510 - 700 MEs, SFTP, 1MB files, 1 file per event, 3500 events, 700 event per poll.
157
158 TC511 - 700 MEs, SFTP, 1KB files, 1 file per event, 3500 events, 700 event per poll
159
160 TC550 - 700 MEs, SFTP, 50MB files, 1 file per event, 3500 events, 700 event per poll
161
162 TC710 - 700 MEs, SFTP, 1MB files, 100 files per event, 3500 events, 35 event per poll
163
164 TC1000 - One ME, SFTP, 1MB files, 100 files per event, endless number of events, 1 event per poll
165
166 TC1001 - One ME, SFTP, 5MB files, 100 files per event, endless number of events, 1 event per poll
167
168 TC1100 - 700 ME, SFTP, 1MB files, 100 files per event, endless number of events, 35 event per poll
169
170 TC1101 - 700 ME, SFTP, 5MB files, 100 files per event, endless number of events, 35 event per poll
171
172 TC1102 - 700 ME, SFTP, 50MB files, 100 files per event, endless number of events, 35 event per poll
173
174 TC1200 - 700 ME, SFTP, 1MB files, 100 new files per event, endless number of events, 35 event per poll
175
176 TC1201 - 700 ME, SFTP, 5MB files, 100 new files per event, endless number of events, 35 event per poll
177
178 TC1202 - 700 ME, SFTP, 50MB files, 100 new files per event, endless number of events, 35 event per poll
179
180 TC1300 - 700 ME, SFTP, 1MB files, 100 files per event, endless number of events, 35 event per poll, 20 event polls every 15min
181
182 TC1301 - 700 ME, SFTP, 5MB files, 100 files per event, endless number of events, 35 event per poll, 20 event polls every 15min
183
184 TC1302 - 700 ME, SFTP, 50MB files, 100 files per event, endless number of events, 35 event per poll, 20 event polls every 15min
185
186 TC1500 - 700 ME, SFTP, 1MB files, 100 files per event, 35 events per poll, simulating 25h backlog of decreasing number of outdated files and then 20 event polls every 15min for 1h
187
188 Changing the first digit in tc number will change the test case to run FTPS instead. Eg. TC201 is FTPS version of TC101.
189
190 TC2XX is same as TC1XX but with FTPS
191
192 TC6XX is same as TC5XX but with FTPS
193
194 TC8XX is same as TC7XX but with FTPS
195
196 TC2XXX is same as TC1XXX but with FTPS
197
198
199 ## Developer workflow
200
201 1. ```sudo apt install python3-venv```
202 2. ```source .env/bin/activate/```
203 3. ```pip3 install "anypackage"```      #also include in source code
204 4. ```pip3 freeze | grep -v "pkg-resources" > requirements.txt```   #to create a req file
205 5. ```FLASK_APP=mr-sim.py flask run```
206
207     or
208
209    ```python3 mr-sim.py ```
210
211 6. Check/lint/format the code before commit/amed by ```autopep8 --in-place --aggressive --aggressive mr-sim.py```
212
213
214 ## User workflow on *NIX
215
216
217 When cloning/fetching from the repository first time:
218 1. `git clone`
219 2. `cd "..." `          #navigate to this folder
220 3. `source setup.sh `   #setting up virtualenv and install requirements
221
222     you'll get a sourced virtualenv shell here, check prompt
223 4. `(env) $ python3 mr-sim.py --help`
224
225     alternatively
226
227     `(env) $ python3 mr-sim.py --tc1`
228
229 Every time you run the script, you'll need to step into the virtualenv by following step 3 first.
230
231 ## User workflow on Windows
232
233 When cloning/fetching from the repository first time:
234
235 1. 'git clone'
236 2. then step into the folder
237 3. 'pip3 install virtualenv'
238 4. 'pip3 install virtualenvwrapper-win'
239 5. 'mkvirtualenv env'
240 6. 'workon env'
241 7. 'pip3 install -r requirements.txt'   #this will install in the local environment then
242 8. 'python3 dfc-sim.py'
243
244 Every time you run the script, you'll need to step into the virtualenv by step 2+6.