Skip to content

Commit

Permalink
topotests: bgp_bmp, log bmp into tgen logdir
Browse files Browse the repository at this point in the history
Log BMP into tgen logdir to facilitate the debug.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
  • Loading branch information
louis-6wind committed Feb 29, 2024
1 parent 5558606 commit 0c7beb3
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 11 deletions.
12 changes: 8 additions & 4 deletions tests/topotests/bgp_bmp/test_bgp_bmp.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ def setup_module(mod):
tgen.start_router()

logger.info("starting BMP servers")
for _, server in tgen.get_bmp_servers().items():
server.start()
for bmp_name, server in tgen.get_bmp_servers().items():
server.start(log_file=os.path.join(tgen.logdir, bmp_name, "bmp.log"))


def teardown_module(_mod):
Expand All @@ -105,7 +105,9 @@ def get_bmp_messages():
"""
messages = []
tgen = get_topogen()
text_output = tgen.gears["bmp1"].run("cat /var/log/bmp.log")
text_output = tgen.gears["bmp1"].run(
"cat {}".format(os.path.join(tgen.logdir, "bmp1", "bmp.log"))
)

for m in text_output.splitlines():
# some output in the bash can break the message decoding
Expand Down Expand Up @@ -251,7 +253,9 @@ def test_bmp_server_logging():

def check_for_log_file():
tgen = get_topogen()
output = tgen.gears["bmp1"].run("ls /var/log/")
output = tgen.gears["bmp1"].run(
"ls {}".format(os.path.join(tgen.logdir, "bmp1"))
)
if "bmp.log" not in output:
return False
return True
Expand Down
8 changes: 4 additions & 4 deletions tests/topotests/lib/bmp_collector/bmp.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ def bin2str_ipaddress(ip_bytes, is_ipv6=False):
return str(ipaddress.IPv6Address(ip_bytes))
return str(ipaddress.IPv4Address(ip_bytes[-4:]))

def log2file(logs):
def log2file(logs, log_file):
"""
XXX: extract the useful information and save it in a flat dictionnary
"""
with open(LOG_FILE, 'a') as f:
with open(log_file, 'a') as f:
f.write(json.dumps(logs) + "\n")


Expand Down Expand Up @@ -183,7 +183,7 @@ def dissect_header(cls, data):
return _version, _len, _type

@classmethod
def dissect(cls, data):
def dissect(cls, data, log_file=None):
global SEQ
version, msglen, msgtype = cls.dissect_header(data)

Expand All @@ -202,7 +202,7 @@ def dissect(cls, data):
msg_cls.MSG_LEN = msglen - cls.MIN_LEN
logs = msg_cls.dissect(msg_data)
logs["seq"] = SEQ
log2file(logs)
log2file(logs, log_file if log_file else LOG_FILE)
SEQ += 1

return data
Expand Down
4 changes: 3 additions & 1 deletion tests/topotests/lib/bmp_collector/bmpserver
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,12 @@ BGP_MAX_SIZE = 4096
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--address", type=str, default="0.0.0.0")
parser.add_argument("-p", "--port", type=int, default=1789)
parser.add_argument("-l", "--logfile", type=str, default="/var/log/bmp.log")

def main():
args = parser.parse_args()
ADDRESS, PORT = args.address, args.port
LOG_FILE = args.logfile

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Expand All @@ -31,7 +33,7 @@ def main():
while True:
data = connection.recv(BGP_MAX_SIZE)
while len(data) > BMPMsg.MIN_LEN:
data = BMPMsg.dissect(data)
data = BMPMsg.dissect(data, log_file=LOG_FILE)
except Exception as e:
# XXX: do something
pass
Expand Down
5 changes: 3 additions & 2 deletions tests/topotests/lib/topogen.py
Original file line number Diff line number Diff line change
Expand Up @@ -1253,9 +1253,10 @@ def __str__(self):
gear += " TopoBMPCollector<>".format()
return gear

def start(self):
def start(self, log_file=None):
log_arg = "-l {}".format(log_file) if log_file else ""
self.run(
"{}/bmp_collector/bmpserver -a {} -p {}&".format(CWD, self.ip, self.port),
"{}/bmp_collector/bmpserver -a {} -p {} {}&".format(CWD, self.ip, self.port, log_arg),
stdout=None,
)

Expand Down

0 comments on commit 0c7beb3

Please sign in to comment.