#! /usr/bin/env python import getopt, socket, sys from cpackets import testlist try: (opts, args) = getopt.getopt(sys.argv[1:], 'h:lp:qst:w', ( 'host=', 'list', 'port=', 'quit', 'statusonly', 'test=', 'wsdl', 'help')) except getopt.GetoptError, e: print >>sys.stderr, sys.argv[0] + ': ' + str(e) sys.exit(1) if args: print sys.argv[0] + ': Usage error; try --help.' sys.exit(1) hostname, portnum, tests, quitting, getwsdl, verbose = \ 'localhost', 1122, [0,1], 0, 0, 1 for opt, val in opts: if opt in [ '--help' ]: print '''Options include: --host HOST (-h HOST) Name of server host --port PORT (-p PORT) Port server is listening on --quit (-q) Send server a QUIT command --testnum 1,2,3 (-t ...) Run comma-separated tests; use * or all for all --list (-l) List tests (brief description) --statusonly (-s) Do not output reply packets; just status code --wsdl (-w) Get the WSDL file Default is -h%s -p%d -t%s''' % \ (hostname, portnum, ','.join([str(x) for x in tests])) sys.exit(0) if opt in [ '-h', '--host' ]: hostname = val elif opt in [ '-p', '--port' ]: portnum = int(val) elif opt in [ '-s', '--statusonly' ]: verbose = 0 elif opt in [ '-q', '--quit' ]: quitting = 1 elif opt in [ '-t', '--testnum' ]: if val in [ '*', 'all' ]: tests = range(len(testlist)) else: tests = [ int(t) for t in val.split(',') ] elif opt in [ '-l', '--list' ]: for i in range(len(testlist)): print i, testlist[i][0] sys.exit(0) elif opt in [ '-w', '--wsdl' ]: getwsdl = 1 if quitting: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((hostname, portnum)) except socket.error, e: if e.args[1] == 'Connection refused': sys.exit(0) raise f = s.makefile('r+') f.write('QUIT / HTTP/1.0\r\n') f.flush() sys.exit(0) if getwsdl: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((hostname, portnum)) f = s.makefile('r+') f.write('GET /wsdl HTTP/1.0\r\n\r\n') f.flush() status = f.readline() print status, while 1: l = f.readline() if l == '': break print l, sys.exit(0) for T in tests: descr, IN, header = testlist[T] s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((hostname, portnum)) f = s.makefile('r+') print '-' * 60, '\n\n\n', T, descr f.write('POST / HTTP/1.0\r\n') f.write('SOAPAction: "http://soapinterop.org/"\r\n') if header == None: f.write('Content-type: text/xml; charset="utf-8"\r\n') f.write('Content-Length: %d\r\n\r\n' % len(IN)) else: f.write(header) f.write(IN) f.flush() status = f.readline() print status, while 1: l = f.readline() if l == '': break if verbose: print l, f.close()