Compare commits
12 Commits
2c5efb1f45
...
master
Author | SHA1 | Date | |
---|---|---|---|
92ec26e2b8 | |||
6509049309 | |||
35bd1245c9 | |||
3b4bd7322e | |||
3b8b05c3c4 | |||
573cff2c4c | |||
d4a2e7c272 | |||
beaff9f62b | |||
b282b6a373 | |||
644c2df888 | |||
e395915bf1 | |||
07d14e013d |
60
.drone.yml
60
.drone.yml
@ -3,16 +3,63 @@ type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: restore-cache-with-filesystem
|
||||
image: meltwater/drone-cache
|
||||
settings:
|
||||
backend: "filesystem"
|
||||
restore: true
|
||||
cache_key: "{{ .Repo.Name }}"
|
||||
archive_format: "gzip"
|
||||
filesystem_cache_root: "/tmp/cache"
|
||||
mount:
|
||||
- '.pipcache'
|
||||
volumes:
|
||||
- name: cache
|
||||
path: /tmp/cache
|
||||
|
||||
- name: static_analysis
|
||||
image: python:3.8
|
||||
commands:
|
||||
- pip3 install pylint bandit mccabe
|
||||
- pip3 install -r requirements.txt
|
||||
- pip3 install --cache-dir='./.pipcache' pylint bandit mccabe
|
||||
- pip3 install --cache-dir='./.pipcache' -r requirements.txt
|
||||
- find . -name "*.py" -exec python3 -m py_compile '{}' \;
|
||||
- find . -name "*.py" -exec pylint '{}' + || if [ $? -eq 1 ]; then echo "you fail"; fi
|
||||
- find . -name "*.py" -exec python3 -m mccabe --min 3 '{}' + || if [ $? -eq 1 ]; then echo "you fail"; fi
|
||||
- bandit -r . + || if [ $? -eq 1 ]; then echo "you fail"; fi
|
||||
|
||||
- name: unit_test
|
||||
image: python:3.8
|
||||
environment:
|
||||
REDIS_URL: "redis://cache"
|
||||
commands:
|
||||
- pip3 install --cache-dir='./.pipcache' -r requirements.txt
|
||||
- pytest test.py
|
||||
|
||||
- name: coverage
|
||||
image: python:3.8
|
||||
environment:
|
||||
REDIS_URL: "redis://cache"
|
||||
commands:
|
||||
- pip3 install --cache-dir='./.pipcache' -r requirements.txt
|
||||
- pip3 install --cache-dir='./.pipcache' coverage pytest
|
||||
- coverage run -m pytest test.py
|
||||
- coverage report -m
|
||||
|
||||
- name: rebuild-cache-with-filesystem
|
||||
image: meltwater/drone-cache
|
||||
pull: true
|
||||
settings:
|
||||
backend: "filesystem"
|
||||
rebuild: true
|
||||
cache_key: "{{ .Repo.Name }}"
|
||||
archive_format: "gzip"
|
||||
filesystem_cache_root: "/tmp/cache"
|
||||
mount:
|
||||
- '.pipcache'
|
||||
volumes:
|
||||
- name: cache
|
||||
path: /tmp/cache
|
||||
|
||||
- name: build-app
|
||||
image: banzaicloud/drone-kaniko
|
||||
settings:
|
||||
@ -35,3 +82,12 @@ steps:
|
||||
icon_url: https://cloudcdn.tormakristof.eu/static/drone.svg
|
||||
when:
|
||||
status: [ failure ]
|
||||
|
||||
services:
|
||||
- name: cache
|
||||
image: redis
|
||||
|
||||
volumes:
|
||||
- name: cache
|
||||
host:
|
||||
path: "/tmp/cache"
|
||||
|
6
README.rst
Normal file
6
README.rst
Normal file
@ -0,0 +1,6 @@
|
||||
=================
|
||||
Producer endpoint
|
||||
=================
|
||||
Manages IP changes of consumers. If a consumer sends a message to /ip endpoint, it will write the gotten IP address into the redis DB.
|
||||
|
||||
Produced by GoldenPogácsa Inc.
|
6
curl-test.sh
Normal file
6
curl-test.sh
Normal file
@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
curl --header "Content-Type: application/json" \
|
||||
--request POST \
|
||||
--data '{"uuid":"c959ad81-58f9-4445-aab4-8f3d68aee1ad", "ip":"127.1.2.3"}' \
|
||||
http://localhost:5000/ip
|
11
docker-compose.yml
Normal file
11
docker-compose.yml
Normal file
@ -0,0 +1,11 @@
|
||||
version: '3'
|
||||
|
||||
networks:
|
||||
redis:
|
||||
external: false
|
||||
|
||||
services:
|
||||
redis:
|
||||
image: redis
|
||||
ports:
|
||||
- 6969:6379
|
@ -1,6 +1,6 @@
|
||||
import json
|
||||
from redisclient import redis_client
|
||||
from flask import jsonify, request, Response
|
||||
from flask import request, Response
|
||||
from flask_classful import FlaskView
|
||||
|
||||
|
||||
|
@ -1,5 +1,9 @@
|
||||
flask
|
||||
flask-classful
|
||||
redis
|
||||
flask-redis
|
||||
gunicorn
|
||||
sentry-sdk[flask]
|
||||
pytest
|
||||
pytest-flask
|
||||
pytest-redis
|
56
test.py
Normal file
56
test.py
Normal file
@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
Unit tests for the producer-endpoint module.
|
||||
"""
|
||||
|
||||
import os
|
||||
import json
|
||||
import pytest
|
||||
import redis
|
||||
from pytest_redis import factories
|
||||
import app
|
||||
|
||||
|
||||
generateduuid = 'c959ad81-58f9-4445-aab4-8f3d68aee1ad'
|
||||
redis_proc = factories.redis_proc(host='cache', port=6379)
|
||||
redis_db = factories.redisdb('redis_nooproc')
|
||||
redstuff = redis.Redis.from_url(url=os.environ['REDIS_URL'])
|
||||
redstuff.set('currentConsumer', json.dumps({'uuid': generateduuid, 'Host': "127.2.2.2"}).encode('utf-8'))
|
||||
|
||||
@pytest.fixture
|
||||
def client():
|
||||
"""Client fixture"""
|
||||
with app.app.test_client() as client:
|
||||
yield client
|
||||
|
||||
|
||||
def test_set_currentconsumer_success(client):
|
||||
|
||||
r = client.post("/ip", json={'uuid': generateduuid, 'ip': "127.1.2.3"})
|
||||
|
||||
json_in_redis = json.loads(redstuff.get('currentConsumer'))
|
||||
|
||||
assert r.status_code == 204
|
||||
assert json_in_redis == {'uuid': generateduuid, 'Host': "127.1.2.3"}
|
||||
|
||||
|
||||
def test_set_currentconsumer_server_error(client):
|
||||
|
||||
r = client.post("/ip", json="unexpected")
|
||||
|
||||
assert r.status_code == 500
|
||||
|
||||
|
||||
def test_set_currentconsumer_notfound(client):
|
||||
|
||||
r = client.post("/test")
|
||||
|
||||
assert r.status_code == 404
|
||||
|
||||
|
||||
def test_set_currentconsumer_method_not_allowed(client):
|
||||
|
||||
r = client.get("/ip")
|
||||
|
||||
assert r.status_code == 405
|
Reference in New Issue
Block a user