Test and fix Postgres helper
This commit is contained in:
parent
6d24ccb248
commit
e5bd13b8c1
|
@ -29,11 +29,14 @@ steps:
|
||||||
- name: test suite
|
- name: test suite
|
||||||
image: rust:1.54.0-slim-bullseye
|
image: rust:1.54.0-slim-bullseye
|
||||||
commands:
|
commands:
|
||||||
- apt-get -qq update && apt-get -yqq install pkg-config libssl-dev build-essential libsqlite3-dev python3.9 python3.9-venv
|
- apt-get -qq update && apt-get -yqq install pkg-config libssl-dev build-essential libsqlite3-dev python3.9 python3.9-venv postgresql postgresql-client
|
||||||
|
- sudo -u postgres createuser root
|
||||||
|
- sudo -u postgres createdb -O root testsuitedb
|
||||||
|
- psql testsuitedb -c 'CREATE TABLE testsuitetable ();'
|
||||||
- cargo install -q --path yama
|
- cargo install -q --path yama
|
||||||
- cargo install -q --path datman
|
- cargo install -q --path datman
|
||||||
- python3.9 -m venv testsuite/.venv
|
- python3.9 -m venv testsuite/.venv
|
||||||
- ./testsuite/.venv/bin/pip install -e testsuite
|
- ./testsuite/.venv/bin/pip install -e testsuite -e datman-helper-postgres
|
||||||
- cd testsuite && ./.venv/bin/green
|
- cd testsuite && ./.venv/bin/green
|
||||||
|
|
||||||
- name: deploy manual
|
- name: deploy manual
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import pwd
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from subprocess import PIPE
|
from subprocess import PIPE
|
||||||
|
@ -27,7 +28,7 @@ def cli():
|
||||||
use_lz4 = request_info.get("use_lz4_for_ssh", True)
|
use_lz4 = request_info.get("use_lz4_for_ssh", True)
|
||||||
|
|
||||||
if host_to_use is not None:
|
if host_to_use is not None:
|
||||||
hostname = subprocess.check_output("hostname").strip()
|
hostname = subprocess.check_output("hostname").decode().strip()
|
||||||
if hostname == host_to_use:
|
if hostname == host_to_use:
|
||||||
host_to_use = None
|
host_to_use = None
|
||||||
|
|
||||||
|
@ -40,9 +41,11 @@ def cli():
|
||||||
else:
|
else:
|
||||||
command.append(f"{host_to_use}")
|
command.append(f"{host_to_use}")
|
||||||
elif user_to_use is not None:
|
elif user_to_use is not None:
|
||||||
command.append("sudo")
|
current_username = pwd.getpwuid(os.getuid()).pw_name
|
||||||
command.append("-u")
|
if current_username != user_to_use:
|
||||||
command.append(user_to_use)
|
command.append("sudo")
|
||||||
|
command.append("-u")
|
||||||
|
command.append(user_to_use)
|
||||||
|
|
||||||
command.append("pg_dump")
|
command.append("pg_dump")
|
||||||
command.append(database_to_use)
|
command.append(database_to_use)
|
||||||
|
|
|
@ -6,7 +6,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
|
|
||||||
from setuptools import find_packages, setup, Command
|
from setuptools import Command, find_packages, setup
|
||||||
|
|
||||||
# Package meta-data.
|
# Package meta-data.
|
||||||
NAME = "datman_helper_postgres"
|
NAME = "datman_helper_postgres"
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
from unittest import TestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestPostgresHelper(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
if "TEST_POSTGRES" not in os.environ:
|
||||||
|
self.skipTest(
|
||||||
|
"TEST_POSTGRES environment variable not set. "
|
||||||
|
"Should be set to a Postgres host, database, user combination, comma-separated."
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_helper_fails_on_bad_connection(self):
|
||||||
|
proc = subprocess.Popen("datman-helper-postgres-backup", stdin=subprocess.PIPE)
|
||||||
|
proc.stdin.write(
|
||||||
|
json.dumps(
|
||||||
|
{"database": "mydatabase", "host": "notmyhost", "user": "bobjones"}
|
||||||
|
).encode()
|
||||||
|
)
|
||||||
|
proc.stdin.close()
|
||||||
|
self.assertNotEqual(proc.wait(), 0)
|
||||||
|
|
||||||
|
def test_helper_succeeds_on_correct_config(self):
|
||||||
|
pg_host, pg_database, pg_user = os.environ["TEST_POSTGRES"].split(",")
|
||||||
|
|
||||||
|
proc = subprocess.Popen(
|
||||||
|
"datman-helper-postgres-backup",
|
||||||
|
stdin=subprocess.PIPE,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
)
|
||||||
|
proc.stdin.write(
|
||||||
|
json.dumps(
|
||||||
|
{
|
||||||
|
"database": pg_database or None,
|
||||||
|
"host": pg_host or None,
|
||||||
|
"user": pg_user or None,
|
||||||
|
}
|
||||||
|
).encode()
|
||||||
|
)
|
||||||
|
proc.stdin.close()
|
||||||
|
stdout = proc.stdout.read()
|
||||||
|
self.assertEqual(proc.wait(), 0)
|
||||||
|
self.assertIn(b"CREATE TABLE", stdout)
|
|
@ -1,18 +0,0 @@
|
||||||
#!/bin/sh -eu
|
|
||||||
|
|
||||||
if [ $# -ge 1 ]
|
|
||||||
then
|
|
||||||
files=$*
|
|
||||||
else
|
|
||||||
files="setup.py datmantests helpers yamatests"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Linting these locations: $files"
|
|
||||||
echo " ===== Running isort ===== "
|
|
||||||
isort $files
|
|
||||||
echo " ===== Running black ===== "
|
|
||||||
black $files
|
|
||||||
echo " ===== Running flake8 ===== "
|
|
||||||
flake8 $files
|
|
||||||
#echo " ===== Running mypy ===== "
|
|
||||||
#mypy $files
|
|
Loading…
Reference in New Issue