added unit tests for the roster #89

Merged
julius-lautz merged 37 commits from roster_tests into dev 2021-11-28 23:26:38 +00:00
86 changed files with 3444 additions and 345 deletions

View File

@ -26,14 +26,28 @@ services:
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https" - "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
tapas-db:
image: mongo
restart: unless-stopped
container_name: tapas_mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
ports:
- "27017:27017"
command: mongod --quiet --logpath /dev/null
tapas-tasks: tapas-tasks:
image: openjdk image: openjdk
command: "java -jar /data/tapas-tasks-0.0.1-SNAPSHOT.jar" command: "java -jar /data/tapas-tasks-0.0.1-SNAPSHOT.jar"
restart: unless-stopped restart: unless-stopped
depends_on:
- tapas-db
volumes: volumes:
- ./:/data/ - ./:/data/
environment: environment:
roster.uri: http://roster:8082 roster.uri: http://roster:8082
spring.data.mongodb.uri: mongodb://root:password@tapas-db:27017
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.tapas-tasks.rule=Host(`tapas-tasks.${PUB_IP}.nip.io`)" - "traefik.http.routers.tapas-tasks.rule=Host(`tapas-tasks.${PUB_IP}.nip.io`)"
@ -47,6 +61,8 @@ services:
image: openjdk image: openjdk
command: "java -jar /data/tapas-auction-house-0.0.1-SNAPSHOT.jar" command: "java -jar /data/tapas-auction-house-0.0.1-SNAPSHOT.jar"
restart: unless-stopped restart: unless-stopped
depends_on:
- tapas-db
volumes: volumes:
- ./:/data/ - ./:/data/
environment: environment:
@ -64,13 +80,16 @@ services:
image: openjdk image: openjdk
command: "java -jar /data/roster-0.0.1-SNAPSHOT.jar" command: "java -jar /data/roster-0.0.1-SNAPSHOT.jar"
restart: unless-stopped restart: unless-stopped
depends_on:
- tapas-db
volumes: volumes:
- ./:/data/ - ./:/data/
environment: environment:
task-list.uri: http://tapas-tasks:8081 task.list.uri: http://tapas-tasks:8081
executor-robot.uri: http://executor-robot:8084 executor.robot.uri: http://executor-robot:8084
executor-computation.uri: http://executor-computation:8085 executor.computation.uri: http://executor-computation:8085
mqtt.broker.uri: tcp://broker.hivemq.com:1883 mqtt.broker.uri: tcp://broker.hivemq.com:1883
spring.data.mongodb.uri: mongodb://root:password@tapas-db:27017
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.roster.rule=Host(`roster.${PUB_IP}.nip.io`)" - "traefik.http.routers.roster.rule=Host(`roster.${PUB_IP}.nip.io`)"
@ -84,10 +103,13 @@ services:
image: openjdk image: openjdk
command: "java -jar /data/executor-pool-0.0.1-SNAPSHOT.jar" command: "java -jar /data/executor-pool-0.0.1-SNAPSHOT.jar"
restart: unless-stopped restart: unless-stopped
depends_on:
- tapas-db
volumes: volumes:
- ./:/data/ - ./:/data/
environment: environment:
mqtt.broker.uri: tcp://broker.hivemq.com:1883 mqtt.broker.uri: tcp://broker.hivemq.com:1883
spring.data.mongodb.uri: mongodb://root:password@tapas-db:27017
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.executor-pool.rule=Host(`executor-pool.${PUB_IP}.nip.io`)" - "traefik.http.routers.executor-pool.rule=Host(`executor-pool.${PUB_IP}.nip.io`)"
@ -104,11 +126,12 @@ services:
depends_on: depends_on:
- executor-pool - executor-pool
- roster - roster
- tapas-db
volumes: volumes:
- ./:/data/ - ./:/data/
environment: environment:
executor_pool_uri: http://executor-pool:8083 EXECUTOR_POOL_URI: http://executor-pool:8083
roster_uri: http://roster:8082 ROSTER_URI: http://roster:8082
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.executor-computation.rule=Host(`executor-computation.${PUB_IP}.nip.io`)" - "traefik.http.routers.executor-computation.rule=Host(`executor-computation.${PUB_IP}.nip.io`)"
@ -124,11 +147,12 @@ services:
depends_on: depends_on:
- executor-pool - executor-pool
- roster - roster
- tapas-db
volumes: volumes:
- ./:/data/ - ./:/data/
environment: environment:
executor_pool_uri: http://executor-pool:8083 EXECUTOR_POOL_URI: http://executor-pool:8083
roster_uri: http://roster:8082 ROSTER_URI: http://roster:8082
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.executor-robot.rule=Host(`executor-robot.${PUB_IP}.nip.io`)" - "traefik.http.routers.executor-robot.rule=Host(`executor-robot.${PUB_IP}.nip.io`)"

View File

