1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-06-15 03:21:42 +03:00
Files
mariadb-columnstore-engine/cmapi/failover/test/tester.py
mariadb-AlanMologorsky a079a2c944 MCOL-5496: Merge CMAPI code to engine repo.
[add] cmapi code to engine
2023-06-07 10:00:16 +03:00

84 lines
2.7 KiB
Python

from .. import config
import time
from socket import *
import struct
import sys
_config = config.Config("failover/test/config-test.xml")
print("got desired_nodes = {}".format(_config.getDesiredNodes()))
print("got active_nodes = {}".format(_config.getActiveNodes()))
print("got inacive_nodes = {}".format(_config.getInactiveNodes()))
print("got all nodes = {}".format(_config.getAllNodes()))
print("got primarynode = {}".format(_config.getPrimaryNode()))
print()
from ..heartbeater import HeartBeater
from ..heartbeat_history import HBHistory
hbh = HBHistory()
hb = HeartBeater(_config, hbh)
hb.start()
sock = socket(type = SOCK_DGRAM)
sock.bind(('localhost', 12345))
# Updated heartbeater to send the reply to its own port, rather than to
# the port of the sending socket. Need to update this.
#msg = struct.pack("4sH", hb.areYouThereMsg, 1234)
#sock.sendto(msg, ('localhost', hb.port))
#print("sent the are-you-there msg")
#(data, remote) = sock.recvfrom(6)
#(data, seq) = struct.unpack("4sH", data)
#if data == hb.yesIAmMsg:
# print("got the yes-i-am msg, seq = {}".format(seq))
#else:
# print("got something other than the yes-i-am-msg")
hb.stop()
#from heartbeat_history import HBHistory
#hbh = HBHistory()
hbh.setCurrentTick(0)
hbh.gotHeartbeat("node1", 0)
hbh.setCurrentTick(1)
hbh.gotHeartbeat("node2", 1)
hbh.setCurrentTick(2)
hbh.setCurrentTick(10)
hbh.gotHeartbeat("node1", 9)
hbh.gotHeartbeat("node1", 2)
pongs = hbh.getNodeHistory("node1", 20)
print("Got pongs: {}".format(pongs))
print('''
This is currently a 'manual' test, meaning the user should watch for the expected output
In this case, because NM's identity checker will return 'node1', and that does not match
node[2-4], those nodes will appear to NodeMonitor to be offline. Our starting condition
is that nodes 1-3 are active, and node4 is inactive. After 15s, nodes 2 & 3
should be deactivated, a new primary node will be chosen, and and our AgentBase will start
printing these events.
''')
def testNodeMonitor1(nm):
nm.start()
print("Waiting for 20 secs, watch for output from AgentBase")
time.sleep(20)
nm.stop()
time.sleep(1)
print("NodeMonitor was stopped, did it produce the right output?")
from ..node_monitor import NodeMonitor
nm = NodeMonitor(config = _config, samplingInterval = 10)
# check whether node[1-4] are in the /etc/hosts file as localhost
addr1 = gethostbyname("node1")
addr2 = gethostbyname("node2")
addr3 = gethostbyname("node3")
addr4 = gethostbyname("node4")
if addr1 == '127.0.0.1' and addr2 == '127.0.0.1' and addr3 == '127.0.0.1' and addr4 == '127.0.0.1':
testNodeMonitor1(nm)
else:
print("Skipping testNodeMonitor1(). node[1-4] needs to be defined as 127.0.0.1 in /etc/hosts")
print("tester is finished")