2
0
mirror of https://github.com/xcat2/confluent.git synced 2025-01-27 19:37:57 +00:00

Fix socket test case to work multiple times

This commit is contained in:
Jarrod Johnson 2013-10-09 20:14:34 -04:00
parent 7f572fd164
commit 9855f17d58
3 changed files with 67 additions and 1 deletions

61
bin/confetty Executable file
View File

@ -0,0 +1,61 @@
#!/usr/bin/env python
import optparse
import socket
import ssl
import sys
def parseservervalue(serverstring):
if serverstring.find(']:') != -1:
server, port = serverstring[1:].split(']:')
elif serverstring[0] == '[':
server = serverstring[1:-1]
port = 4001
elif -1 != opts.server.find(':'):
server, port = opts.server.split(":")
else:
server = serverstring
port = 4001
return (server, port)
def connect_tls_server(serverstring):
host, port = parseservervalue(serverstring)
for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, cononname, sa = res
try:
server = socket.socket(af, socktype, proto)
except:
server = None
continue
try:
server.settimeout(5)
server.connect(sa)
except:
server.close()
server = None
continue
break
if server is None:
sys.stderr.write("Failed to connect to %s\n" % serverstring)
sys.exit(1)
secserver = ssl.wrap_socket(server)
return secserver
parser = optparse.OptionParser()
parser.add_option("-s", "--server", dest="server",
help="TLS server to connect to", metavar="SERVER:PORT")
parser.add_option("-u", "--unixsocket", dest="unixsock",
help="TLS server to connect to", metavar="UNIXDOMAINSOCKET")
opts, args = parser.parse_args()
server = None
if opts.server: # going over a TLS network
server = connect_tls_server(opts.server)
#Next stop, reading and writing from whichever of stdin and server goes first.
#see pyghmi code for solconnect.py
print server.read()
server.shutdown(socket.SHUT_RDWR)
server.close()

View File

@ -113,7 +113,9 @@ class ConsoleSession(object):
self.reghdl = _handled_consoles[node].register_rcpt(self.got_data)
else:
self.reghdl = _handled_consoles[node].register_rcpt(datacallback)
datacallback(_handled_consoles[node].get_recent())
recdata = _handled_consoles[node].get_recent()
if recdata:
datacallback(recdata)
def destroy(self):
_handled_consoles[self.node].unregister_rcpt(self.reghdl)

View File

@ -18,11 +18,14 @@ def sessionhdl(connection):
datacallback=connection.write)
while (1):
data = connection.read()
if not data:
return
consession.write(data)
def _handler():
plainsocket = socket.socket()
plainsocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
srv = ssl.wrap_socket(plainsocket, keyfile="/etc/confluent/privkey.pem",
certfile="/etc/confluent/srvcert.pem",
ssl_version=ssl.PROTOCOL_TLSv1,