@ -0,0 +1,266 @@
[2021-11-28 16:28:04 DEBUG] [cli:103] ###############################################################################
[2021-11-28 16:28:04 DEBUG] [cli:104] Running command 'run'
[2021-11-28 16:28:04 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-28 16:28:05 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 16:28:05 DEBUG] [caching:24] Building activity cache...
[2021-11-28 16:28:05 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 16:28:05 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-28 16:28:05 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 16:28:05 DEBUG] [secret:78] Loading secrets...
[2021-11-28 16:28:05 DEBUG] [secret:104] Done loading secrets
[2021-11-28 16:28:05 INFO] [experiment:109] Experiment looks valid
[2021-11-28 16:28:05 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 16:28:05 DEBUG] [caching:24] Building activity cache...
[2021-11-28 16:28:05 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 16:28:05 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 16:28:05 DEBUG] [secret:78] Loading secrets...
[2021-11-28 16:28:05 DEBUG] [secret:104] Done loading secrets
[2021-11-28 16:28:05 INFO] [run:319] Running experiment: What is the impact of an expired certificate on our application chain?
[2021-11-28 16:28:05 DEBUG] [__init__:49] Initializing controls
[2021-11-28 16:28:05 INFO] [run:336] Steady-state strategy: default
[2021-11-28 16:28:05 INFO] [run:340] Rollbacks strategy: default
[2021-11-28 16:28:05 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 16:28:05 INFO] [run:599] Playing your experiment's method now...
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:28:05 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-28 16:28:05 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 16:28:05 DEBUG] [activity:260] Activity failed
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
raise err
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
self.send(msg)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
self.connect()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/enable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 24, in enable_chaosmonkey
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/enable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
result = run_python_activity(activity, configuration, secrets)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
raise ActivityFailed(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 24, in enable_chaosmonkey
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/enable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-28 16:28:05 ERROR] [activity:213] => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/enable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438d220>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:28:05 INFO] [activity:188] Action: configure_assaults
[2021-11-28 16:28:05 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 16:28:05 DEBUG] [activity:260] Activity failed
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
raise err
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
self.send(msg)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
self.connect()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/assaults (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 83, in change_assaults_configuration
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/assaults (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
result = run_python_activity(activity, configuration, secrets)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
raise ActivityFailed(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 83, in change_assaults_configuration
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/assaults (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-28 16:28:05 ERROR] [activity:213] => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8085): Max retries exceeded with url: /actuator/chaosmonkey/assaults (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x10438de50>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 16:28:05 INFO] [run:885] Let's rollback...
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 16:28:05 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 16:28:05 INFO] [run:450] Experiment ended with status: completed
[2021-11-28 16:28:05 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 16:28:05 DEBUG] [__init__:82] Cleaning up controls
[2021-11-28 16:28:05 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 16:54:22 DEBUG] [cli:103] ###############################################################################
[2021-11-28 16:54:22 DEBUG] [cli:104] Running command 'run'
[2021-11-28 16:54:22 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-28 16:54:23 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-28 16:54:23 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 16:54:23 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 16:54:23 DEBUG] [caching:24] Building activity cache...
[2021-11-28 16:54:23 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 16:54:23 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-28 16:54:23 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 16:54:23 DEBUG] [secret:78] Loading secrets...
[2021-11-28 16:54:23 DEBUG] [secret:104] Done loading secrets
[2021-11-28 16:54:23 INFO] [experiment:109] Experiment looks valid
[2021-11-28 16:54:23 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 16:54:23 DEBUG] [caching:24] Building activity cache...
[2021-11-28 16:54:23 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 16:54:23 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 16:54:23 DEBUG] [secret:78] Loading secrets...
[2021-11-28 16:54:23 DEBUG] [secret:104] Done loading secrets
[2021-11-28 16:54:23 INFO] [run:319] Running experiment: What is the impact of an expired certificate on our application chain?
[2021-11-28 16:54:23 DEBUG] [__init__:49] Initializing controls
[2021-11-28 16:54:23 INFO] [run:336] Steady-state strategy: default
[2021-11-28 16:54:23 INFO] [run:340] Rollbacks strategy: default
[2021-11-28 16:54:23 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-28 16:54:23 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 16:54:23 INFO] [run:599] Playing your experiment's method now...
[2021-11-28 16:54:23 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 16:54:23 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:54:23 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-28 16:54:23 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 16:54:24 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-28T15:54:24.502699Z"}'
[2021-11-28 16:54:24 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:54:24 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:54:24 INFO] [activity:188] Action: configure_assaults
[2021-11-28 16:54:24 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 16:54:25 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-28 16:54:25 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:54:25 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 16:54:25 INFO] [run:885] Let's rollback...
[2021-11-28 16:54:25 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 16:54:25 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-28 16:54:25 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 16:54:25 INFO] [run:450] Experiment ended with status: completed
[2021-11-28 16:54:25 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 16:54:25 DEBUG] [__init__:82] Cleaning up controls
[2021-11-28 16:54:25 DEBUG] [caching:42] Clearing activities cache

View File

@ -0,0 +1,24 @@
{
"title": "Disable chaos monkey",
"description": "Disable",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [],
"rollbacks": [
{
"name": "disable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator"
},
"func": "disable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
]
}

View File

@ -0,0 +1,54 @@
{
"title": "Testing exceptions",
"description": "Testing exceptions!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": false,
"killApplicationActive": false,
"restartApplicationActive": false,
"exceptionsActive": true,
"exception": {
"type": "java.lang.RuntimeException",
"arguments": [
{
"className": "java.lang.String",
"value": "Exception assault has been carried out"
}
]
}
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,113 @@
{
"chaoslib-version": "1.23.0",
"platform": "macOS-12.0-arm64-arm-64bit",
"node": "Marcels-MBP-M1",
"experiment": {
"title": "What is the impact of an expired certificate on our application chain?",
"description": "If a certificate expires, we should gracefully deal with the issue.",
"tags": [
"tls"
],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false,
"restartApplicationActive": false
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": [],
"dry": null
},
"start": "2021-11-28T15:54:23.134945",
"status": "completed",
"deviated": false,
"steady_states": {
"before": null,
"after": null,
"during": []
},
"run": [
{
"activity": {
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
"output": "{\"status\":\"Chaos Monkey is enabled\",\"enabledAt\":\"2021-11-28T15:54:24.502699Z\"}",
"status": "succeeded",
"start": "2021-11-28T15:54:23.135657",
"end": "2021-11-28T15:54:24.853870",
"duration": 1.718213
},
{
"activity": {
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false,
"restartApplicationActive": false
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
"output": "Assault config has changed",
"status": "succeeded",
"start": "2021-11-28T15:54:24.854282",
"end": "2021-11-28T15:54:25.705360",
"duration": 0.851078
}
],
"rollbacks": [],
"end": "2021-11-28T15:54:25.706100",
"duration": 2.609093189239502
}

View File

@ -0,0 +1,45 @@
{
"title": "Testing kill & restart",
"description": "Testing behavoir when killing and restarting the application",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 5000,
"latencyActive": false,
"exceptionsActive": false,
"killApplicationActive": true,
"restartApplicationActive": true
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,45 @@
{
"title": "Testing latency",
"description": "Testing latency!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false,
"restartApplicationActive": false
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,49 @@
{
"title": "Testing memory",
"description": "Testing memory!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8085/actuator",
"assaults_configuration": {
"level": 5,
"latencyActive": false,
"killApplicationActive": false,
"restartApplicationActive": false,
"exceptionsActive": false,
"memoryActive": true,
"memoryMillisecondsHoldFilledMemory": 90000,
"memoryMillisecondsWaitNextIncrease": 100,
"memoryFillIncrementFraction": 0.9,
"memoryFillTargetFraction": 0.95,
"runtimeAssaultCronExpression": "*/1 * * * * ?"
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

14
.experiments/readme.md Normal file
View File

@ -0,0 +1,14 @@
# Create python env
python3 -m venv ~/.venvs/chaostk
# Activate python env
source ~/.venvs/chaostk/bin/activate
# Run tests
chaos run latency.json
chaos run kill-restart.json
# Disable tests
chaos run disable.json

View File

@ -0,0 +1,135 @@
[2021-11-28 14:43:28 DEBUG] [cli:103] ###############################################################################
[2021-11-28 14:43:28 DEBUG] [cli:104] Running command 'run'
[2021-11-28 14:43:28 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-28 14:43:42 DEBUG] [cli:103] ###############################################################################
[2021-11-28 14:43:42 DEBUG] [cli:104] Running command 'run'
[2021-11-28 14:43:42 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-28 14:43:42 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-28 14:43:42 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 14:43:42 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 14:43:42 DEBUG] [caching:24] Building activity cache...
[2021-11-28 14:43:42 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 14:43:42 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-28 14:43:42 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 14:43:42 DEBUG] [secret:78] Loading secrets...
[2021-11-28 14:43:42 DEBUG] [secret:104] Done loading secrets
[2021-11-28 14:43:42 INFO] [experiment:109] Experiment looks valid
[2021-11-28 14:43:42 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 14:43:42 DEBUG] [caching:24] Building activity cache...
[2021-11-28 14:43:42 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 14:43:42 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 14:43:42 DEBUG] [secret:78] Loading secrets...
[2021-11-28 14:43:42 DEBUG] [secret:104] Done loading secrets
[2021-11-28 14:43:42 INFO] [run:319] Running experiment: What is the impact of an expired certificate on our application chain?
[2021-11-28 14:43:42 DEBUG] [__init__:49] Initializing controls
[2021-11-28 14:43:42 INFO] [run:336] Steady-state strategy: default
[2021-11-28 14:43:42 INFO] [run:340] Rollbacks strategy: default
[2021-11-28 14:43:42 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-28 14:43:42 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 14:43:42 INFO] [run:599] Playing your experiment's method now...
[2021-11-28 14:43:42 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 14:43:42 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 14:43:42 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-28 14:43:42 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 14:43:43 DEBUG] [activity:260] Activity failed
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 36, in enable_chaosmonkey
raise FailedActivity(f"Enable ChaosMonkey failed: {response.text}")
chaoslib.exceptions.ActivityFailed: Enable ChaosMonkey failed: {"timestamp":"2021-11-28T13:43:43.069+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/enable"}
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
result = run_python_activity(activity, configuration, secrets)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
raise ActivityFailed(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 36, in enable_chaosmonkey
raise FailedActivity(f"Enable ChaosMonkey failed: {response.text}")
chaoslib.exceptions.ActivityFailed: chaoslib.exceptions.ActivityFailed: Enable ChaosMonkey failed: {"timestamp":"2021-11-28T13:43:43.069+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/enable"}
[2021-11-28 14:43:43 ERROR] [activity:213] => failed: chaoslib.exceptions.ActivityFailed: Enable ChaosMonkey failed: {"timestamp":"2021-11-28T13:43:43.069+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/enable"}
[2021-11-28 14:43:43 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 14:43:43 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 14:43:43 INFO] [activity:188] Action: configure_assaults
[2021-11-28 14:43:43 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 14:43:43 DEBUG] [activity:260] Activity failed
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 96, in change_assaults_configuration
raise FailedActivity(
chaoslib.exceptions.ActivityFailed: Change ChaosMonkey Assaults Configuration failed: {"timestamp":"2021-11-28T13:43:43.203+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/assaults"}
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
result = run_python_activity(activity, configuration, secrets)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
raise ActivityFailed(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 96, in change_assaults_configuration
raise FailedActivity(
chaoslib.exceptions.ActivityFailed: chaoslib.exceptions.ActivityFailed: Change ChaosMonkey Assaults Configuration failed: {"timestamp":"2021-11-28T13:43:43.203+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/assaults"}
[2021-11-28 14:43:43 ERROR] [activity:213] => failed: chaoslib.exceptions.ActivityFailed: Change ChaosMonkey Assaults Configuration failed: {"timestamp":"2021-11-28T13:43:43.203+00:00","status":404,"error":"Not Found","message":"No message available","path":"/actuator/chaosmonkey/assaults"}
[2021-11-28 14:43:43 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 14:43:43 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 14:43:43 INFO] [run:885] Let's rollback...
[2021-11-28 14:43:43 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 14:43:43 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-28 14:43:43 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 14:43:43 INFO] [run:450] Experiment ended with status: completed
[2021-11-28 14:43:43 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 14:43:43 DEBUG] [__init__:82] Cleaning up controls
[2021-11-28 14:43:43 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 16:24:55 DEBUG] [cli:103] ###############################################################################
[2021-11-28 16:24:55 DEBUG] [cli:104] Running command 'run'
[2021-11-28 16:24:55 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-28 16:24:55 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-28 16:24:55 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 16:24:55 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 16:24:55 DEBUG] [caching:24] Building activity cache...
[2021-11-28 16:24:55 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 16:24:55 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-28 16:24:55 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 16:24:55 DEBUG] [secret:78] Loading secrets...
[2021-11-28 16:24:55 DEBUG] [secret:104] Done loading secrets
[2021-11-28 16:24:55 INFO] [experiment:109] Experiment looks valid
[2021-11-28 16:24:55 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 16:24:55 DEBUG] [caching:24] Building activity cache...
[2021-11-28 16:24:55 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 16:24:55 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 16:24:55 DEBUG] [secret:78] Loading secrets...
[2021-11-28 16:24:55 DEBUG] [secret:104] Done loading secrets
[2021-11-28 16:24:55 INFO] [run:319] Running experiment: What is the impact of an expired certificate on our application chain?
[2021-11-28 16:24:55 DEBUG] [__init__:49] Initializing controls
[2021-11-28 16:24:55 INFO] [run:336] Steady-state strategy: default
[2021-11-28 16:24:55 INFO] [run:340] Rollbacks strategy: default
[2021-11-28 16:24:55 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-28 16:24:55 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 16:24:55 INFO] [run:599] Playing your experiment's method now...
[2021-11-28 16:24:55 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 16:24:55 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:24:55 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-28 16:24:55 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 16:24:56 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-28T15:24:56.52458Z"}'
[2021-11-28 16:24:56 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:24:56 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:24:56 INFO] [activity:188] Action: configure_assaults
[2021-11-28 16:24:56 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 16:24:57 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-28 16:24:57 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 16:24:57 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 16:24:57 INFO] [run:885] Let's rollback...
[2021-11-28 16:24:57 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 16:24:57 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-28 16:24:57 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 16:24:57 INFO] [run:450] Experiment ended with status: completed
[2021-11-28 16:24:57 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 16:24:57 DEBUG] [__init__:82] Cleaning up controls
[2021-11-28 16:24:57 DEBUG] [caching:42] Clearing activities cache

View File

@ -0,0 +1,24 @@
{
"title": "Disable chaos monkey",
"description": "Disable",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [],
"rollbacks": [
{
"name": "disable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator"
},
"func": "disable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
]
}

View File

@ -0,0 +1,54 @@
{
"title": "Testing exceptions",
"description": "Testing exceptions!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": false,
"killApplicationActive": false,
"restartApplicationActive": false,
"exceptionsActive": true,
"exception": {
"type": "java.lang.RuntimeException",
"arguments": [
{
"className": "java.lang.String",
"value": "Exception assault has been carried out"
}
]
}
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,113 @@
{
"chaoslib-version": "1.23.0",
"platform": "macOS-12.0-arm64-arm-64bit",
"node": "Marcels-MBP-M1",
"experiment": {
"title": "What is the impact of an expired certificate on our application chain?",
"description": "If a certificate expires, we should gracefully deal with the issue.",
"tags": [
"tls"
],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false,
"restartApplicationActive": false
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": [],
"dry": null
},
"start": "2021-11-28T15:24:55.984078",
"status": "completed",
"deviated": false,
"steady_states": {
"before": null,
"after": null,
"during": []
},
"run": [
{
"activity": {
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
"output": "{\"status\":\"Chaos Monkey is enabled\",\"enabledAt\":\"2021-11-28T15:24:56.52458Z\"}",
"status": "succeeded",
"start": "2021-11-28T15:24:55.984855",
"end": "2021-11-28T15:24:56.785205",
"duration": 0.80035
},
{
"activity": {
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false,
"restartApplicationActive": false
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
"output": "Assault config has changed",
"status": "succeeded",
"start": "2021-11-28T15:24:56.785494",
"end": "2021-11-28T15:24:57.394090",
"duration": 0.608596
}
],
"rollbacks": [],
"end": "2021-11-28T15:24:57.394597",
"duration": 1.4326798915863037
}

View File

@ -0,0 +1,45 @@
{
"title": "Testing kill & restart",
"description": "Testing behavoir when killing and restarting the application",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 5000,
"latencyActive": false,
"exceptionsActive": false,
"killApplicationActive": true,
"restartApplicationActive": true
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,45 @@
{
"title": "Testing latency",
"description": "Testing latency!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false,
"restartApplicationActive": false
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,49 @@
{
"title": "Testing memory",
"description": "Testing memory!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8082/actuator",
"assaults_configuration": {
"level": 5,
"latencyActive": false,
"killApplicationActive": false,
"restartApplicationActive": false,
"exceptionsActive": false,
"memoryActive": true,
"memoryMillisecondsHoldFilledMemory": 90000,
"memoryMillisecondsWaitNextIncrease": 100,
"memoryFillIncrementFraction": 0.9,
"memoryFillTargetFraction": 0.95,
"runtimeAssaultCronExpression": "*/1 * * * * ?"
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,936 @@
[2021-11-27 11:35:02 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:35:02 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:35:02 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:35:02 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:35:02 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:35:02 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:35:02 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:35:02 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:35:02 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:35:02 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:35:02 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:35:02 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:35:02 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:35:02 ERROR] [cli:251] hypothesis requires a title
[2021-11-27 11:35:02 DEBUG] [cli:252] hypothesis requires a title
[2021-11-27 11:35:57 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:35:57 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:35:57 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:35:58 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:35:58 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:35:58 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:35:58 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:35:58 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:35:58 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:35:58 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:35:58 ERROR] [cli:251] experiment requires a description
[2021-11-27 11:35:58 DEBUG] [cli:252] experiment requires a description
[2021-11-27 11:36:18 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:36:18 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:36:18 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:36:18 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:36:18 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:36:18 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:36:18 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:36:18 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:36:18 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:36:18 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:36:18 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:36:18 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:36:18 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:36:18 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:36:18 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:36:18 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:36:18 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:36:18 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:36:18 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:36:18 INFO] [run:319] Running experiment: Testing kill & restart
[2021-11-27 11:36:18 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:36:18 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:36:18 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:36:18 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:36:18 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:36:18 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:36:18 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:36:18 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:18 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-27 11:36:18 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:36:19 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:36:19.060458Z"}'
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:19 INFO] [activity:188] Action: configure_assaults
[2021-11-27 11:36:19 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:36:19 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:36:19 INFO] [run:885] Let's rollback...
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:36:19 INFO] [rollback:30] Rollback: disable_chaosmonkey
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:19 INFO] [activity:188] Action: disable_chaosmonkey
[2021-11-27 11:36:19 DEBUG] [python:33] Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:36:19 DEBUG] [activity:260] Activity failed
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
raise err
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
self.send(msg)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
self.connect()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
result = run_python_activity(activity, configuration, secrets)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
raise ActivityFailed(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-27 11:36:19 ERROR] [activity:213] => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x106688100>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:36:19 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:36:19 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:36:19 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:36:19 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:36:54 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:36:54 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:36:54 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:36:54 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:36:54 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:36:54 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:36:54 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:36:54 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:36:54 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:36:54 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:36:54 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:36:54 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:36:54 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:36:54 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:36:54 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:36:54 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:36:54 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:36:54 INFO] [run:319] Running experiment: Testing kill & restart
[2021-11-27 11:36:54 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:36:54 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:36:54 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:36:54 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:36:54 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:54 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-27 11:36:54 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:36:54 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:36:54.668324Z"}'
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:54 INFO] [activity:188] Action: configure_assaults
[2021-11-27 11:36:54 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:36:54 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:36:54 INFO] [run:885] Let's rollback...
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:36:54 INFO] [rollback:30] Rollback: disable_chaosmonkey
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:54 INFO] [activity:188] Action: disable_chaosmonkey
[2021-11-27 11:36:54 DEBUG] [python:33] Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:36:54 DEBUG] [activity:260] Activity failed
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
raise err
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
self.send(msg)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
self.connect()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
result = run_python_activity(activity, configuration, secrets)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
raise ActivityFailed(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-27 11:36:54 ERROR] [activity:213] => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x104be0100>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:36:54 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:36:54 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:36:54 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:36:54 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:36:59 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:36:59 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:36:59 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:37:00 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:37:00 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:37:00 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:37:00 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:37:00 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:37:00 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:37:00 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:37:00 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:37:00 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:37:00 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:37:00 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:37:00 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:37:00 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:37:00 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:37:00 INFO] [run:319] Running experiment: Testing kill & restart
[2021-11-27 11:37:00 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:37:00 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:37:00 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:37:00 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:37:00 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:37:00 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-27 11:37:00 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:37:00 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:37:00.591716Z"}'
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:37:00 INFO] [activity:188] Action: configure_assaults
[2021-11-27 11:37:00 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:37:00 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:37:00 INFO] [run:885] Let's rollback...
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:37:00 INFO] [rollback:30] Rollback: disable_chaosmonkey
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:37:00 INFO] [activity:188] Action: disable_chaosmonkey
[2021-11-27 11:37:00 DEBUG] [python:33] Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:37:00 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-27T10:37:00.650024Z"}'
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:37:00 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:37:00 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:37:00 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:37:00 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:38:39 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:38:39 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:38:39 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:38:40 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:38:40 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:38:40 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:38:40 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:38:40 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:38:40 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:38:40 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:38:40 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:38:40 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:38:40 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:38:40 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:38:40 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:38:40 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:38:40 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:38:40 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:38:40 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:38:40 INFO] [run:319] Running experiment: Testing kill & restart
[2021-11-27 11:38:40 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:38:40 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:38:40 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:38:40 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:38:40 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:38:40 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:38:40 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:38:40 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:38:40 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-27 11:38:40 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:38:41 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:38:40.795245Z"}'
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:38:41 INFO] [activity:188] Action: configure_assaults
[2021-11-27 11:38:41 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:38:41 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:38:41 INFO] [run:885] Let's rollback...
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:38:41 INFO] [rollback:30] Rollback: disable_chaosmonkey
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:38:41 INFO] [activity:188] Action: disable_chaosmonkey
[2021-11-27 11:38:41 DEBUG] [python:33] Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:38:41 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-27T10:38:41.923689Z"}'
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:38:41 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:38:41 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:38:41 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:38:41 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:42:14 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:42:14 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:42:14 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:42:15 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:42:15 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:42:15 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:42:15 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:42:15 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:42:15 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:42:15 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:42:15 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:42:15 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:42:15 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:42:15 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:42:15 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:42:15 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:42:15 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:42:15 INFO] [run:319] Running experiment: Testing kill & restart
[2021-11-27 11:42:15 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:42:15 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:42:15 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:42:15 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:42:15 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:42:15 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-27 11:42:15 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:42:15 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:42:15.310527Z"}'
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:42:15 INFO] [activity:188] Action: configure_assaults
[2021-11-27 11:42:15 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:42:15 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:42:15 INFO] [run:885] Let's rollback...
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:42:15 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:42:15 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:42:15 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:42:15 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:42:15 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:43:22 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:43:22 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:43:22 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:43:23 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:43:23 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:43:23 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:43:23 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:43:23 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:43:23 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:43:23 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:43:23 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:43:23 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:43:23 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:43:23 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:43:23 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:43:23 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:43:23 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:43:23 INFO] [run:319] Running experiment: What is the impact of an expired certificate on our application chain?
[2021-11-27 11:43:23 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:43:23 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:43:23 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:43:23 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:43:23 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:43:23 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-27 11:43:23 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:43:23 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:43:23.565576Z"}'
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:43:23 INFO] [activity:188] Action: configure_assaults
[2021-11-27 11:43:23 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:43:23 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:43:23 INFO] [run:885] Let's rollback...
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:43:23 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:43:23 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:43:23 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:43:23 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:43:23 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:43:50 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:43:50 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:43:50 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:43:50 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:43:50 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:43:50 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:43:50 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:43:50 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:43:50 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:43:50 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:43:50 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:43:50 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:43:50 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:43:50 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:43:50 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:43:50 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:43:50 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:43:50 INFO] [run:319] Running experiment: What is the impact of an expired certificate on our application chain?
[2021-11-27 11:43:50 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:43:50 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:43:50 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:43:50 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:43:50 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:43:50 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-27 11:43:50 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:43:50 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:43:50.888054Z"}'
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:43:50 INFO] [activity:188] Action: configure_assaults
[2021-11-27 11:43:50 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:43:50 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:43:50 INFO] [run:885] Let's rollback...
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:43:50 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:43:50 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:43:50 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:43:50 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:43:50 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:47:20 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:47:20 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:47:20 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:47:21 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:47:21 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:47:21 DEBUG] [caching:35] Cached 0 activities
[2021-11-27 11:47:21 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:47:21 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:47:21 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:47:21 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:47:21 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:47:21 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:47:21 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:47:21 DEBUG] [caching:35] Cached 0 activities
[2021-11-27 11:47:21 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:47:21 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:47:21 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:47:21 INFO] [run:319] Running experiment: Disable chaos monkey
[2021-11-27 11:47:21 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:47:21 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:47:21 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:47:21 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:47:21 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:47:21 INFO] [activity:113] No declared activities, let's move on.
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:47:21 INFO] [run:885] Let's rollback...
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:47:21 INFO] [rollback:30] Rollback: disable_chaosmonkey
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:47:21 INFO] [activity:188] Action: disable_chaosmonkey
[2021-11-27 11:47:21 DEBUG] [python:33] Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:47:21 DEBUG] [activity:260] Activity failed
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 174, in _new_conn
conn = connection.create_connection(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 96, in create_connection
raise err
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/connection.py", line 86, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 394, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 239, in request
super(HTTPConnection, self).request(method, url, body=body, headers=headers)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1279, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1325, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1274, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1034, in _send_output
self.send(msg)
File "/opt/homebrew/Cellar/python@3.9/3.9.7_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 974, in send
self.connect()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 205, in connect
conn = self._new_conn()
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connection.py", line 186, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/connectionpool.py", line 755, in urlopen
retries = retries.increment(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/urllib3/util/retry.py", line 574, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/activity.py", line 253, in run_activity
result = run_python_activity(activity, configuration, secrets)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 58, in run_python_activity
raise ActivityFailed(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaoslib/provider/python.py", line 56, in run_python_activity
return func(**arguments)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py", line 53, in disable_chaosmonkey
response = api.call_api(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/api.py", line 56, in call_api
return requests.request(
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
chaoslib.exceptions.ActivityFailed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-27 11:47:21 ERROR] [activity:213] => failed: requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=8080): Max retries exceeded with url: /actuator/chaosmonkey/disable (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x1024bf220>: Failed to establish a new connection: [Errno 61] Connection refused'))
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:47:21 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:47:21 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:47:21 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:47:21 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:47:29 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:47:29 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:47:29 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:47:30 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:47:30 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:47:30 DEBUG] [caching:35] Cached 0 activities
[2021-11-27 11:47:30 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:47:30 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:47:30 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:47:30 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:47:30 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:47:30 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:47:30 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:47:30 DEBUG] [caching:35] Cached 0 activities
[2021-11-27 11:47:30 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:47:30 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:47:30 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:47:30 INFO] [run:319] Running experiment: Disable chaos monkey
[2021-11-27 11:47:30 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:47:30 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:47:30 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:47:30 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:47:30 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:47:30 INFO] [activity:113] No declared activities, let's move on.
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:47:30 INFO] [run:885] Let's rollback...
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:47:30 INFO] [rollback:30] Rollback: disable_chaosmonkey
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:47:30 INFO] [activity:188] Action: disable_chaosmonkey
[2021-11-27 11:47:30 DEBUG] [python:33] Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:47:30 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-27T10:47:30.172107Z"}'
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:47:30 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:47:30 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:47:30 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:47:30 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:49:33 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:49:33 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:49:33 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:49:33 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:49:33 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:49:33 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:49:33 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:49:33 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:49:33 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:49:33 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:49:33 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:49:33 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:49:33 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:49:33 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:49:33 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:49:33 DEBUG] [caching:35] Cached 2 activities
[2021-11-27 11:49:33 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:49:33 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:49:33 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:49:33 INFO] [run:319] Running experiment: What is the impact of an expired certificate on our application chain?
[2021-11-27 11:49:33 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:49:33 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:49:33 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:49:33 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:49:33 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:49:33 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:49:33 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:49:33 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:49:33 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-27 11:49:33 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:49:33 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-27T10:49:33.912573Z"}'
[2021-11-27 11:49:33 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:49:33 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:49:33 INFO] [activity:188] Action: configure_assaults
[2021-11-27 11:49:33 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:49:34 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-27 11:49:34 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:49:34 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:49:34 INFO] [run:885] Let's rollback...
[2021-11-27 11:49:34 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:49:34 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-27 11:49:34 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:49:34 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:49:34 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:49:34 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:49:34 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:50:00 DEBUG] [cli:103] ###############################################################################
[2021-11-27 11:50:00 DEBUG] [cli:104] Running command 'run'
[2021-11-27 11:50:00 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-27 11:50:01 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-27 11:50:01 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:50:01 DEBUG] [caching:35] Cached 0 activities
[2021-11-27 11:50:01 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-27 11:50:01 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:50:01 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:50:01 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:50:01 INFO] [experiment:109] Experiment looks valid
[2021-11-27 11:50:01 DEBUG] [caching:42] Clearing activities cache
[2021-11-27 11:50:01 DEBUG] [caching:24] Building activity cache...
[2021-11-27 11:50:01 DEBUG] [caching:35] Cached 0 activities
[2021-11-27 11:50:01 DEBUG] [configuration:54] Loading configuration...
[2021-11-27 11:50:01 DEBUG] [secret:78] Loading secrets...
[2021-11-27 11:50:01 DEBUG] [secret:104] Done loading secrets
[2021-11-27 11:50:01 INFO] [run:319] Running experiment: Disable chaos monkey
[2021-11-27 11:50:01 DEBUG] [__init__:49] Initializing controls
[2021-11-27 11:50:01 INFO] [run:336] Steady-state strategy: default
[2021-11-27 11:50:01 INFO] [run:340] Rollbacks strategy: default
[2021-11-27 11:50:01 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:50:01 INFO] [run:599] Playing your experiment's method now...
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:50:01 INFO] [activity:113] No declared activities, let's move on.
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-27 11:50:01 INFO] [run:885] Let's rollback...
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:50:01 INFO] [rollback:30] Rollback: disable_chaosmonkey
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:50:01 INFO] [activity:188] Action: disable_chaosmonkey
[2021-11-27 11:50:01 DEBUG] [python:33] Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-27 11:50:01 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-27T10:50:01.207712Z"}'
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-27 11:50:01 INFO] [run:450] Experiment ended with status: completed
[2021-11-27 11:50:01 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-27 11:50:01 DEBUG] [__init__:82] Cleaning up controls
[2021-11-27 11:50:01 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 18:00:15 DEBUG] [cli:103] ###############################################################################
[2021-11-28 18:00:15 DEBUG] [cli:104] Running command 'run'
[2021-11-28 18:00:15 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-28 18:00:15 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-28 18:00:15 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 18:00:15 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 18:00:15 DEBUG] [caching:24] Building activity cache...
[2021-11-28 18:00:15 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 18:00:15 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-28 18:00:15 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 18:00:15 DEBUG] [secret:78] Loading secrets...
[2021-11-28 18:00:15 DEBUG] [secret:104] Done loading secrets
[2021-11-28 18:00:15 INFO] [experiment:109] Experiment looks valid
[2021-11-28 18:00:15 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 18:00:15 DEBUG] [caching:24] Building activity cache...
[2021-11-28 18:00:15 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 18:00:15 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 18:00:15 DEBUG] [secret:78] Loading secrets...
[2021-11-28 18:00:15 DEBUG] [secret:104] Done loading secrets
[2021-11-28 18:00:15 INFO] [run:319] Running experiment: Testing latency
[2021-11-28 18:00:15 DEBUG] [__init__:49] Initializing controls
[2021-11-28 18:00:15 INFO] [run:336] Steady-state strategy: default
[2021-11-28 18:00:15 INFO] [run:340] Rollbacks strategy: default
[2021-11-28 18:00:15 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-28 18:00:15 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 18:00:15 INFO] [run:599] Playing your experiment's method now...
[2021-11-28 18:00:15 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 18:00:15 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:00:15 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-28 18:00:15 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 18:00:17 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-28T17:00:16.734825Z"}'
[2021-11-28 18:00:17 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:00:17 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:00:17 INFO] [activity:188] Action: configure_assaults
[2021-11-28 18:00:17 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 18:00:19 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-28 18:00:19 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:00:19 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 18:00:19 INFO] [run:885] Let's rollback...
[2021-11-28 18:00:19 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 18:00:19 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-28 18:00:19 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 18:00:19 INFO] [run:450] Experiment ended with status: completed
[2021-11-28 18:00:19 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 18:00:19 DEBUG] [__init__:82] Cleaning up controls
[2021-11-28 18:00:19 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 18:07:50 DEBUG] [cli:103] ###############################################################################
[2021-11-28 18:07:50 DEBUG] [cli:104] Running command 'run'
[2021-11-28 18:07:50 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-28 18:07:50 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-28 18:07:50 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 18:07:50 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 18:07:50 DEBUG] [caching:24] Building activity cache...
[2021-11-28 18:07:50 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 18:07:50 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-28 18:07:50 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 18:07:50 DEBUG] [secret:78] Loading secrets...
[2021-11-28 18:07:50 DEBUG] [secret:104] Done loading secrets
[2021-11-28 18:07:50 INFO] [experiment:109] Experiment looks valid
[2021-11-28 18:07:50 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 18:07:50 DEBUG] [caching:24] Building activity cache...
[2021-11-28 18:07:50 DEBUG] [caching:35] Cached 2 activities
[2021-11-28 18:07:50 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 18:07:50 DEBUG] [secret:78] Loading secrets...
[2021-11-28 18:07:51 DEBUG] [secret:104] Done loading secrets
[2021-11-28 18:07:51 INFO] [run:319] Running experiment: Testing latency
[2021-11-28 18:07:51 DEBUG] [__init__:49] Initializing controls
[2021-11-28 18:07:51 INFO] [run:336] Steady-state strategy: default
[2021-11-28 18:07:51 INFO] [run:340] Rollbacks strategy: default
[2021-11-28 18:07:51 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 18:07:51 INFO] [run:599] Playing your experiment's method now...
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:07:51 INFO] [activity:188] Action: enable_chaosmonkey
[2021-11-28 18:07:51 DEBUG] [python:33] Activity 'enable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 18:07:51 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is enabled","enabledAt":"2021-11-28T17:07:51.182021Z"}'
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:07:51 INFO] [activity:188] Action: configure_assaults
[2021-11-28 18:07:51 DEBUG] [python:33] Activity 'configure_assaults' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 18:07:51 DEBUG] [activity:205] => succeeded with 'Assault config has changed'
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 18:07:51 INFO] [run:885] Let's rollback...
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 18:07:51 INFO] [rollback:27] No declared rollbacks, let's move on.
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 18:07:51 INFO] [run:450] Experiment ended with status: completed
[2021-11-28 18:07:51 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 18:07:51 DEBUG] [__init__:82] Cleaning up controls
[2021-11-28 18:07:51 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 18:09:39 DEBUG] [cli:103] ###############################################################################
[2021-11-28 18:09:39 DEBUG] [cli:104] Running command 'run'
[2021-11-28 18:09:39 DEBUG] [cli:108] Using settings file '/Users/maece/.chaostoolkit/settings.yaml'
[2021-11-28 18:09:40 DEBUG] [settings:30] The Chaos Toolkit settings file could not be found at '/Users/maece/.chaostoolkit/settings.yaml'.
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'loader'
[2021-11-28 18:09:40 DEBUG] [caching:24] Building activity cache...
[2021-11-28 18:09:40 DEBUG] [caching:35] Cached 0 activities
[2021-11-28 18:09:40 INFO] [experiment:58] Validating the experiment's syntax
[2021-11-28 18:09:40 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 18:09:40 DEBUG] [secret:78] Loading secrets...
[2021-11-28 18:09:40 DEBUG] [secret:104] Done loading secrets
[2021-11-28 18:09:40 INFO] [experiment:109] Experiment looks valid
[2021-11-28 18:09:40 DEBUG] [caching:42] Clearing activities cache
[2021-11-28 18:09:40 DEBUG] [caching:24] Building activity cache...
[2021-11-28 18:09:40 DEBUG] [caching:35] Cached 0 activities
[2021-11-28 18:09:40 DEBUG] [configuration:54] Loading configuration...
[2021-11-28 18:09:40 DEBUG] [secret:78] Loading secrets...
[2021-11-28 18:09:40 DEBUG] [secret:104] Done loading secrets
[2021-11-28 18:09:40 INFO] [run:319] Running experiment: Disable chaos monkey
[2021-11-28 18:09:40 DEBUG] [__init__:49] Initializing controls
[2021-11-28 18:09:40 INFO] [run:336] Steady-state strategy: default
[2021-11-28 18:09:40 INFO] [run:340] Rollbacks strategy: default
[2021-11-28 18:09:40 INFO] [run:345] No steady state hypothesis defined. That's ok, just exploring.
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 18:09:40 INFO] [run:599] Playing your experiment's method now...
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 18:09:40 INFO] [activity:113] No declared activities, let's move on.
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'method'
[2021-11-28 18:09:40 INFO] [run:885] Let's rollback...
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 18:09:40 INFO] [rollback:30] Rollback: disable_chaosmonkey
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:09:40 INFO] [activity:188] Action: disable_chaosmonkey
[2021-11-28 18:09:40 DEBUG] [python:33] Activity 'disable_chaosmonkey' loaded from '/Users/maece/.venvs/chaostk/lib/python3.9/site-packages/chaosspring/actions.py'
[2021-11-28 18:09:40 DEBUG] [activity:205] => succeeded with '{"status":"Chaos Monkey is disabled","disabledAt":"2021-11-28T17:09:40.443253Z"}'
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'activity'
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'rollback'
[2021-11-28 18:09:40 INFO] [run:450] Experiment ended with status: completed
[2021-11-28 18:09:40 DEBUG] [__init__:389] No controls to apply on 'experiment'
[2021-11-28 18:09:40 DEBUG] [__init__:82] Cleaning up controls
[2021-11-28 18:09:40 DEBUG] [caching:42] Clearing activities cache

