""" Python invocation of several parallel publish-notifications RPCs. """ import Queue import requests import string import threading def publish_notifications(host, grprefix, duration, rate, nrpairs=1): """Invoke publish notification rpcs and verify the response. :param host: ip address of odl node :type host: string :param grprefix: prefix identifier for publisher/listener pair :type grprefix: string :param duration: publishing notification duration in seconds :type duration: int :param rate: events rate per second :type rate: int :param nrpairs: number of publisher/listener pairs, id suffix is counted from it :type nrpairs: int """ def _publ_notifications(rqueue, url, grid, duration, rate): dtmpl = string.Template(''' $ID $DURATION $RATE ''') data = dtmpl.substitute({'ID': grid, 'DURATION': duration, 'RATE': rate}) try: resp = requests.post(url=url, headers={'Content-Type': 'application/xml'}, data=data, auth=('admin', 'admin'), timeout=int(duration)+60) except Exception as exc: resp = exc rqueue.put(resp) resqueue = Queue.Queue() lthreads = [] url = 'http://{}:8181/restconf/operations/odl-mdsal-lowlevel-control:publish-notifications'.format(host) for i in range(nrpairs): t = threading.Thread(target=_publ_notifications, args=(resqueue, url, '{}{}'.format(grprefix, i+1), duration, rate)) t.daemon = True t.start() lthreads.append(t) for t in lthreads: t.join() for i in range(nrpairs): resp = resqueue.get() assert resp.status_code == 200