[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