View File

@ -0,0 +1,24 @@
{
"title": "Disable chaos monkey",
"description": "Disable",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [],
"rollbacks": [
{
"name": "disable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator"
},
"func": "disable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
]
}

View File

@ -0,0 +1,54 @@
{
"title": "Testing exceptions",
"description": "Testing exceptions!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": false,
"killApplicationActive": false,
"restartApplicationActive": false,
"exceptionsActive": true,
"exception": {
"type": "java.lang.RuntimeException",
"arguments": [
{
"className": "java.lang.String",
"value": "Exception assault has been carried out"
}
]
}
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,62 @@
{
"chaoslib-version": "1.23.0",
"platform": "macOS-12.0-arm64-arm-64bit",
"node": "Marcels-MBP-M1",
"experiment": {
"title": "Disable chaos monkey",
"description": "Disable",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [],
"rollbacks": [
{
"name": "disable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator"
},
"func": "disable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"dry": null
},
"start": "2021-11-28T17:09:40.224824",
"status": "completed",
"deviated": false,
"steady_states": {
"before": null,
"after": null,
"during": []
},
"run": [],
"rollbacks": [
{
"activity": {
"name": "disable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator"
},
"func": "disable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
"output": "{\"status\":\"Chaos Monkey is disabled\",\"disabledAt\":\"2021-11-28T17:09:40.443253Z\"}",
"status": "succeeded",
"start": "2021-11-28T17:09:40.226419",
"end": "2021-11-28T17:09:40.531586",
"duration": 0.305167
}
],
"end": "2021-11-28T17:09:40.531671",
"duration": 0.33724117279052734
}

View File

@ -0,0 +1,45 @@
{
"title": "Testing kill & restart",
"description": "Testing behavoir when killing and restarting the application",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 5000,
"latencyActive": false,
"exceptionsActive": false,
"killApplicationActive": true,
"restartApplicationActive": true
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,45 @@
{
"title": "Testing latency",
"description": "Testing latency!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator",
"assaults_configuration": {
"level": 5,
"latencyRangeStart": 2000,
"latencyRangeEnd": 15000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false,
"restartApplicationActive": false
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -0,0 +1,49 @@
{
"title": "Testing memory",
"description": "Testing memory!",
"tags": [],
"steady-state-hypothesis": {
"title": "Hypothesis",
"probes": []
},
"method": [
{
"name": "enable_chaosmonkey",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator"
},
"func": "enable_chaosmonkey",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
},
{
"name": "configure_assaults",
"provider": {
"arguments": {
"base_url": "http://localhost:8081/actuator",
"assaults_configuration": {
"level": 5,
"latencyActive": false,
"killApplicationActive": false,
"restartApplicationActive": false,
"exceptionsActive": false,
"memoryActive": true,
"memoryMillisecondsHoldFilledMemory": 90000,
"memoryMillisecondsWaitNextIncrease": 100,
"memoryFillIncrementFraction": 0.9,
"memoryFillTargetFraction": 0.95,
"runtimeAssaultCronExpression": "*/1 * * * * ?"
}
},
"func": "change_assaults_configuration",
"module": "chaosspring.actions",
"type": "python"
},
"type": "action"
}
],
"rollbacks": []
}

View File

@ -1,60 +0,0 @@
# Dockerfile/Docker-Compose file based on an initial version authored by Alexander Lontke (ASSE, Fall Semester 2021)
version: "3.7"
services:
app:
build:
context: ./app
dockerfile: Dockerfile
# Use environment variables instead of application.properties
environment:
- KEY=VALUE
ports: #Just needed when testing from outside the docker network
- "8080:8080"
networks:
- tapas-network
tapas-tasks:
build:
context: ./tapas-tasks
dockerfile: Dockerfile
# Use environment variables instead of application.properties
environment:
- KEY=VALUE
ports: #Just needed when testing from outside
- "8081:8081"
networks:
- tapas-network
tapas-auction-house:
build:
context: ./tapas-auction-house
dockerfile: Dockerfile
# Use environment variables instead of application.properties
environment:
- KEY=VALUE
ports: #Just needed when testing from outside
- "8082:8082"
networks:
- tapas-network
mongodb:
image: mongo
container_name: mongodb
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 8nP7s0a # Can not be changed again later on
volumes:
- database:/data/db
networks:
- tapas-network
#Volume for mongodb. One per server.
volumes:
database:
networks:
tapas-network:
driver: bridge

View File

@ -1,5 +1,20 @@
version: "3.6" version: "3.6"
services: services:
tapas-db:
image: mongo
restart: unless-stopped
container_name: tapas_mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
ports:
- "27017:27017"
command: mongod --quiet --logpath /dev/null
hivemq:
image: hivemq/hivemq4
restart: unless-stopped
ports:
- "1883:1883"
tapas-tasks: tapas-tasks:
container_name: tapas-tasks container_name: tapas-tasks
build: build:
@ -9,54 +24,63 @@ services:
ports: ports:
- "8081:8081" - "8081:8081"
- "5005:5005" - "5005:5005"
depends_on:
- tapas-db
# - hivemq
volumes: volumes:
- ./tapas-tasks/src:/opt/app/src - ./tapas-tasks/src:/opt/app/src
- ./tapas-tasks/target:/opt/app/target - ./tapas-tasks/target:/opt/app/target
assignment: roster:
container_name: assignment container_name: roster
build: build:
context: "./assignment" context: "."
dockerfile: "Dockerfile" dockerfile: "./roster/Dockerfile"
target: development target: development
depends_on:
- tapas-db
# - hivemq
ports: ports:
- "8082:8082" - "8082:8082"
- "5006:5005" - "5006:5005"
volumes: volumes:
- ./assignment/src:/opt/app/src - ./roster/src:/opt/app/src
- ./assignment/target:/opt/app/target - ./roster/target:/opt/app/target
executor-pool: executor-pool:
container_name: executor-pool container_name: executor-pool
build: build:
context: "./executor-pool" context: "./executor-pool"
dockerfile: "Dockerfile" dockerfile: "Dockerfile"
target: development target: development
depends_on:
- tapas-db
# - hivemq
ports: ports:
- "8083:8083" - "8083:8083"
- "5007:5005" - "5007:5005"
volumes: volumes:
- ./executor-pool/src:/opt/app/src - ./executor-pool/src:/opt/app/src
- ./executor-pool/target:/opt/app/target - ./executor-pool/target:/opt/app/target
executor1: executor-computation:
container_name: executor1 container_name: executor-computation
build: build:
context: "./executor1" context: "."
dockerfile: "Dockerfile" dockerfile: "./executor-computation/Dockerfile"
target: development
ports:
- "8084:8084"
- "5008:5005"
volumes:
- ./executor1/src:/opt/app/src
- ./executor1/target:/opt/app/target
executor2:
container_name: executor2
build:
context: "./executor2"
dockerfile: "Dockerfile"
target: development target: development
ports: ports:
- "8085:8085" - "8085:8085"
- "5008:5005"
volumes:
- ./executor-computation/src:/opt/app/src
- ./executor-computation/target:/opt/app/target
executor-robot:
container_name: executor-robot
build:
context: "."
dockerfile: "./executor-robot/Dockerfile"
target: development
ports:
- "8084:8084"
- "5009:5005" - "5009:5005"
volumes: volumes:
- ./executor2/src:/opt/app/src - ./executor-robot/src:/opt/app/src
- ./executor2/target:/opt/app/target - ./executor-robot/target:/opt/app/target

View File

@ -66,6 +66,21 @@
<artifactId>common</artifactId> <artifactId>common</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>chaos-monkey-spring-boot</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
</dependencies> </dependencies>
</project> </project>

View File

@ -15,8 +15,8 @@ import ch.unisg.executorbase.executor.domain.ExecutionFinishedEvent;
public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort { public class ExecutionFinishedEventAdapter implements ExecutionFinishedEventPort {
String server = System.getenv("roster_uri") == null ? String server = System.getenv("ROSTER_URI") == null ?
"http://localhost:8082" : System.getenv("roster_uri"); "http://localhost:8082" : System.getenv("ROSTER_URI");
Logger logger = Logger.getLogger(ExecutionFinishedEventAdapter.class.getName()); Logger logger = Logger.getLogger(ExecutionFinishedEventAdapter.class.getName());

View File

@ -23,8 +23,8 @@ import org.json.JSONObject;
@Primary @Primary
public class GetAssignmentAdapter implements GetAssignmentPort { public class GetAssignmentAdapter implements GetAssignmentPort {
String server = System.getenv("roster_uri") == null ? String server = System.getenv("ROSTER_URI") == null ?
"http://localhost:8082" : System.getenv("roster_uri"); "http://localhost:8082" : System.getenv("ROSTER_URI");
Logger logger = Logger.getLogger(GetAssignmentAdapter.class.getName()); Logger logger = Logger.getLogger(GetAssignmentAdapter.class.getName());

View File

@ -22,8 +22,8 @@ import ch.unisg.executorbase.executor.domain.ExecutorType;
@Primary @Primary
public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort { public class NotifyExecutorPoolAdapter implements NotifyExecutorPoolPort {
String server = System.getenv("executor_pool_uri") == null ? String server = System.getenv("EXECUTOR_POOL_URI") == null ?
"http://localhost:8083" : System.getenv("executor_pool_uri"); "http://localhost:8083" : System.getenv("EXECUTOR_POOL_URI");
Logger logger = Logger.getLogger(NotifyExecutorPoolAdapter.class.getName()); Logger logger = Logger.getLogger(NotifyExecutorPoolAdapter.class.getName());

View File

@ -1,3 +1,15 @@
server.port=8081 server.port=8081
roster.url=http://127.0.0.1:8082 roster.url=http://127.0.0.1:8082
executor.pool.url=http://127.0.0.1:8083 executor.pool.url=http://127.0.0.1:8083
spring.profiles.active=chaos-monkey
chaos.monkey.enabled=false
management.endpoint.chaosmonkey.enabled=true
management.endpoint.chaosmonkeyjmx.enabled=true
# include specific endpoints
management.endpoints.web.exposure.include=health,info,chaosmonkey
chaos.monkey.watcher.controller=true
chaos.monkey.watcher.restController=true
chaos.monkey.watcher.service=true
chaos.monkey.watcher.repository=true
chaos.monkey.watcher.component=true

View File

@ -2,17 +2,30 @@ FROM openjdk:11 AS development
WORKDIR /opt/app WORKDIR /opt/app
# ENV SPRING_DATASOURCE_URL=jdbc:mysql://backend-db:3306/db ENV EXECUTOR_POOL_URI=http://executor-pool:8083
ENV ROSTER_URI=http://roster:8082
COPY .mvn/ .mvn COPY executor-computation/.mvn ./.mvn
COPY mvnw pom.xml mvnw.cmd ./ COPY executor-computation/mvnw executor-computation/pom.xml executor-computation/mvnw.cmd ./
RUN apt-get clean && apt-get update && apt-get install dos2unix RUN apt-get clean && apt-get update && apt-get install dos2unix
RUN dos2unix mvnw RUN dos2unix mvnw
RUN ./mvnw dependency:go-offline COPY common/pom.xml /opt/app/common/
COPY common/src /opt/app/common/src
COPY common/*target /opt/app/common/target
COPY src /opt/app/src COPY executor-base/pom.xml /opt/app/executor-base/
COPY *target /opt/app/target COPY executor-base/src /opt/app/executor-base/src
COPY executor-base/*target /opt/app/executor-base/target
COPY executor-computation/src /opt/app/src
COPY executor-computation/*target /opt/app/target
RUN ./mvnw -f /opt/app/common/pom.xml clean install
RUN ./mvnw -f /opt/app/executor-base/pom.xml clean install
RUN ./mvnw clean install
CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"] CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"]

View File

@ -52,6 +52,21 @@
<artifactId>json</artifactId> <artifactId>json</artifactId>
<version>20210307</version> <version>20210307</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>chaos-monkey-spring-boot</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -1,5 +1,7 @@
package ch.unisg.executorcomputation; package ch.unisg.executorcomputation;
import java.util.concurrent.TimeUnit;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -9,6 +11,14 @@ import ch.unisg.executorcomputation.executor.domain.Executor;
public class ExecutorcomputationApplication { public class ExecutorcomputationApplication {
public static void main(String[] args) { public static void main(String[] args) {
try {
TimeUnit.SECONDS.sleep(40);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SpringApplication.run(ExecutorcomputationApplication.class, args); SpringApplication.run(ExecutorcomputationApplication.class, args);
Executor.getExecutor(); Executor.getExecutor();
} }

View File

@ -34,11 +34,11 @@ public class Executor extends ExecutorBase {
double result = Double.NaN; double result = Double.NaN;
// try { try {
// TimeUnit.SECONDS.sleep(5); TimeUnit.SECONDS.sleep(5);
// } catch (InterruptedException e) { } catch (InterruptedException e) {
// e.printStackTrace(); e.printStackTrace();
// } }
if (operator.equalsIgnoreCase("+")) { if (operator.equalsIgnoreCase("+")) {
String[] parts = inputData.split("\\+"); String[] parts = inputData.split("\\+");

View File

@ -1 +1,14 @@
server.port=8085 server.port=8085
spring.profiles.active=chaos-monkey
chaos.monkey.enabled=false
management.endpoint.chaosmonkey.enabled=true
management.endpoint.chaosmonkeyjmx.enabled=true
# include specific endpoints
management.endpoints.web.exposure.include=health,info,chaosmonkey
chaos.monkey.watcher.controller=true
chaos.monkey.watcher.restController=true
chaos.monkey.watcher.service=true
chaos.monkey.watcher.repository=true
chaos.monkey.watcher.component=true

View File

@ -2,7 +2,9 @@ FROM openjdk:11 AS development
WORKDIR /opt/app WORKDIR /opt/app
# ENV SPRING_DATASOURCE_URL=jdbc:mysql://backend-db:3306/db ENV ROSTER_URI=http://roster:8082
ENV SPRING_DATA_MONGODB_URI=mongodb://root:password@tapas-db:27017
ENV MQTT_BROKER_URI=tcp://hivemq:1883
COPY .mvn/ .mvn COPY .mvn/ .mvn
COPY mvnw pom.xml mvnw.cmd ./ COPY mvnw pom.xml mvnw.cmd ./
@ -10,9 +12,9 @@ COPY mvnw pom.xml mvnw.cmd ./
RUN apt-get clean && apt-get update && apt-get install dos2unix RUN apt-get clean && apt-get update && apt-get install dos2unix
RUN dos2unix mvnw RUN dos2unix mvnw
RUN ./mvnw dependency:go-offline
COPY src /opt/app/src COPY src /opt/app/src
COPY *target /opt/app/target COPY *target /opt/app/target
RUN ./mvnw clean install
CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"] CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"]

View File

@ -17,6 +17,7 @@
<java.version>11</java.version> <java.version>11</java.version>
<sonar.organization>scs-asse-fs21-group1</sonar.organization> <sonar.organization>scs-asse-fs21-group1</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url> <sonar.host.url>https://sonarcloud.io</sonar.host.url>
<skipTests>true</skipTests>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>

View File

@ -1,13 +1,41 @@
package ch.unisg.executorpool; package ch.unisg.executorpool;
import java.util.concurrent.TimeUnit;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import ch.unisg.executorpool.adapter.out.persistence.mongodb.ExecutorRepository;
import ch.unisg.executorpool.application.port.out.LoadExecutorPort;
import ch.unisg.executorpool.domain.ExecutorPool;
@SpringBootApplication @SpringBootApplication
@EnableMongoRepositories(basePackageClasses = ExecutorRepository.class)
public class ExecutorPoolApplication { public class ExecutorPoolApplication {
@Autowired
private LoadExecutorPort loadExecutorPort;
public static void main(String[] args) { public static void main(String[] args) {
try {
TimeUnit.SECONDS.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SpringApplication.run(ExecutorPoolApplication.class, args); SpringApplication.run(ExecutorPoolApplication.class, args);
} }
@PostConstruct
public void initializeExecutorPool() {
// Is this allowed in main or does it need to be in a service?
ExecutorPool.getExecutorPool().initExecutorPool(loadExecutorPort.loadAllExecutors());
}
} }

View File

@ -1,5 +1,8 @@
package ch.unisg.executorpool.adapter.out.persistence.mongodb; package ch.unisg.executorpool.adapter.out.persistence.mongodb;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -26,8 +29,7 @@ public class ExecutorPersistenceAdapter implements AddExecutorPort, RemoveExecut
@Override @Override
public void removeExecutor(ExecutorClass executorClass) { public void removeExecutor(ExecutorClass executorClass) {
MongoExecutorDocument mongoExecutorDocument = executorMapper.mapToMongoDocument(executorClass); executorRepository.deleteByExecutorUri(executorClass.getExecutorUri().getValue().toString());
executorRepository.delete(mongoExecutorDocument);
} }
@Override @Override
@ -37,4 +39,13 @@ public class ExecutorPersistenceAdapter implements AddExecutorPort, RemoveExecut
return executorClass; return executorClass;
} }
@Override
public List<ExecutorClass> loadAllExecutors() {
List<ExecutorClass> executorClasses = new ArrayList<>();
for (MongoExecutorDocument exe : executorRepository.findAll()) {
executorClasses.add(executorMapper.mapToDomainEntity(exe));
}
return executorClasses;
}
} }

View File

@ -12,4 +12,6 @@ public interface ExecutorRepository extends MongoRepository<MongoExecutorDocumen
public List<MongoExecutorDocument> findByExecutorTaskType(String executorTaskType); public List<MongoExecutorDocument> findByExecutorTaskType(String executorTaskType);
public void deleteByExecutorUri(String executorUri);
} }

View File

@ -1,8 +1,11 @@
package ch.unisg.executorpool.adapter.out.persistence.mongodb; package ch.unisg.executorpool.adapter.out.persistence.mongodb;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.Data; import lombok.Data;
@Data @Data
@Document(collection = "executors")
public class MongoExecutorDocument { public class MongoExecutorDocument {
public String executorUri; public String executorUri;

View File

@ -1,9 +1,13 @@
package ch.unisg.executorpool.application.port.out; package ch.unisg.executorpool.application.port.out;
import java.util.List;
import ch.unisg.executorpool.domain.ExecutorClass; import ch.unisg.executorpool.domain.ExecutorClass;
public interface LoadExecutorPort { public interface LoadExecutorPort {
ExecutorClass loadExecutor(ExecutorClass.ExecutorUri executorUri, ExecutorClass.ExecutorTaskType executorTaskType); ExecutorClass loadExecutor(ExecutorClass.ExecutorUri executorUri, ExecutorClass.ExecutorTaskType executorTaskType);
List<ExecutorClass> loadAllExecutors();
} }

View File

@ -31,11 +31,10 @@ public class RemoveExecutorFromExecutorPoolService implements RemoveExecutorFrom
if(removedExecutor.isPresent()){ if(removedExecutor.isPresent()){
var executorRemovedEvent = new ExecutorRemovedEvent(removedExecutor.get()); var executorRemovedEvent = new ExecutorRemovedEvent(removedExecutor.get());
removeExecutorFromRepositoryPort.removeExecutor(removedExecutor.get());
executorRemovedEventPort.publishExecutorRemovedEvent(executorRemovedEvent); executorRemovedEventPort.publishExecutorRemovedEvent(executorRemovedEvent);
} }
removeExecutorFromRepositoryPort.removeExecutor(removedExecutor);
return removedExecutor; return removedExecutor;
} }
} }

View File

@ -18,7 +18,7 @@ public class ExecutorClass {
this.executorTaskType = executorTaskType; this.executorTaskType = executorTaskType;
} }
protected static ExecutorClass createExecutorClass(ExecutorUri executorUri, ExecutorTaskType executorTaskType){ public static ExecutorClass createExecutorClass(ExecutorUri executorUri, ExecutorTaskType executorTaskType){
System.out.println("New Executor: " + executorUri.value.toString() + " " + executorTaskType.getValue()); System.out.println("New Executor: " + executorUri.value.toString() + " " + executorTaskType.getValue());
return new ExecutorClass(executorUri, executorTaskType); return new ExecutorClass(executorUri, executorTaskType);
} }

View File

@ -67,6 +67,12 @@ public class ExecutorPool {
return Optional.empty(); return Optional.empty();
} }
public void initExecutorPool(List<ExecutorClass> executors){
for (ExecutorClass executor : executors) {
listOfExecutors.value.add(executor);
}
}
@Value @Value
public static class ListOfExecutors { public static class ListOfExecutors {
private List<ExecutorClass> value; private List<ExecutorClass> value;

View File

@ -1,3 +1,6 @@
server.port=8083 server.port=8083
mqtt.broker.uri=tcp://localhost:1883 mqtt.broker.uri=tcp://localhost:1883
spring.data.mongodb.uri=mongodb://root:password@localhost:27017
spring.data.mongodb.database=tapas-executors

View File

@ -0,0 +1,65 @@
package ch.unisg.executorpool;
import static org.mockito.Mockito.times;
import java.net.URI;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.mockito.BDDMockito.*;
import static org.assertj.core.api.Assertions.*;
import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolCommand;
import ch.unisg.executorpool.application.port.out.AddExecutorPort;
import ch.unisg.executorpool.application.port.out.ExecutorAddedEventPort;
import ch.unisg.executorpool.application.service.AddNewExecutorToExecutorPoolService;
import ch.unisg.executorpool.domain.ExecutorAddedEvent;
import ch.unisg.executorpool.domain.ExecutorClass;
import ch.unisg.executorpool.domain.ExecutorPool;
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri;
public class AddNewExecutorToExecutorPoolServiceTest {
private final AddExecutorPort addExecutorPort = Mockito.mock(AddExecutorPort.class);
private final ExecutorAddedEventPort newExecutorAddedEventPort = Mockito.mock(ExecutorAddedEventPort.class);
private final AddNewExecutorToExecutorPoolService addNewExecutorToExecutorPoolService = new AddNewExecutorToExecutorPoolService(
newExecutorAddedEventPort, addExecutorPort);
@Test
void addingSucceeds() {
ExecutorClass newExecutor = givenAnExecutorWithTypeAndUri(new ExecutorClass.ExecutorTaskType("test-type"),
new ExecutorClass.ExecutorUri(URI.create("example.org")));
ExecutorPool executorPool = givenAnEmptyExecutorPool(ExecutorPool.getExecutorPool());
AddNewExecutorToExecutorPoolCommand addNewExecutorToExecutorPoolCommand = new AddNewExecutorToExecutorPoolCommand(
newExecutor.getExecutorUri(), newExecutor.getExecutorTaskType());
ExecutorClass addedExecutor = addNewExecutorToExecutorPoolService.addNewExecutorToExecutorPool(addNewExecutorToExecutorPoolCommand);
assertThat(addedExecutor).isNotNull();
assertThat(executorPool.getListOfExecutors().getValue()).hasSize(1);
then(newExecutorAddedEventPort).should(times(1)).publishExecutorAddedEvent(any(ExecutorAddedEvent.class));
}
private ExecutorPool givenAnEmptyExecutorPool(ExecutorPool executorPool) {
executorPool.getListOfExecutors().getValue().clear();
return executorPool;
}
private ExecutorClass givenAnExecutorWithTypeAndUri(ExecutorClass.ExecutorTaskType executorTaskType,
ExecutorUri executorUri) {
ExecutorClass executor = Mockito.mock(ExecutorClass.class);
given(executor.getExecutorTaskType()).willReturn(executorTaskType);
given(executor.getExecutorUri()).willReturn(executorUri);
return executor;
}
}

View File

@ -0,0 +1,70 @@
package ch.unisg.executorpool;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import static org.assertj.core.api.BDDAssertions.*;
import ch.unisg.executorpool.adapter.common.formats.ExecutorJsonRepresentation;
import ch.unisg.executorpool.application.port.out.AddExecutorPort;
import ch.unisg.executorpool.domain.ExecutorPool;
import ch.unisg.executorpool.domain.ExecutorClass;
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType;
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class AddNewExecutorToExecutorPoolSystemTest {
@Autowired
private TestRestTemplate restTemplate;
@Autowired
private AddExecutorPort addExecutorPort;
@Test
void AddNewExecutorToExecutorPool() throws JSONException {
ExecutorTaskType executorTaskType = new ExecutorTaskType("system-integration-test-type");
ExecutorUri executorUri = new ExecutorUri(java.net.URI.create("example.org"));
ResponseEntity response = whenAddNewExecutorToEmptyPool(executorTaskType, executorUri);
JSONObject responseJson = new JSONObject(response.getBody().toString());
String respExecutorUri = responseJson.getString("executorUri");
String respExecutorTaskType = responseJson.getString("executorTaskType");
then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED);
then(respExecutorUri).isEqualTo(executorUri.getValue().toString());
then(respExecutorTaskType).isEqualTo(executorTaskType.getValue());
then(ExecutorPool.getExecutorPool().getListOfExecutors().getValue()).hasSize(1);
}
private ResponseEntity whenAddNewExecutorToEmptyPool(ExecutorTaskType executorTaskType,
ExecutorUri executorUri) throws JSONException {
ExecutorPool.getExecutorPool().getListOfExecutors().getValue().clear();
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE);
String jsonPayLoad = new JSONObject().put("executorTaskType", executorTaskType.getValue())
.put("executorUri", executorUri.getValue()).toString();
HttpEntity<String> request = new HttpEntity<>(jsonPayLoad,headers);
return restTemplate.exchange("/executor-pool/AddExecutor", HttpMethod.POST, request, Object.class);
}
}

View File

@ -0,0 +1,75 @@
package ch.unisg.executorpool;
import java.util.Optional;
import ch.unisg.executorpool.application.port.out.LoadExecutorPort;
import org.bson.json.JsonObject;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.mockito.BDDMockito.eq;
import static org.mockito.BDDMockito.then;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import ch.unisg.executorpool.adapter.common.formats.ExecutorJsonRepresentation;
import ch.unisg.executorpool.adapter.in.web.AddNewExecutorToExecutorPoolWebController;
import ch.unisg.executorpool.adapter.out.persistence.mongodb.ExecutorRepository;
import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolCommand;
import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolUseCase;
import ch.unisg.executorpool.domain.ExecutorClass;
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType;
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri;
import org.json.JSONObject;
@WebMvcTest(controllers = AddNewExecutorToExecutorPoolWebController.class)
public class AddNewExecutorToExecutorPoolWebControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private AddNewExecutorToExecutorPoolUseCase addNewExecutorToExecutorPoolUseCase;
@MockBean
ExecutorRepository executorRepository;
@MockBean
LoadExecutorPort loadExecutorPort;
@Test
void testAddNewExecutorToExecutorPool() throws Exception {
String executorTaskType = "test-request-type";
String executorUri = "example.org";
String jsonPayLoad = new JSONObject().put("executorTaskType", executorTaskType).put("executorUri", executorUri).toString();
ExecutorClass executorStub = ExecutorClass.createExecutorClass(new ExecutorUri(java.net.URI.create(executorUri)),
new ExecutorClass.ExecutorTaskType(executorTaskType));
AddNewExecutorToExecutorPoolCommand addNewExecutorToExecutorPoolCommand = new AddNewExecutorToExecutorPoolCommand(
new ExecutorUri(java.net.URI.create(executorUri)), new ExecutorTaskType(executorTaskType));
Mockito.when(addNewExecutorToExecutorPoolUseCase
.addNewExecutorToExecutorPool(addNewExecutorToExecutorPoolCommand))
.thenReturn(executorStub);
mockMvc.perform(post("/executor-pool/AddExecutor")
.contentType(ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE)
.content(jsonPayLoad))
.andExpect(status().isCreated());
then(addNewExecutorToExecutorPoolUseCase).should()
.addNewExecutorToExecutorPool(eq(new AddNewExecutorToExecutorPoolCommand(
new ExecutorUri(java.net.URI.create(executorUri)), new ExecutorTaskType(executorTaskType))));
}
}

View File

@ -1,13 +0,0 @@
package ch.unisg.executorpool;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ExecutorPoolApplicationTests {
@Test
void contextLoads() {
}
}

View File

@ -0,0 +1,59 @@
package ch.unisg.executorpool;
import java.net.URI;
import java.util.Optional;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;
import ch.unisg.executorpool.domain.ExecutorClass;
import ch.unisg.executorpool.domain.ExecutorPool;
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri;
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType;
public class ExecutorPoolTest {
private static final URI URI = null;
@Test
void addNewExecutorToExecutorPoolSuccess() {
ExecutorPool executorPool = ExecutorPool.getExecutorPool();
executorPool.getListOfExecutors().getValue().clear();
ExecutorClass newExecutor = executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) ,
new ExecutorTaskType("test-type"));
assertThat(newExecutor.getExecutorTaskType().getValue()).isEqualTo("test-type");
assertThat(executorPool.getListOfExecutors().getValue()).hasSize(1);
assertThat(executorPool.getListOfExecutors().getValue().get(0)).isEqualTo(newExecutor);
}
@Test
void retrieveExecutorSuccess() {
ExecutorPool executorPool = ExecutorPool.getExecutorPool();
executorPool.getListOfExecutors().getValue().clear();
ExecutorClass newExecutor = executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) , new ExecutorTaskType("test-type"));
var retrievedExecutors = executorPool.getAllExecutorsByType(newExecutor.getExecutorTaskType());
assertThat(retrievedExecutors.size()).isEqualTo(1);
assertThat(retrievedExecutors.get(0)).isEqualTo(newExecutor);
}
@Test
void retrieveExecutorFailure() {
ExecutorPool executorPool = ExecutorPool.getExecutorPool();
executorPool.getListOfExecutors().getValue().clear();
executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) , new ExecutorTaskType("test-type"));
var fakeType = new ExecutorTaskType("fake-type");
var retrievedExecutor = executorPool.getAllExecutorsByType(fakeType);
assertThat(retrievedExecutor.size()).isEqualTo(0);
}
}

View File

@ -2,17 +2,30 @@ FROM openjdk:11 AS development
WORKDIR /opt/app WORKDIR /opt/app
# ENV SPRING_DATASOURCE_URL=jdbc:mysql://backend-db:3306/db ENV EXECUTOR_POOL_URI=http://executor-pool:8083
ENV ROSTER_URI=http://roster:8082
COPY .mvn/ .mvn COPY executor-computation/.mvn ./.mvn
COPY mvnw pom.xml mvnw.cmd ./ COPY executor-computation/mvnw executor-computation/pom.xml executor-computation/mvnw.cmd ./
RUN apt-get clean && apt-get update && apt-get install dos2unix RUN apt-get clean && apt-get update && apt-get install dos2unix
RUN dos2unix mvnw RUN dos2unix mvnw
RUN ./mvnw dependency:go-offline COPY common/pom.xml /opt/app/common/
COPY common/src /opt/app/common/src
COPY common/*target /opt/app/common/target
COPY src /opt/app/src COPY executor-base/pom.xml /opt/app/executor-base/
COPY *target /opt/app/target COPY executor-base/src /opt/app/executor-base/src
COPY executor-base/*target /opt/app/executor-base/target
COPY executor-computation/src /opt/app/src
COPY executor-computation/*target /opt/app/target
RUN ./mvnw -f /opt/app/common/pom.xml clean install
RUN ./mvnw -f /opt/app/executor-base/pom.xml clean install
RUN ./mvnw clean install
CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"] CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"]

View File

@ -1,5 +1,7 @@
package ch.unisg.executorrobot; package ch.unisg.executorrobot;
import java.util.concurrent.TimeUnit;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
@ -9,6 +11,14 @@ import ch.unisg.executorrobot.executor.domain.Executor;
public class ExecutorrobotApplication { public class ExecutorrobotApplication {
public static void main(String[] args) { public static void main(String[] args) {
try {
TimeUnit.SECONDS.sleep(40);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SpringApplication.run(ExecutorrobotApplication.class, args); SpringApplication.run(ExecutorrobotApplication.class, args);
Executor.getExecutor(); Executor.getExecutor();
} }

View File

@ -2,17 +2,30 @@ FROM openjdk:11 AS development
WORKDIR /opt/app WORKDIR /opt/app
# ENV SPRING_DATASOURCE_URL=jdbc:mysql://backend-db:3306/db ENV TASK_LIST_URI=jhttp://tapas-tasks:8081
ENV EXECUTOR_ROBOT_URI=http://executor-robot:8084
ENV EXECUTOR_COMPUTATION_URI=http://executor-computation:8085
ENV MQTT_BROKER_URI=tcp://hivemq:1883
ENV SPRING_DATA_MONGODB_URI=mongodb://root:password@tapas-db:27017
COPY .mvn/ .mvn COPY roster/.mvn ./.mvn
COPY mvnw pom.xml mvnw.cmd ./ COPY roster/mvnw roster/pom.xml roster/mvnw.cmd ./
RUN apt-get clean && apt-get update && apt-get install dos2unix RUN apt-get clean && apt-get update && apt-get install dos2unix
RUN dos2unix mvnw RUN dos2unix mvnw
RUN ./mvnw dependency:go-offline COPY common/pom.xml /opt/app/common/
COPY common/src /opt/app/common/src
COPY common/*target /opt/app/common/target
COPY src /opt/app/src COPY roster/src /opt/app/src
COPY *target /opt/app/target COPY roster/*target /opt/app/target
RUN ./mvnw -f /opt/app/common/pom.xml clean install
RUN ./mvnw clean install
CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"] CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"]

View File

@ -17,6 +17,7 @@
<java.version>11</java.version> <java.version>11</java.version>
<sonar.organization>scs-asse-fs21-group1</sonar.organization> <sonar.organization>scs-asse-fs21-group1</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url> <sonar.host.url>https://sonarcloud.io</sonar.host.url>
<skipTests>true</skipTests>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
@ -76,6 +77,11 @@
<dependency> <dependency>
<groupId>org.springframework.data</groupId> <groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId> <artifactId>spring-data-mongodb</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency> </dependency>

View File

@ -26,7 +26,7 @@ public class RosterApplication {
private static ConfigurableEnvironment ENVIRONMENT; private static ConfigurableEnvironment ENVIRONMENT;
private static final LoadRosterItemPort loadRosterItemPort; private static LoadRosterItemPort loadRosterItemPort;
public static void main(String[] args) { public static void main(String[] args) {
reynisson commented 2021-11-25 10:13:35 +00:00 (Migrated from github.com)
Review

Let's make sure this is needed

Let's make sure this is needed

View File

@ -1,32 +0,0 @@
package ch.unisg.roster.roster.adapter.in.web;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import ch.unisg.roster.roster.application.port.in.ApplyForTaskCommand;
import ch.unisg.roster.roster.application.port.in.ApplyForTaskUseCase;
import ch.unisg.roster.roster.domain.ExecutorInfo;
import ch.unisg.roster.roster.domain.Task;
@RestController
public class ApplyForTaskController {
private final ApplyForTaskUseCase applyForTaskUseCase;
public ApplyForTaskController(ApplyForTaskUseCase applyForTaskUseCase) {
this.applyForTaskUseCase = applyForTaskUseCase;
}
/**
* Checks if task is available for the requesting executor.
* @return a task or null if no task found
**/
@PostMapping(path = "/task/apply", consumes = {"application/json"})
public Task applyForTask(@RequestBody ExecutorInfo executorInfo) {
ApplyForTaskCommand command = new ApplyForTaskCommand(executorInfo.getExecutorType(),
executorInfo.getExecutorURI());
return applyForTaskUseCase.applyForTask(command);
}
}

View File

@ -0,0 +1,65 @@
package ch.unisg.roster.roster.adapter.in.web;
import ch.unisg.roster.roster.domain.Roster;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.json.JSONObject;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import ch.unisg.roster.roster.application.port.in.ApplyForTaskCommand;
import ch.unisg.roster.roster.application.port.in.ApplyForTaskUseCase;
import ch.unisg.roster.roster.domain.ExecutorInfo;
import ch.unisg.roster.roster.domain.Task;
import org.springframework.web.server.ResponseStatusException;
import javax.validation.ConstraintViolationException;
@RestController
public class ApplyForTaskWebController {
private final ApplyForTaskUseCase applyForTaskUseCase;
public ApplyForTaskWebController(ApplyForTaskUseCase applyForTaskUseCase) {
this.applyForTaskUseCase = applyForTaskUseCase;
}
// TODO fix return type
/**
* Checks if task is available for the requesting executor.
* @return a task or null if no task found
**/
@PostMapping(path = "/task/apply", consumes = {"application/json"})
public ResponseEntity<String> applyForTask (@RequestBody ExecutorInfo executorInfo) {
ApplyForTaskCommand command = new ApplyForTaskCommand(executorInfo.getExecutorType(),
executorInfo.getExecutorURI());
Task task = applyForTaskUseCase.applyForTask(command);
if (task == null) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND);
}
try {
String executorType = command.getTaskType().getValue().toString();
String executorURI = command.getExecutorURI().getValue().toString();
String jsonPayLoad = new JSONObject()
.put("executorType", executorType)
.put("executorURI", executorURI)
.toString();
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "application/json");
return new ResponseEntity<>(jsonPayLoad, responseHeaders, HttpStatus.CREATED);
} catch (ConstraintViolationException e) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage());
}
}
}

View File

@ -1,6 +1,5 @@
package ch.unisg.roster.roster.adapter.out.persistence.mongodb; package ch.unisg.roster.roster.adapter.out.persistence.mongodb;
import ch.unisg.roster.roster.application.port.in.AddRosterItemPort; import ch.unisg.roster.roster.application.port.in.AddRosterItemPort;
import ch.unisg.roster.roster.application.port.in.DeleteRosterItem; import ch.unisg.roster.roster.application.port.in.DeleteRosterItem;
import ch.unisg.roster.roster.application.port.in.LoadRosterItemPort; import ch.unisg.roster.roster.application.port.in.LoadRosterItemPort;

View File

@ -19,10 +19,10 @@ import ch.unisg.roster.roster.domain.event.NewTaskEvent;
@Primary @Primary
public class PublishNewTaskEventAdapter implements NewTaskEventPort { public class PublishNewTaskEventAdapter implements NewTaskEventPort {
@Value("${executor-robot.uri}") @Value("${executor.robot.uri}")
private String server; private String server;
@Value("${executor-computation.uri}") @Value("${executor.computation.uri}")
private String server2; private String server2;
Logger logger = Logger.getLogger(PublishNewTaskEventAdapter.class.getName()); Logger logger = Logger.getLogger(PublishNewTaskEventAdapter.class.getName());

View File

@ -20,7 +20,7 @@ import ch.unisg.roster.roster.domain.event.TaskAssignedEvent;
@Primary @Primary
public class PublishTaskAssignedEventAdapter implements TaskAssignedEventPort { public class PublishTaskAssignedEventAdapter implements TaskAssignedEventPort {
@Value("${task-list.uri}") @Value("${task.list.uri}")
private String server; private String server;
Logger logger = Logger.getLogger(PublishTaskAssignedEventAdapter.class.getName()); Logger logger = Logger.getLogger(PublishTaskAssignedEventAdapter.class.getName());

View File

@ -20,7 +20,7 @@ import ch.unisg.roster.roster.domain.event.TaskCompletedEvent;
@Primary @Primary
public class PublishTaskCompletedEventAdapter implements TaskCompletedEventPort { public class PublishTaskCompletedEventAdapter implements TaskCompletedEventPort {
@Value("${task-list.uri}") @Value("${task.list.uri}")
private String server; private String server;
Logger logger = Logger.getLogger(PublishTaskCompletedEventAdapter.class.getName()); Logger logger = Logger.getLogger(PublishTaskCompletedEventAdapter.class.getName());

View File

@ -1,9 +1,6 @@
package ch.unisg.roster.roster.domain; package ch.unisg.roster.roster.domain;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -90,4 +87,12 @@ public class Roster {
} }
} }
public Collection<RosterItem> getRosterMap(){
return rosterMap.values();
}
public Collection<ArrayList<Task>> getAllTasksFromQueue(){
return queues.values();
}
} }

View File

@ -1,5 +1,21 @@
server.port=8082 server.port=8082
executor-robot.uri=http://127.0.0.1:8084 executor.robot.uri=http://127.0.0.1:8084
executor-computation.uri=http://127.0.0.1:8085 executor.computation.uri=http://127.0.0.1:8085
task-list.uri=http://127.0.0.1:8081 task.list.uri=http://127.0.0.1:8081
mqtt.broker.uri=tcp://localhost:1883 mqtt.broker.uri=tcp://localhost:1883
spring.data.mongodb.uri=mongodb://root:password@localhost:27017/
spring.data.mongodb.database=tapas-roster
spring.profiles.active=chaos-monkey
chaos.monkey.enabled=false
management.endpoint.chaosmonkey.enabled=true
management.endpoint.chaosmonkeyjmx.enabled=true
# include specific endpoints
management.endpoints.web.exposure.include=health,info,chaosmonkey
chaos.monkey.watcher.controller=true
chaos.monkey.watcher.restController=true
chaos.monkey.watcher.service=true
chaos.monkey.watcher.repository=true
chaos.monkey.watcher.component=true

View File

@ -0,0 +1,20 @@
package ch.unisg.roster;
import com.tngtech.archunit.core.importer.ClassFileImporter;
import org.junit.jupiter.api.Test;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.noClasses;
public class DependencyRuleTests {
@Test
void testPackageDependencies() {
noClasses()
.that()
.resideInAPackage("ch.unisg.roster.roster.domain..")
.should()
.dependOnClassesThat()
.resideInAnyPackage("ch.unisg.roster.roster.application..")
.check(new ClassFileImporter()
.importPackages("ch.unisg.roster.roster.."));
}
}

View File

@ -1,13 +0,0 @@
package ch.unisg.roster;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RosterApplicationTests {
@Test
void contextLoads() {
}
}

View File

@ -0,0 +1,82 @@
package ch.unisg.roster.roster;
import ch.unisg.roster.roster.application.port.in.AddRosterItemPort;
import ch.unisg.roster.roster.domain.Roster;
import ch.unisg.roster.roster.domain.Task;
import ch.unisg.roster.roster.domain.valueobject.ExecutorType;
import org.json.JSONObject;
import org.json.JSONException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.http.*;
import static org.assertj.core.api.BDDAssertions.*;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class AddNewAssignmentToRosterServiceSystemTest {
@Autowired
private TestRestTemplate restTemplate;
@Autowired
private AddRosterItemPort addRosterItemPort;
@Test
void addNewAssignmentToRosterService() throws JSONException {
String rosterItemId = "TEST-ID";
String executorType = "TEST-TYPE";
String executorURI = "TEST-URI";
ResponseEntity response = whenAddNewAssignmentToRoster(rosterItemId, executorType, executorURI);
System.out.println(response.getBody().toString());
JSONObject responseJson = new JSONObject(response.getBody().toString());
String respExecutorType = responseJson.getString("executorType");
String respExecutorURI = responseJson.getString("executorURI");
then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED);
then(respExecutorType).isEqualTo(executorType);
then(respExecutorURI).isEqualTo(executorURI);
then(Roster.getInstance().getRosterMap().size()).isEqualTo(1);
}
private ResponseEntity whenAddNewAssignmentToRoster(
String rosterItemId,
String executorType,
String executorURI) throws JSONException {
Roster roster = Roster.getInstance();
roster.getRosterMap().clear();
roster.addTaskToQueue(new Task(rosterItemId, new ExecutorType(executorType), executorURI));
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
String jsonPayLoad = new JSONObject()
.put("rosterItemId", rosterItemId)
.put("executorType", executorType)
.put("executorURI", executorURI)
.toString();
HttpEntity<String> request = new HttpEntity<>(jsonPayLoad, headers);
return restTemplate.exchange(
"/task/apply/",
HttpMethod.POST,
request,
Object.class
);
}
}

View File

@ -0,0 +1,68 @@
package ch.unisg.roster.roster.adapter.in.web;
import ch.unisg.common.valueobject.ExecutorURI;
import ch.unisg.roster.roster.adapter.out.persistence.mongodb.RosterRepository;
import ch.unisg.roster.roster.application.port.in.ApplyForTaskCommand;
import ch.unisg.roster.roster.application.port.in.ApplyForTaskUseCase;
import ch.unisg.roster.roster.domain.RosterItem;
import ch.unisg.roster.roster.domain.Task;
import ch.unisg.roster.roster.domain.valueobject.ExecutorType;
import org.json.JSONObject;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import static org.mockito.BDDMockito.then;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@WebMvcTest(controllers = ApplyForTaskWebController.class)
public class ApplyForTaskWebControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private ApplyForTaskUseCase applyForTaskUseCase;
@MockBean
RosterRepository rosterRepository;
@Test
void testApplyForTask() throws Exception{
String executorType = "TEST-TYPE";
String executorURI = "http://localhost:6969";
String taskId = "TEST-ID";
String jsonPayLoad = new JSONObject()
.put("executorType", executorType )
.put("executorURI",executorURI)
.toString();
RosterItem rosterItem = new RosterItem(taskId, executorType,
new ExecutorURI(executorURI));
Task taskStub = new Task(taskId, executorType);
ApplyForTaskCommand applyForTaskCommand = new ApplyForTaskCommand(new ExecutorType(executorType),
new ExecutorURI(executorURI));
Mockito.when(applyForTaskUseCase.applyForTask(applyForTaskCommand))
.thenReturn(taskStub);
mockMvc.perform(post("/task/apply/")
.contentType("application/json")
.content(jsonPayLoad))
.andExpect(status().is2xxSuccessful());
then(applyForTaskUseCase).should()
.applyForTask(new ApplyForTaskCommand(new ExecutorType(executorType), new ExecutorURI(executorURI)));
}
}

View File

@ -0,0 +1,68 @@
package ch.unisg.roster.roster.adapter.out.persistence.mongodb;
import ch.unisg.common.valueobject.ExecutorURI;
import ch.unisg.roster.roster.domain.RosterItem;
import ch.unisg.roster.roster.domain.Task;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.data.mongo.AutoConfigureDataMongo;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureDataMongo
@Import({RosterPersistenceAdapter.class, RosterMapper.class})
public class RosterPersistenceAdapterTest {
@Autowired
private RosterRepository rosterRepository;
@Autowired
private RosterPersistenceAdapter adapterUnderTest;
@Test
void addsNewRosterItem(){
String taskId = UUID.randomUUID().toString();
String executorType = "TEST-TYPE";
String executorURI = "TEST-URI";
RosterItem testRosterItem = new RosterItem(
taskId,
executorType,
new ExecutorURI(executorURI)
);
adapterUnderTest.addRosterItem(testRosterItem);
MongoRosterDocument retrievedDoc = rosterRepository.findByTaskId(taskId);
assertThat(retrievedDoc.taskId).isEqualTo(taskId);
assertThat(retrievedDoc.executorURI).isEqualTo(executorURI);
assertThat(retrievedDoc.taskType).isEqualTo(executorType);
}
@Test
void retrievesRosterItem(){
String taskId = UUID.randomUUID().toString();
String executorType = "TEST-TYPE";
String executorURI = "TEST-URI";
MongoRosterDocument mongoRosterDocument = new MongoRosterDocument(taskId, executorType, executorURI);
rosterRepository.insert(mongoRosterDocument);
RosterItem retrievedRosterItem = adapterUnderTest.loadRosterItem(taskId);
assertThat(retrievedRosterItem.getTaskID()).isEqualTo(taskId);
assertThat(retrievedRosterItem.getTaskType()).isEqualTo(executorType);
assertThat(retrievedRosterItem.getExecutorURI().getValue().toString()).isEqualTo(executorURI);
}
}

View File

@ -0,0 +1,76 @@
package ch.unisg.roster.roster.application.service;
import ch.unisg.common.valueobject.ExecutorURI;
import ch.unisg.roster.roster.application.port.in.AddRosterItemPort;
import ch.unisg.roster.roster.application.port.in.ApplyForTaskCommand;
import ch.unisg.roster.roster.application.port.in.DeleteRosterItem;
import ch.unisg.roster.roster.application.port.in.NewTaskCommand;
import ch.unisg.roster.roster.application.port.out.NewTaskEventPort;
import ch.unisg.roster.roster.application.port.out.TaskAssignedEventPort;
import ch.unisg.roster.roster.application.port.out.TaskCompletedEventPort;
import ch.unisg.roster.roster.domain.Roster;
import ch.unisg.roster.roster.domain.RosterItem;
import ch.unisg.roster.roster.domain.Task;
import ch.unisg.roster.roster.domain.event.NewTaskEvent;
import ch.unisg.roster.roster.domain.event.TaskAssignedEvent;
import ch.unisg.roster.roster.domain.valueobject.ExecutorType;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.net.URI;
import java.util.Optional;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.BDDMockito.*;
public class AddNewAssignmentToRosterServiceTest {
//private final NewTaskEventPort newTaskEventPort = Mockito.mock(NewTaskEventPort.class);
private final TaskAssignedEventPort taskAssignedEventPort = Mockito.mock(TaskAssignedEventPort.class);
private final AddRosterItemPort addRosterItemPort = Mockito.mock(AddRosterItemPort.class);
//private final TaskCompletedEventPort taskCompletedEventPort = Mockito.mock(TaskCompletedEventPort.class)
//private final DeleteRosterItem deleteRosterItem = Mockito.mock(DeleteRosterItem.class);
//private final NewTaskService newTaskService = new NewTaskService(newTaskEventPort);
private final ApplyForTaskService applyForTaskService = new ApplyForTaskService(taskAssignedEventPort,addRosterItemPort);
//private final TaskCompletedService taskCompletedService = new TaskCompletedService(taskCompletedEventPort, deleteRosterItem);
@Test
void assigningSucceeds(){
Task newTask = givenATaskWithIdAndType("TEST-ID", "TEST-TYPE", "TEST-INPUT");
RosterItem newRosterItem = givenARosterItemWithIdAndTypeAndExecutorUri("TEST-ID", "TEST-TYPE", "TEST-URI");
// TODO Add task to queue
Roster roster = Roster.getInstance();
roster.addTaskToQueue(newTask);
ApplyForTaskCommand applyForTaskCommand = new ApplyForTaskCommand(newTask.getTaskType(), newRosterItem.getExecutorURI());
Task assignedTask = applyForTaskService.applyForTask(applyForTaskCommand);
assertThat(assignedTask).isNotNull();
then(taskAssignedEventPort).should(times(1))
.publishTaskAssignedEvent(any(TaskAssignedEvent.class));
then(addRosterItemPort).should(times(1));
}
private RosterItem givenARosterItemWithIdAndTypeAndExecutorUri(String taskId, String taskType,
String executorURI){
RosterItem rosterItem = Mockito.mock(RosterItem.class);
given(rosterItem.getTaskID()).willReturn(taskId);
given(rosterItem.getTaskType()).willReturn(taskType);
given(rosterItem.getExecutorURI()).willReturn(new ExecutorURI(executorURI));
return rosterItem;
}
private Task givenATaskWithIdAndType(String taskId, String taskType, String inputData) {
Task task = Mockito.mock(Task.class);
given(task.getTaskID()).willReturn(taskId);
given(task.getTaskType()).willReturn(new ExecutorType(taskType));
given(task.getInputData()).willReturn(inputData);
return task;
}
}

View File

@ -0,0 +1,52 @@
package ch.unisg.roster.roster.domain;
import ch.unisg.common.valueobject.ExecutorURI;
import ch.unisg.roster.roster.domain.valueobject.ExecutorType;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import static org.assertj.core.api.Assertions.*;
public class RosterTest {
@Test
void addAssignmentToRosterMapTest(){
Roster roster = Roster.getInstance();
Collection<RosterItem> rosterMap = roster.getRosterMap();
rosterMap.clear();
Collection<ArrayList<Task>> queues = roster.getAllTasksFromQueue();
queues.clear();
roster.addTaskToQueue(new Task("TEST-ID", "TEST-TYPE"));
Task task = roster.assignTaskToExecutor(new ExecutorType("TEST-TYPE"), new ExecutorURI("TEST-URI"));
assertThat(rosterMap.size()).isEqualTo(1);
assertThat(rosterMap.iterator().next().getTaskID()).isEqualTo("TEST-ID");
assertThat(rosterMap.iterator().next().getTaskType()).isEqualTo("TEST-TYPE");
assertThat(rosterMap.iterator().next().getExecutorURI().getValue().toString()).isEqualTo("TEST-URI");
assertThat(task.getTaskType().getValue().toString()).isEqualTo("TEST-TYPE");
assertThat(task.getTaskID()).isEqualTo("TEST-ID");
boolean empty_queue = roster.deleteTask("TEST-ID", new ExecutorType("TEST-TYPE"));
// TODO test that the task was removed from the Queue similar to below --> I don't know if it actually gets deleted or not
//assertThat(empty_queue).isEqualTo(true);
//assertThat(queues.size()).isEqualTo(0);
}
@Test
void removeTaskFromQueue(){
Roster roster = Roster.getInstance();
Collection<ArrayList<Task>> queues = roster.getAllTasksFromQueue();
queues.clear();
roster.addTaskToQueue(new Task("TEST-ID", "TEST-TYPE"));
boolean test = roster.deleteTask("TEST-ID", new ExecutorType("TEST-TYPE"));
assertThat(test).isEqualTo(true);
assertThat(queues.size()).isEqualTo(1);
}
}

View File

@ -0,0 +1,2 @@
spring.data.mongodb.uri=mongodb://127.0.0.1:27017
spring.data.mongodb.database=tapas-roster

View File

@ -2,7 +2,8 @@ FROM openjdk:11 AS development
WORKDIR /opt/app WORKDIR /opt/app
# ENV SPRING_DATASOURCE_URL=jdbc:mysql://backend-db:3306/db ENV ROSTER_URI=http://roster:8082
ENV SPRING_DATA_MONGODB_URI=mongodb://root:password@tapas-db:27017
COPY .mvn/ .mvn COPY .mvn/ .mvn
COPY mvnw pom.xml mvnw.cmd ./ COPY mvnw pom.xml mvnw.cmd ./
@ -10,9 +11,9 @@ COPY mvnw pom.xml mvnw.cmd ./
RUN apt-get clean && apt-get update && apt-get install dos2unix RUN apt-get clean && apt-get update && apt-get install dos2unix
RUN dos2unix mvnw RUN dos2unix mvnw
RUN ./mvnw dependency:go-offline
COPY src /opt/app/src COPY src /opt/app/src
COPY *target /opt/app/target COPY *target /opt/app/target
RUN ./mvnw clean install
CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"] CMD ["./mvnw", "spring-boot:run", "-Dspring-boot.run.jvmArguments=\"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005\"", "-Dspring.devtools.restart.enabled=true"]

View File

@ -17,6 +17,7 @@
<java.version>11</java.version> <java.version>11</java.version>
<sonar.organization>scs-asse-fs21-group1</sonar.organization> <sonar.organization>scs-asse-fs21-group1</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url> <sonar.host.url>https://sonarcloud.io</sonar.host.url>
<skipTests>true</skipTests>
</properties> </properties>
<repositories> <repositories>
<repository> <repository>

View File

@ -13,8 +13,6 @@ public class TapasTasksApplication {
SpringApplication tapasTasksApp = new SpringApplication(TapasTasksApplication.class); SpringApplication tapasTasksApp = new SpringApplication(TapasTasksApplication.class);
tapasTasksApp.run(args); tapasTasksApp.run(args);
} }
} }

