[CalendarServer-changes] [14752] CalDAVTester/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue May 5 07:31:00 PDT 2015
Revision: 14752
http://trac.calendarserver.org//changeset/14752
Author: cdaboo at apple.com
Date: 2015-05-05 07:31:00 -0700 (Tue, 05 May 2015)
Log Message:
-----------
Allow connecting to a server via a unix socket (use <unix>...</unix> element in serverinfo.xml).
Modified Paths:
--------------
CalDAVTester/trunk/scripts/server/serverinfo.dtd
CalDAVTester/trunk/src/caldavtest.py
CalDAVTester/trunk/src/httpshandler.py
CalDAVTester/trunk/src/manager.py
CalDAVTester/trunk/src/request.py
CalDAVTester/trunk/src/serverinfo.py
CalDAVTester/trunk/src/xmlDefs.py
Modified: CalDAVTester/trunk/scripts/server/serverinfo.dtd
===================================================================
--- CalDAVTester/trunk/scripts/server/serverinfo.dtd 2015-05-05 14:29:43 UTC (rev 14751)
+++ CalDAVTester/trunk/scripts/server/serverinfo.dtd 2015-05-05 14:31:00 UTC (rev 14752)
@@ -14,15 +14,19 @@
limitations under the License.
-->
-<!ELEMENT serverinfo (host, nonsslport, sslport, host2?, nonsslport2?, sslport2?, authtype?,
- waitcount?, waitdelay?, waitsuccess?, features?, substitutions)? >
+<!ELEMENT serverinfo (host, nonsslport, sslport, unix?,
+ host2?, nonsslport2?, sslport2?, unix2?,
+ authtype?, waitcount?, waitdelay?, waitsuccess?,
+ features?, substitutions)? >
<!ELEMENT host (#PCDATA)>
<!ELEMENT nonsslport (#PCDATA)>
<!ELEMENT sslport (#PCDATA)>
+ <!ELEMENT unix (#PCDATA)>
<!ELEMENT host2 (#PCDATA)>
<!ELEMENT nonsslport2 (#PCDATA)>
<!ELEMENT sslport2 (#PCDATA)>
+ <!ELEMENT unix2 (#PCDATA)>
<!ELEMENT authtype (#PCDATA)>
<!ELEMENT waitdelay (#PCDATA)>
<!ELEMENT waitcount (#PCDATA)>
Modified: CalDAVTester/trunk/src/caldavtest.py
===================================================================
--- CalDAVTester/trunk/src/caldavtest.py 2015-05-05 14:29:43 UTC (rev 14751)
+++ CalDAVTester/trunk/src/caldavtest.py 2015-05-05 14:31:00 UTC (rev 14752)
@@ -664,7 +664,7 @@
stats.startTimer()
# Do the http request
- http = SmartHTTPConnection(req.host, req.port, self.manager.server_info.ssl)
+ http = SmartHTTPConnection(req.host, req.port, self.manager.server_info.ssl, afunix=req.afunix)
if 'User-Agent' not in headers and label is not None:
headers['User-Agent'] = label.encode("utf-8")
Modified: CalDAVTester/trunk/src/httpshandler.py
===================================================================
--- CalDAVTester/trunk/src/httpshandler.py 2015-05-05 14:29:43 UTC (rev 14751)
+++ CalDAVTester/trunk/src/httpshandler.py 2015-05-05 14:31:00 UTC (rev 14752)
@@ -19,7 +19,9 @@
import ssl as sslmodule
class HTTPSVersionConnection(httplib.HTTPSConnection):
- "This class allows communication via SSL."
+ """
+ An L{httplib.HTTPSConnection} class that allows the TLS protocol version to be set.
+ """
def __init__(self, host, port, ssl_version=sslmodule.PROTOCOL_TLSv1):
httplib.HTTPSConnection.__init__(self, host, port)
@@ -39,14 +41,48 @@
(set(), sslmodule.PROTOCOL_SSLv23),
)
-def SmartHTTPConnection(host, port, ssl):
+class UnixSocketHTTPConnection(httplib.HTTPConnection):
+ """
+ An L{httplib.HTTPConnection} class that uses a unix socket rather than TCP.
+ """
+ def __init__(self, path):
+ httplib.HTTPConnection.__init__(self, "http.sock", port=None)
+ self.path = path
+
+
+ def connect(self):
+ """
+ Connect using the supplied unix socket file path
+ """
+ self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ self.sock.connect(self.path)
+
+
+
+def SmartHTTPConnection(host, port, ssl, afunix):
+ """
+ Create the appropriate L{httplib.HTTPConnection} derived class for the supplied arguments.
+
+ @param host: TCP host name
+ @type host: L{str}
+ @param port: TCP port number
+ @type port: L{int}
+ @param ssl: indicates if SSL is to be used
+ @type ssl: L{bool}
+ @param afunix: unix socket to use or L{None}
+ @type afunix: L{str}
+ """
+
def trySSL(version):
connect = HTTPSVersionConnection(host, port, ssl_version=version)
connect.connect()
return connect
- if ssl:
+ if afunix:
+ connect = UnixSocketHTTPConnection(afunix)
+ elif ssl:
+ # Iterate over the TL:S versions and find one that works and cache it for future use.
for cached, connection_type in cached_types:
if (host, port) in cached:
try:
@@ -64,5 +100,5 @@
raise RuntimeError("Cannot connect via with TLSv1, SSLv3 or SSLv23")
else:
connect = httplib.HTTPConnection(host, port)
- connect.connect()
- return connect
+ connect.connect()
+ return connect
Modified: CalDAVTester/trunk/src/manager.py
===================================================================
--- CalDAVTester/trunk/src/manager.py 2015-05-05 14:29:43 UTC (rev 14751)
+++ CalDAVTester/trunk/src/manager.py 2015-05-05 14:31:00 UTC (rev 14752)
@@ -22,7 +22,6 @@
from xml.etree.cElementTree import ElementTree
from xml.parsers.expat import ExpatError
import getopt
-import httplib
import os
import random
import src.xmlDefs
@@ -402,23 +401,6 @@
return failed, endTime - startTime
- def httpRequest(self, method, uri, headers, data):
-
- # Do the http request
- http = httplib.HTTPConnection(self.server_info.host, self.server_info.port)
- try:
- http.request(method, uri, data, headers)
-
- response = http.getresponse()
-
- respdata = response.read()
-
- finally:
- http.close()
-
- return response.status, respdata
-
-
def getMemusage(self):
"""
Modified: CalDAVTester/trunk/src/request.py
===================================================================
--- CalDAVTester/trunk/src/request.py 2015-05-05 14:29:43 UTC (rev 14751)
+++ CalDAVTester/trunk/src/request.py 2015-05-05 14:31:00 UTC (rev 14752)
@@ -146,6 +146,7 @@
self.manager = manager
self.host = self.manager.server_info.host
self.port = self.manager.server_info.port
+ self.afunix = self.manager.server_info.afunix
self.auth = True
self.user = ""
self.pswd = ""
@@ -234,7 +235,7 @@
if user in self.manager.digestCache:
details = self.manager.digestCache[user]
else:
- http = SmartHTTPConnection(si.host, si.port, si.ssl)
+ http = SmartHTTPConnection(si.host, si.port, si.ssl, si.afunix)
try:
http.request("OPTIONS", self.getURI(si))
@@ -381,6 +382,7 @@
if node.get(src.xmlDefs.ATTR_HOST2, src.xmlDefs.ATTR_VALUE_NO) == src.xmlDefs.ATTR_VALUE_YES:
self.host = self.manager.server_info.host2
self.port = self.manager.server_info.port2
+ self.afunix = self.manager.server_info.afunix2
for child in node.getchildren():
if child.tag == src.xmlDefs.ELEMENT_REQUIRE_FEATURE:
Modified: CalDAVTester/trunk/src/serverinfo.py
===================================================================
--- CalDAVTester/trunk/src/serverinfo.py 2015-05-05 14:29:43 UTC (rev 14751)
+++ CalDAVTester/trunk/src/serverinfo.py 2015-05-05 14:31:00 UTC (rev 14752)
@@ -36,9 +36,11 @@
self.host = ""
self.nonsslport = 80
self.sslport = 443
+ self.afunix = None
self.host2 = ""
self.nonsslport2 = 80
self.sslport2 = 443
+ self.afunix2 = None
self.authtype = "basic"
self.features = set()
self.user = ""
@@ -166,6 +168,8 @@
self.nonsslport = int(child.text)
elif child.tag == src.xmlDefs.ELEMENT_SSLPORT:
self.sslport = int(child.text)
+ elif child.tag == src.xmlDefs.ELEMENT_UNIX:
+ self.afunix = child.text
elif child.tag == src.xmlDefs.ELEMENT_HOST2:
try:
self.host2 = child.text.encode("utf-8")
@@ -175,6 +179,8 @@
self.nonsslport2 = int(child.text)
elif child.tag == src.xmlDefs.ELEMENT_SSLPORT2:
self.sslport2 = int(child.text)
+ elif child.tag == src.xmlDefs.ELEMENT_UNIX2:
+ self.afunix2 = child.text
elif child.tag == src.xmlDefs.ELEMENT_AUTHTYPE:
self.authtype = child.text.encode("utf-8")
elif child.tag == src.xmlDefs.ELEMENT_WAITCOUNT:
Modified: CalDAVTester/trunk/src/xmlDefs.py
===================================================================
--- CalDAVTester/trunk/src/xmlDefs.py 2015-05-05 14:29:43 UTC (rev 14751)
+++ CalDAVTester/trunk/src/xmlDefs.py 2015-05-05 14:31:00 UTC (rev 14752)
@@ -76,6 +76,8 @@
ELEMENT_TESTSUITE = "test-suite"
ELEMENT_TIMEOUT = "timeout"
ELEMENT_THREADS = "threads"
+ELEMENT_UNIX = "unix"
+ELEMENT_UNIX2 = "unix2"
ELEMENT_VALUE = "value"
ELEMENT_VARIABLE = "variable"
ELEMENT_VERIFY = "verify"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20150505/7b89d2a5/attachment-0001.html>
More information about the calendarserver-changes
mailing list