diff --git a/utils/ng-load-tester.py b/utils/ng-load-tester.py new file mode 100644 index 000000000..4217de0cf --- /dev/null +++ b/utils/ng-load-tester.py @@ -0,0 +1,81 @@ +import base64 +import fastbencode +import json +import random +import socket + + +def conv(e): + if type(e) is str: + return bytes(e, "ASCII") + if type(e) is dict: + n = {} + for k, v in e.items(): + n[bytes(k, "ASCII")] = conv(v) + return n + if type(e) is list: + n = [] + for v in e: + n.append(conv(v)) + return n + return e + + +addr = "127.0.0.1" +port = 2223 + +fmt = "bencode" +iters = 200000 +cmd = "statistics" + +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + +if cmd == "answer": + msg = { + "command": "answer", + "call-id": "foo", + "from-tag": "bar", + "to-tag": "meh", + "sdp": """ + v=0 + o=- 1695296331 1695296331 IN IP4 192.168.1.202 + s=- + t=0 0 + c=IN IP4 192.168.1.202 + m=audio 45825 UDP/TLS/RTP/SAVPF 0 8 101 + a=setup:active + a=fingerprint:sha-256 49:05:98:B2:15:43:1C:9C:4F:29:07:60:F8:63:77:16:80:F9:44:C0:97:8E:E5:48:D6:71:B4:03:10:85:D6:E3 + a=rtpmap:0 PCMU/8000/1 + a=rtpmap:8 PCMA/8000/1 + a=rtpmap:101 telephone-event/8000 + a=rtcp-mux + a=rtcprsize + a=sendrecv + """, + "flags": ["generate RTCP", "pad crypto", "symmetric codecs"], + "ICE": "remove", + "codec": { + "mask": ["opus", "PCMA", "PCMU"], + "transcode": ["G722", "AMR"], + "strip": ["AMR-WB", "EVS"], + }, + "transport-protocol": "RTP/AVP", + "replace": ["origin"], + "rtcp-mux": ["demux"], + } +elif cmd == "statistics": + msg = {"command": "statistics"} + +if fmt == "json": + enc = bytes(json.dumps(msg), "ASCII") +elif fmt == "bencode": + enc = fastbencode.bencode(conv(msg)) +else: + raise + +for _ in range(iters): + packet = base64.b64encode(random.randbytes(6)) + b" " + enc + sock.sendto(packet, (addr, port)) + sock.recvfrom(4096) + +print("done")