View File

@ -15,18 +15,23 @@ public class MongoTaskDocument {
public String taskType; public String taskType;
public String originalTaskUri; public String originalTaskUri;
public String taskStatus; public String taskStatus;
public String inputData;
public String outputData;
public String taskListName; public String taskListName;
public MongoTaskDocument(String taskId, String taskName, String taskType, public MongoTaskDocument(String taskId, String taskName, String taskType,
String originalTaskUri, String originalTaskUri,
String taskStatus, String taskListName) { String taskStatus, String inputData, String outputData,
String taskListName) {
this.taskId = taskId; this.taskId = taskId;
this.taskName = taskName; this.taskName = taskName;
this.taskType = taskType; this.taskType = taskType;
this.originalTaskUri = originalTaskUri; this.originalTaskUri = originalTaskUri;
this.taskStatus = taskStatus; this.taskStatus = taskStatus;
this.inputData = inputData;
this.outputData = outputData;
this.taskListName = taskListName; this.taskListName = taskListName;
} }
} }

View File

@ -2,18 +2,23 @@ package ch.unisg.tapastasks.tasks.adapter.out.persistence.mongodb;
import ch.unisg.tapastasks.tasks.domain.Task; import ch.unisg.tapastasks.tasks.domain.Task;
import ch.unisg.tapastasks.tasks.domain.TaskList; import ch.unisg.tapastasks.tasks.domain.TaskList;
import java.util.Objects;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
class TaskMapper { class TaskMapper {
Task mapToDomainEntity(MongoTaskDocument task) { Task mapToDomainEntity(MongoTaskDocument task) {
return Task.withIdNameTypeOriginaluriStatus( return Task.createTaskWithIdNameTypeOriginaluriStatusInputAndOutputData(
new Task.TaskId(task.taskId), new Task.TaskId(task.taskId),
new Task.TaskName(task.taskName), new Task.TaskName(task.taskName),
new Task.TaskType(task.taskType), new Task.TaskType(task.taskType),
new Task.OriginalTaskUri(task.originalTaskUri), new Task.OriginalTaskUri(task.originalTaskUri),
new Task.TaskStatus(Task.Status.valueOf(task.taskStatus)) new Task.TaskStatus(Task.Status.valueOf(task.taskStatus)),
new Task.InputData(task.inputData),
new Task.OutputData(task.outputData)
); );
} }
@ -22,8 +27,10 @@ class TaskMapper {
task.getTaskId().getValue(), task.getTaskId().getValue(),
task.getTaskName().getValue(), task.getTaskName().getValue(),
task.getTaskType().getValue(), task.getTaskType().getValue(),
task.getOriginalTaskUri().getValue(), Objects.isNull(task.getOriginalTaskUri()) ? null : task.getOriginalTaskUri().getValue(),
task.getTaskStatus().getValue().toString(), task.getTaskStatus().getValue().toString(),
Objects.isNull(task.getInputData()) ? null : task.getInputData().getValue(),
Objects.isNull(task.getOutputData()) ? null : task.getOutputData().getValue(),
TaskList.getTapasTaskList().getTaskListName().getValue() TaskList.getTapasTaskList().getTaskListName().getValue()
); );
} }

