postgress test

This commit is contained in:
Florin Barbu 2024-05-24 12:36:13 +03:00
parent 8a54f28bb1
commit f216b4cf79
No known key found for this signature in database
GPG Key ID: 593D6DBC6D9E5095
6 changed files with 74 additions and 1 deletions

View File

@ -50,7 +50,7 @@ jobs:
- name: Run tests
run: |
pytest -n 4 --dist loadgroup --reruns 2 --alluredir=allure-results
pytest -n 4 --dist loadgroup --alluredir=allure-results -k "test_postgres_db"
- name: Get allure history
if: always()

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
log/
.vscode
allure-results/
postgresql
# Byte-compiled / optimized / DLL files
__pycache__/

View File

@ -29,6 +29,8 @@ RUNNING_IN_CI = get_env_var("CI")
NODEKEY = get_env_var("NODEKEY", "30348dd51465150e04a5d9d932c72864c8967f806cce60b5d26afeca1e77eb68")
API_REQUEST_TIMEOUT = get_env_var("API_REQUEST_TIMEOUT", 20)
RLN_CREDENTIALS = get_env_var("RLN_CREDENTIALS")
PG_USER = get_env_var("POSTGRES_USER", "postgres")
PG_PASS = get_env_var("POSTGRES_PASSWORD", "test123")
# example for .env file
# RLN_CREDENTIALS = {"rln-relay-cred-password": "password", "rln-relay-eth-client-address": "wss://sepolia.infura.io/ws/v3/api_key", "rln-relay-eth-contract-address": "0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4", "rln-relay-eth-private-key-1": "1111111111111111111111111111111111111111111111111111111111111111", "rln-relay-eth-private-key-2": "1111111111111111111111111111111111111111111111111111111111111111"}

44
src/postgres_setup.py Normal file
View File

@ -0,0 +1,44 @@
import docker
import os
from src.env_vars import NETWORK_NAME, PG_PASS, PG_USER
from src.libs.custom_logger import get_custom_logger
logger = get_custom_logger(__name__)
def start_postgres():
pg_env = {"POSTGRES_USER": PG_USER, "POSTGRES_PASSWORD": PG_PASS}
base_path = os.path.abspath(".")
volumes = {os.path.join(base_path, "postgresql"): {"bind": "/var/lib/postgresql/data", "mode": "Z"}}
client = docker.from_env()
postgres_container = client.containers.run(
"postgres:15.4-alpine3.18",
name="postgres",
environment=pg_env,
volumes=volumes,
command="postgres",
ports={"5432/tcp": ("127.0.0.1", 5432)},
restart_policy={"Name": "on-failure", "MaximumRetryCount": 5},
healthcheck={
"Test": ["CMD-SHELL", "pg_isready -U postgres -d postgres"],
"Interval": 30000000000, # 30 seconds in nanoseconds
"Timeout": 60000000000, # 60 seconds in nanoseconds
"Retries": 5,
"StartPeriod": 80000000000, # 80 seconds in nanoseconds
},
detach=True,
network_mode=NETWORK_NAME,
)
logger.debug("Postgres container started")
return postgres_container
def stop_postgres(postgres_container):
postgres_container.stop()
postgres_container.remove()
logger.debug("Postgres container stopped and removed.")

View File

@ -10,6 +10,7 @@ from uuid import uuid4
from src.libs.common import attach_allure_file
import src.env_vars as env_vars
from src.data_storage import DS
from src.postgres_setup import start_postgres, stop_postgres
logger = get_custom_logger(__name__)
@ -37,6 +38,13 @@ def set_allure_env_variables():
outfile.write(f"{attribute_name}={attribute_value}\n")
@pytest.fixture(scope="class", autouse=False)
def start_postgres_container():
pg_container = start_postgres()
yield
stop_postgres(pg_container)
@pytest.fixture(scope="function", autouse=True)
def test_id(request):
# setting up an unique test id to be used where needed

View File

@ -0,0 +1,18 @@
import pytest
from src.libs.custom_logger import get_custom_logger
from src.steps.store import StepsStore
from src.env_vars import PG_PASS, PG_USER
logger = get_custom_logger(__name__)
@pytest.mark.usefixtures("start_postgres_container")
class TestExternalDb(StepsStore):
def test_postgres_db(self):
self.setup_first_publishing_node(store="true", relay="true", store_message_db_url=f"postgres://{PG_USER}:{PG_PASS}@postgres:5432/postgres")
self.setup_first_store_node(store="true", relay="true")
self.subscribe_to_pubsub_topics_via_relay()
message = self.create_message()
self.publish_message(message=message)
self.check_published_message_is_stored(page_size=5, ascending="true")
assert len(self.store_response.messages) == 1