Add daemon PostgreSQL notify action
This commit is contained in:
Executable
+86
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import importlib.util
|
||||
import sys
|
||||
import types
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
fake_psycopg2 = types.ModuleType("psycopg2")
|
||||
fake_psycopg2.Error = Exception
|
||||
fake_psycopg2.OperationalError = OSError
|
||||
|
||||
fake_extras = types.ModuleType("psycopg2.extras")
|
||||
fake_extras.RealDictCursor = object
|
||||
fake_psycopg2.extras = fake_extras
|
||||
|
||||
sys.modules["psycopg2"] = fake_psycopg2
|
||||
sys.modules["psycopg2.extras"] = fake_extras
|
||||
|
||||
plugin_path = Path("plugins/postgresql/plugin.py")
|
||||
|
||||
spec = importlib.util.spec_from_file_location(
|
||||
"postgresql_plugin",
|
||||
plugin_path,
|
||||
)
|
||||
plugin = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(plugin)
|
||||
|
||||
|
||||
def require(condition, message):
|
||||
if not condition:
|
||||
raise SystemExit("FAIL: " + message)
|
||||
|
||||
|
||||
print("===== DAEMON NOTIFY ACTION =====")
|
||||
|
||||
runtime_state = {}
|
||||
|
||||
parameters = {
|
||||
"type": "pre",
|
||||
"operation": "demote",
|
||||
"promote_uname": "david-eve",
|
||||
"demote_uname": "david-prodesk",
|
||||
"promoted_uname": "david-prodesk",
|
||||
"unpromoted_uname": "david-eve david-macbookpro",
|
||||
}
|
||||
|
||||
response = plugin.notify(
|
||||
{},
|
||||
runtime_state,
|
||||
parameters,
|
||||
)
|
||||
|
||||
require(
|
||||
response["ocf_rc"] == plugin.OCF_SUCCESS,
|
||||
"notify did not return OCF_SUCCESS",
|
||||
)
|
||||
require(
|
||||
response["state"]["operation"] == "demote",
|
||||
"notify operation was not preserved",
|
||||
)
|
||||
require(
|
||||
runtime_state["postgresql"]["notification"]
|
||||
== response["state"],
|
||||
"notify state was not retained",
|
||||
)
|
||||
print("valid_notify accepted")
|
||||
print("notify_state retained")
|
||||
|
||||
for invalid in (
|
||||
[],
|
||||
{"type": None},
|
||||
{"operation": "demote\n"},
|
||||
):
|
||||
try:
|
||||
plugin.notify({}, {}, invalid)
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
raise SystemExit(
|
||||
"FAIL: invalid notify parameters were accepted"
|
||||
)
|
||||
|
||||
print("invalid_notify rejected")
|
||||
print()
|
||||
print("NOTIFY_ACTION_TEST_PASS=1")
|
||||
Reference in New Issue
Block a user