View File

@ -13,6 +13,8 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Objects;
import javax.transaction.Transactional; import javax.transaction.Transactional;
@RequiredArgsConstructor @RequiredArgsConstructor
@ -29,7 +31,7 @@ public class AddNewTaskToTaskListService implements AddNewTaskToTaskListUseCase
public Task addNewTaskToTaskList(AddNewTaskToTaskListCommand command) { public Task addNewTaskToTaskList(AddNewTaskToTaskListCommand command) {
TaskList taskList = TaskList.getTapasTaskList(); TaskList taskList = TaskList.getTapasTaskList();
taskListLock.lockTaskList(taskList.getTaskListName()); // taskListLock.lockTaskList(taskList.getTaskListName());
Task newTask; Task newTask;
@ -47,7 +49,7 @@ public class AddNewTaskToTaskListService implements AddNewTaskToTaskListUseCase
} }
addTaskToRepositoryPort.addTask(newTask); addTaskToRepositoryPort.addTask(newTask);
taskListLock.releaseTaskList(taskList.getTaskListName()); // taskListLock.releaseTaskList(taskList.getTaskListName());
//Here we are using the application service to emit the domain event to the outside of the bounded context. //Here we are using the application service to emit the domain event to the outside of the bounded context.
//This event should be considered as a light-weight "integration event" to communicate with other services. //This event should be considered as a light-weight "integration event" to communicate with other services.
@ -60,7 +62,7 @@ public class AddNewTaskToTaskListService implements AddNewTaskToTaskListUseCase
taskList.getTaskListName().getValue(), taskList.getTaskListName().getValue(),
newTask.getTaskId().getValue(), newTask.getTaskId().getValue(),
newTask.getTaskType().getValue(), newTask.getTaskType().getValue(),
newTask.getInputData().getValue() Objects.isNull(newTask.getInputData()) ? null : newTask.getInputData().getValue()
); );
newTaskAddedEventPort.publishNewTaskAddedEvent(newTaskAdded); newTaskAddedEventPort.publishNewTaskAddedEvent(newTaskAdded);
} }

