#!/usr/bin/env python3 import sys sys.path.insert(0, "daemon") import server class FakeRegistry: def __init__(self): self.resources = {"postgresql-ha": object()} self.executions = [] def execute( self, resource, action, request_parameters=None, ): self.executions.append( (resource, action, request_parameters) ) return { "ok": True, "resource": resource, "plugin": "fake", "action": action, "result": { "parameters": request_parameters or {}, }, } def require(condition, message): if not condition: raise SystemExit("FAIL: " + message) print("===== PARAMETERIZED ACTIONS =====") registry = FakeRegistry() server.registry = registry server.pacemaker_resource_id = "postgresql-ha" server.pacemaker_peer_uid = 65534 server.pacemaker_peer_gid = 65534 server.pacemaker_node_name = "david-prodesk" peer = { "pid": 1, "uid": 65534, "gid": 65534, } parameters = { "type": "pre", "operation": "demote", "promote_uname": "david-eve", "demote_uname": "david-prodesk", } response = server.handle_request( { "protocol_version": 1, "resource": "postgresql-ha", "action": "notify", "parameters": parameters, }, peer, ) require(response["ok"] is True, "parameterized action was rejected") require( response["result"]["parameters"] == parameters, "action parameters were not preserved", ) require( registry.executions == [("postgresql-ha", "notify", parameters)], "parameterized action was not dispatched exactly once", ) print("parameterized_action dispatched") response = server.handle_request( { "protocol_version": 1, "resource": "postgresql-ha", "action": "notify", "parameters": [], }, peer, ) require( response["ok"] is False, "non-object parameters were accepted", ) require( response["error_code"] == "invalid_request", "invalid parameters had the wrong classification", ) require( len(registry.executions) == 1, "invalid parameters reached the registry", ) print("invalid_parameters rejected") print() print("PARAMETERIZED_ACTION_TEST_PASS=1")