Dispatch parameterized daemon actions
This commit is contained in:
Executable
+110
@@ -0,0 +1,110 @@
|
||||
#!/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")
|
||||
Reference in New Issue
Block a user