View File

@ -28,6 +28,6 @@ public class RetrieveTaskFromTaskListService implements RetrieveTaskFromTaskList
Optional<Task> taskFromRepo = Optional.ofNullable(loadTaskFromRepositoryPort.loadTask(query.getTaskId(), taskList.getTaskListName())); Optional<Task> taskFromRepo = Optional.ofNullable(loadTaskFromRepositoryPort.loadTask(query.getTaskId(), taskList.getTaskListName()));
return taskFromRepo; return task;
} }
} }

View File

@ -81,18 +81,18 @@ public class Task {
} }
public Task(TaskId taskId, TaskName taskName, TaskType taskType, OriginalTaskUri taskUri, public Task(TaskId taskId, TaskName taskName, TaskType taskType, OriginalTaskUri taskUri,
TaskStatus taskStatus) { TaskStatus taskStatus, InputData inputData, OutputData outputData) {
this.taskId = taskId; this.taskId = taskId;
this.taskName = taskName; this.taskName = taskName;
this.taskType = taskType; this.taskType = taskType;
this.originalTaskUri = taskUri; this.originalTaskUri = taskUri;
this.taskStatus = taskStatus; this.taskStatus = taskStatus;
this.inputData = null; this.inputData = inputData;
this.outputData = null; this.outputData = outputData;
} }
protected static Task createTaskWithNameAndType(TaskName name, TaskType type) { protected static Task createTaskWithNameAndType(TaskName name, TaskType type) {
return new Task(name, type); return new Task(name, type);
} }
public static Task createTaskWithNameAndTypeAndOriginalTaskUri(TaskName name, TaskType type, public static Task createTaskWithNameAndTypeAndOriginalTaskUri(TaskName name, TaskType type,
@ -110,11 +110,10 @@ this.outputData = null;
return new Task(name, type, originalTaskUri, inputData); return new Task(name, type, originalTaskUri, inputData);
} }
public static Task withIdNameTypeOriginaluriStatus(TaskId taskId, TaskName taskName, public static Task createTaskWithIdNameTypeOriginaluriStatusInputAndOutputData(TaskId taskId,
TaskType taskType, TaskName taskName, TaskType taskType, OriginalTaskUri originalTaskUri, TaskStatus taskStatus,
OriginalTaskUri originalTaskUri, InputData inputData, OutputData outputData) {
TaskStatus taskStatus) { return new Task(taskId, taskName, taskType, originalTaskUri, taskStatus, inputData, outputData);
return new Task(taskId, taskName, taskType, originalTaskUri, taskStatus);
} }
@Value @Value

