Github CI with Postgres (#417)

* with postgres

* postgres test explicit

* make format

* start postgres only if needed

* remove if again

* print db

* db in matrix

* delete schema

* use new env var MINT_TEST_DATABASE for tests

* add db path to regtest
This commit is contained in:
callebtc
2024-02-11 15:52:02 +01:00
committed by GitHub
parent 78de84f3eb
commit f74f18c9ca
7 changed files with 41 additions and 8 deletions

View File

@@ -17,8 +17,8 @@ jobs:
poetry-version: ["1.7.1"] poetry-version: ["1.7.1"]
mint-cache-secrets: ["false", "true"] mint-cache-secrets: ["false", "true"]
mint-only-deprecated: ["false", "true"] mint-only-deprecated: ["false", "true"]
# db-url: ["", "postgres://cashu:cashu@localhost:5432/cashu"] # TODO: Postgres test not working mint-database: ["./test_data/test_mint", "postgres://cashu:cashu@localhost:5432/cashu"]
db-url: [""] # mint-database: [""]
backend-wallet-class: ["FakeWallet"] backend-wallet-class: ["FakeWallet"]
uses: ./.github/workflows/tests.yml uses: ./.github/workflows/tests.yml
with: with:
@@ -27,6 +27,7 @@ jobs:
poetry-version: ${{ matrix.poetry-version }} poetry-version: ${{ matrix.poetry-version }}
mint-cache-secrets: ${{ matrix.mint-cache-secrets }} mint-cache-secrets: ${{ matrix.mint-cache-secrets }}
mint-only-deprecated: ${{ matrix.mint-only-deprecated }} mint-only-deprecated: ${{ matrix.mint-only-deprecated }}
mint-database: ${{ matrix.mint-database }}
regtest: regtest:
uses: ./.github/workflows/regtest.yml uses: ./.github/workflows/regtest.yml
strategy: strategy:
@@ -38,3 +39,4 @@ jobs:
with: with:
python-version: ${{ matrix.python-version }} python-version: ${{ matrix.python-version }}
backend-wallet-class: ${{ matrix.backend-wallet-class }} backend-wallet-class: ${{ matrix.backend-wallet-class }}
mint-database: "./test_data/test_mint"

View File

@@ -12,7 +12,7 @@ on:
os-version: os-version:
default: "ubuntu-latest" default: "ubuntu-latest"
type: string type: string
db-url: mint-database:
default: "" default: ""
type: string type: string
backend-wallet-class: backend-wallet-class:
@@ -23,6 +23,20 @@ jobs:
regtest: regtest:
runs-on: ${{ inputs.os-version }} runs-on: ${{ inputs.os-version }}
timeout-minutes: 10 timeout-minutes: 10
services:
postgres:
image: postgres:latest
env:
POSTGRES_USER: cashu
POSTGRES_PASSWORD: cashu
POSTGRES_DB: cashu
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
@@ -47,7 +61,7 @@ jobs:
WALLET_NAME: test_wallet WALLET_NAME: test_wallet
MINT_HOST: localhost MINT_HOST: localhost
MINT_PORT: 3337 MINT_PORT: 3337
MINT_DATABASE: ${{ inputs.db-url }} MINT_TEST_DATABASE: ${{ inputs.mint-database }}
TOR: false TOR: false
MINT_LIGHTNING_BACKEND: ${{ inputs.backend-wallet-class }} MINT_LIGHTNING_BACKEND: ${{ inputs.backend-wallet-class }}
MINT_LNBITS_ENDPOINT: http://localhost:5001 MINT_LNBITS_ENDPOINT: http://localhost:5001

View File

@@ -9,7 +9,7 @@ on:
poetry-version: poetry-version:
default: "1.7.1" default: "1.7.1"
type: string type: string
db-url: mint-database:
default: "" default: ""
type: string type: string
os: os:
@@ -24,7 +24,7 @@ on:
jobs: jobs:
poetry: poetry:
name: Run (mint-cache-secrets ${{ inputs.mint-cache-secrets }}, mint-only-deprecated ${{ inputs.mint-only-deprecated }}) name: Run (mint-cache-secrets ${{ inputs.mint-cache-secrets }}, mint-only-deprecated ${{ inputs.mint-only-deprecated }}, mint-database ${{ inputs.mint-database }})
runs-on: ${{ inputs.os }} runs-on: ${{ inputs.os }}
services: services:
postgres: postgres:
@@ -53,7 +53,7 @@ jobs:
WALLET_NAME: test_wallet WALLET_NAME: test_wallet
MINT_HOST: localhost MINT_HOST: localhost
MINT_PORT: 3337 MINT_PORT: 3337
MINT_DATABASE: ${{ inputs.db-url }} MINT_TEST_DATABASE: ${{ inputs.mint-database }}
MINT_CACHE_SECRETS: ${{ inputs.mint-cache-secrets }} MINT_CACHE_SECRETS: ${{ inputs.mint-cache-secrets }}
DEBUG_MINT_ONLY_DEPRECATED: ${{ inputs.mint-only-deprecated }} DEBUG_MINT_ONLY_DEPRECATED: ${{ inputs.mint-only-deprecated }}
TOR: false TOR: false

View File

@@ -56,6 +56,7 @@ class MintSettings(CashuSettings):
mint_listen_port: int = Field(default=3338) mint_listen_port: int = Field(default=3338)
mint_lightning_backend: str = Field(default="LNbitsWallet") mint_lightning_backend: str = Field(default="LNbitsWallet")
mint_database: str = Field(default="data/mint") mint_database: str = Field(default="data/mint")
mint_test_database: str = Field(default="test_data/test_mint")
mint_peg_out_only: bool = Field( mint_peg_out_only: bool = Field(
default=False, default=False,
title="Peg-out only", title="Peg-out only",

View File

@@ -35,7 +35,7 @@ settings.mint_lightning_backend = settings.mint_lightning_backend or "FakeWallet
settings.fakewallet_brr = True settings.fakewallet_brr = True
settings.fakewallet_delay_payment = False settings.fakewallet_delay_payment = False
settings.fakewallet_stochastic_invoice = False settings.fakewallet_stochastic_invoice = False
settings.mint_database = "./test_data/test_mint" settings.mint_database = settings.mint_test_database
settings.mint_derivation_path = "m/0'/0'/0'" settings.mint_derivation_path = "m/0'/0'/0'"
settings.mint_derivation_path_list = [] settings.mint_derivation_path_list = []
settings.mint_private_key = "TEST_PRIVATE_KEY" settings.mint_private_key = "TEST_PRIVATE_KEY"
@@ -100,6 +100,13 @@ async def ledger():
db_file = os.path.join(settings.mint_database, "mint.sqlite3") db_file = os.path.join(settings.mint_database, "mint.sqlite3")
if os.path.exists(db_file): if os.path.exists(db_file):
os.remove(db_file) os.remove(db_file)
else:
# clear postgres database
db = Database("mint", settings.mint_database)
async with db.connect() as conn:
await conn.execute("DROP SCHEMA public CASCADE;")
await conn.execute("CREATE SCHEMA public;")
wallets_module = importlib.import_module("cashu.lightning") wallets_module = importlib.import_module("cashu.lightning")
lightning_backend = getattr(wallets_module, settings.mint_lightning_backend)() lightning_backend = getattr(wallets_module, settings.mint_lightning_backend)()
backends = { backends = {

View File

@@ -31,6 +31,7 @@ is_fake: bool = WALLET.__class__.__name__ == "FakeWallet"
is_regtest: bool = not is_fake is_regtest: bool = not is_fake
is_deprecated_api_only = settings.debug_mint_only_deprecated is_deprecated_api_only = settings.debug_mint_only_deprecated
is_github_actions = os.getenv("GITHUB_ACTIONS") == "true" is_github_actions = os.getenv("GITHUB_ACTIONS") == "true"
is_postgres = settings.mint_database.startswith("postgres")
docker_lightning_cli = [ docker_lightning_cli = [
"docker", "docker",

View File

@@ -6,6 +6,7 @@ from cashu.mint.ledger import Ledger
from cashu.wallet.wallet import Wallet from cashu.wallet.wallet import Wallet
from cashu.wallet.wallet import Wallet as Wallet1 from cashu.wallet.wallet import Wallet as Wallet1
from tests.conftest import SERVER_ENDPOINT from tests.conftest import SERVER_ENDPOINT
from tests.helpers import is_postgres
async def assert_err(f, msg): async def assert_err(f, msg):
@@ -61,3 +62,10 @@ async def test_melt_quote(wallet1: Wallet, ledger: Ledger):
assert quote.checking_id == invoice.payment_hash assert quote.checking_id == invoice.payment_hash
assert quote.paid_time is None assert quote.paid_time is None
assert quote.created_time assert quote.created_time
@pytest.mark.asyncio
@pytest.mark.skipif(not is_postgres, reason="only works with Postgres")
async def test_postgres_working():
assert is_postgres
assert True