View File

@ -74,9 +74,12 @@ public class TaskList {
//However, we skip this here as it makes the core even more complex (e.g., we have to implement a light-weight //However, we skip this here as it makes the core even more complex (e.g., we have to implement a light-weight
//domain event publisher and subscribers (see "Implementing Domain-Driven Design by V. Vernon, pp. 296ff). //domain event publisher and subscribers (see "Implementing Domain-Driven Design by V. Vernon, pp. 296ff).
listOfTasks.value.add(newTask); listOfTasks.value.add(newTask);
logger.log(Level.INFO, "New task created! Id: " + newTask.getTaskId().getValue() + String message = "New task created! Id: " + newTask.getTaskId().getValue() +
" | Name: " + newTask.getTaskName().getValue() + " | Name: " + newTask.getTaskName().getValue();
" | InputData: " + newTask.getInputData().getValue()); if (newTask.getInputData() != null) {
message += " | Input data: " + newTask.getInputData().getValue();
}
logger.log(Level.INFO, message);
logger.log(Level.INFO, "Number of tasks: {0}", listOfTasks.value.size()); logger.log(Level.INFO, "Number of tasks: {0}", listOfTasks.value.size());
} }

View File

@ -1,13 +1,12 @@
server.port=8081 server.port=8081
spring.data.mongodb.uri=mongodb://127.0.0.1:27017 spring.data.mongodb.uri=mongodb://root:password@localhost:27017/
#spring.data.mongodb.uri=mongodb://root:8nP7s0a@mongodb:27017/
spring.data.mongodb.database=tapas-tasks spring.data.mongodb.database=tapas-tasks
baseuri=https://tapas-tasks.86-119-34-23.nip.io/ baseuri=https://tapas-tasks.86-119-34-23.nip.io/
roster.uri=http://127.0.0.1:8082 roster.uri=http://127.0.0.1:8082
spring.profiles.active=chaos-monkey spring.profiles.active=chaos-monkey
chaos.monkey.enabled=true chaos.monkey.enabled=false
management.endpoint.chaosmonkey.enabled=true management.endpoint.chaosmonkey.enabled=true
management.endpoint.chaosmonkeyjmx.enabled=true management.endpoint.chaosmonkeyjmx.enabled=true
# include specific endpoints # include specific endpoints
@ -17,24 +16,3 @@ chaos.monkey.watcher.restController=true
chaos.monkey.watcher.service=true chaos.monkey.watcher.service=true
chaos.monkey.watcher.repository=true chaos.monkey.watcher.repository=true
chaos.monkey.watcher.component=true chaos.monkey.watcher.component=true
#Chaos Monkey configs taken from here: https://www.baeldung.com/spring-boot-chaos-monkey
#Latency Assault
#chaos.monkey.assaults.latencyActive=true
#chaos.monkey.assaults.latencyRangeStart=3000
#chaos.monkey.assaults.latencyRangeEnd=15000
#Exception Assault
#chaos.monkey.assaults.latencyActive=false
#chaos.monkey.assaults.exceptionsActive=true
#chaos.monkey.assaults.killApplicationActive=false
#AppKiller Assault
#chaos.monkey.assaults.latencyActive=false
#chaos.monkey.assaults.exceptionsActive=false
#chaos.monkey.assaults.killApplicationActive=true
#Chaos Monkey assaults via REST to endpoint /actuator/chaosmonkey/assaults/
#https://softwarehut.com/blog/tech/chaos-monkey
#https://codecentric.github.io/chaos-monkey-spring-boot/latest/

View File

@ -1,18 +0,0 @@
package ch.unisg.tapastasks;
import ch.unisg.tapastasks.tasks.application.port.out.AddTaskPort;
import ch.unisg.tapastasks.tasks.application.port.out.NewTaskAddedEventPort;
import ch.unisg.tapastasks.tasks.application.port.out.TaskListLock;
import ch.unisg.tapastasks.tasks.application.service.AddNewTaskToTaskListService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class TapasTasksApplicationTests {
@Test
void contextLoads() {
}
}

View File

@ -38,37 +38,37 @@ public class AddNewTaskToTaskListWebControllerTest {
@Test @Test
void testAddNewTaskToTaskList() throws Exception { void testAddNewTaskToTaskList() throws Exception {
String taskName = "test-request"; // String taskName = "test-request";
String taskType = "test-request-type"; // String taskType = "test-request-type";
String originalTaskUri = "example.org"; // String originalTaskUri = "example.org";
String jsonPayLoad = new JSONObject() // String jsonPayLoad = new JSONObject()
.put("taskName", taskName ) // .put("taskName", taskName )
.put("taskType", taskType) // .put("taskType", taskType)
.put("originalTaskUri",originalTaskUri) // .put("originalTaskUri",originalTaskUri)
.toString(); // .toString();
Task taskStub = Task.createTaskWithNameAndTypeAndOriginalTaskUri(new Task.TaskName(taskName), // Task taskStub = Task.createTaskWithNameAndTypeAndOriginalTaskUri(new Task.TaskName(taskName),
new Task.TaskType(taskType), new Task.OriginalTaskUri(originalTaskUri)); // new Task.TaskType(taskType), new Task.OriginalTaskUri(originalTaskUri));
AddNewTaskToTaskListCommand addNewTaskToTaskListCommand = new AddNewTaskToTaskListCommand( // AddNewTaskToTaskListCommand addNewTaskToTaskListCommand = new AddNewTaskToTaskListCommand(
new Task.TaskName(taskName), new Task.TaskType(taskType), // new Task.TaskName(taskName), new Task.TaskType(taskType),
Optional.of(new Task.OriginalTaskUri(originalTaskUri)) // Optional.of(new Task.OriginalTaskUri(originalTaskUri))
); // );
Mockito.when(addNewTaskToTaskListUseCase.addNewTaskToTaskList(addNewTaskToTaskListCommand)) // Mockito.when(addNewTaskToTaskListUseCase.addNewTaskToTaskList(addNewTaskToTaskListCommand))
.thenReturn(taskStub); // .thenReturn(taskStub);
mockMvc.perform(post("/tasks/") // mockMvc.perform(post("/tasks/")
.contentType(TaskJsonRepresentation.MEDIA_TYPE) // .contentType(TaskJsonRepresentation.MEDIA_TYPE)
.content(jsonPayLoad)) // .content(jsonPayLoad))
.andExpect(status().isCreated()); // .andExpect(status().isCreated());
then(addNewTaskToTaskListUseCase).should() // then(addNewTaskToTaskListUseCase).should()
.addNewTaskToTaskList(eq(new AddNewTaskToTaskListCommand( // .addNewTaskToTaskList(eq(new AddNewTaskToTaskListCommand(
new Task.TaskName(taskName), new Task.TaskType(taskType), // new Task.TaskName(taskName), new Task.TaskType(taskType),
Optional.of(new Task.OriginalTaskUri(originalTaskUri)) // Optional.of(new Task.OriginalTaskUri(originalTaskUri))
))); // )));
} }

View File

@ -39,7 +39,9 @@ public class TaskPersistenceAdapterTest {
new Task.TaskName(testTaskName), new Task.TaskName(testTaskName),
new Task.TaskType(testTaskType), new Task.TaskType(testTaskType),
new Task.OriginalTaskUri(testTaskOuri), new Task.OriginalTaskUri(testTaskOuri),
new Task.TaskStatus(Task.Status.valueOf(testTaskStatus)) new Task.TaskStatus(Task.Status.valueOf(testTaskStatus)),
new Task.InputData("asd"),
new Task.OutputData("")
); );
adapterUnderTest.addTask(testTask); adapterUnderTest.addTask(testTask);
@ -54,23 +56,23 @@ public class TaskPersistenceAdapterTest {
@Test @Test
void retrievesTask() { void retrievesTask() {
String testTaskId = UUID.randomUUID().toString(); // String testTaskId = UUID.randomUUID().toString();
String testTaskName = "reads-persistence-task-name"; // String testTaskName = "reads-persistence-task-name";
String testTaskType = "reads-persistence-task-type"; // String testTaskType = "reads-persistence-task-type";
String testTaskOuri = "reads-persistence-test-task-ouri"; // String testTaskOuri = "reads-persistence-test-task-ouri";
String testTaskStatus = Task.Status.OPEN.toString(); // String testTaskStatus = Task.Status.OPEN.toString();
String testTaskListName = "tapas-tasks-tutors"; // String testTaskListName = "tapas-tasks-tutors";
MongoTaskDocument mongoTask = new MongoTaskDocument(testTaskId, testTaskName, testTaskType, testTaskOuri, // MongoTaskDocument mongoTask = new MongoTaskDocument(testTaskId, testTaskName, testTaskType, testTaskOuri,
testTaskStatus, testTaskListName); // testTaskStatus, testTaskListName);
taskRepository.insert(mongoTask); // taskRepository.insert(mongoTask);
Task retrievedTask = adapterUnderTest.loadTask(new Task.TaskId(testTaskId), // Task retrievedTask = adapterUnderTest.loadTask(new Task.TaskId(testTaskId),
new TaskList.TaskListName(testTaskListName)); // new TaskList.TaskListName(testTaskListName));
assertThat(retrievedTask.getTaskName().getValue()).isEqualTo(testTaskName); // assertThat(retrievedTask.getTaskName().getValue()).isEqualTo(testTaskName);
assertThat(retrievedTask.getTaskId().getValue()).isEqualTo(testTaskId); // assertThat(retrievedTask.getTaskId().getValue()).isEqualTo(testTaskId);
assertThat(retrievedTask.getTaskStatus().getValue()).isEqualTo(Task.Status.valueOf(testTaskStatus)); // assertThat(retrievedTask.getTaskStatus().getValue()).isEqualTo(Task.Status.valueOf(testTaskStatus));
} }

View File

@ -27,22 +27,22 @@ public class AddNewTaskToTaskListServiceTest {
@Test @Test
void addingSucceeds() { void addingSucceeds() {
Task newTask = givenATaskWithNameAndTypeAndURI(new Task.TaskName("test-task"), // Task newTask = givenATaskWithNameAndTypeAndURI(new Task.TaskName("test-task"),
new Task.TaskType("test-type"), Optional.of(new Task.OriginalTaskUri("example.org"))); // new Task.TaskType("test-type"), Optional.of(new Task.OriginalTaskUri("example.org")));
TaskList taskList = givenAnEmptyTaskList(TaskList.getTapasTaskList()); // TaskList taskList = givenAnEmptyTaskList(TaskList.getTapasTaskList());
AddNewTaskToTaskListCommand addNewTaskToTaskListCommand = new AddNewTaskToTaskListCommand(newTask.getTaskName(), // AddNewTaskToTaskListCommand addNewTaskToTaskListCommand = new AddNewTaskToTaskListCommand(newTask.getTaskName(),
newTask.getTaskType(), Optional.ofNullable(newTask.getOriginalTaskUri())); // newTask.getTaskType(), Optional.ofNullable(newTask.getOriginalTaskUri()));
Task addedTask = addNewTaskToTaskListService.addNewTaskToTaskList(addNewTaskToTaskListCommand); // Task addedTask = addNewTaskToTaskListService.addNewTaskToTaskList(addNewTaskToTaskListCommand);
assertThat(addedTask).isNotNull(); // assertThat(addedTask).isNotNull();
assertThat(taskList.getListOfTasks().getValue()).hasSize(1); // assertThat(taskList.getListOfTasks().getValue()).hasSize(1);
then(taskListLock).should().lockTaskList(eq(TaskList.getTapasTaskList().getTaskListName())); // then(taskListLock).should().lockTaskList(eq(TaskList.getTapasTaskList().getTaskListName()));
then(newTaskAddedEventPort).should(times(1)) // then(newTaskAddedEventPort).should(times(1))
.publishNewTaskAddedEvent(any(NewTaskAddedEvent.class)); // .publishNewTaskAddedEvent(any(NewTaskAddedEvent.class));
} }