web/ldt/test/testcases.py
changeset 22 83b28fc0d731
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/test/testcases.py	Mon Dec 13 23:55:19 2010 +0100
@@ -0,0 +1,82 @@
+from django.conf import settings
+from django.core.management import call_command
+from django.test.testcases import TestCase, TransactionTestCase
+import django
+import threading
+import time
+import httplib
+from ldt.test.client import WebClient, OAuthClient, OAuthWebClient
+
+        
+def launch_webserver(addrport='', keep_running = None, ready_event = None):
+    call_command('testrunserver',addrport, keep_running, ready_event)
+
+class WebTestCase(TransactionTestCase):
+    
+#    def __init__(self, clientKlass = None):
+#        super(WebTestCase,self).__init__()
+#        if clientKlass is not None:
+#            self.client = clientKlass(self.client)
+
+    def set_login_url(self, value):
+        self.client.login_url = value
+    
+    def _pre_setup(self):
+        super(WebTestCase,self)._pre_setup()
+        self._keep_webserver = True
+        self._lock = threading.Lock()
+        self._ready_event = threading.Event()
+        
+        self.baseurl = "http://"+settings.TEST_WEBSERVER_ADDRPORT
+        self.client = WebClient()
+        self.client.baseurl = self.baseurl
+        login_url = '/' + settings.LOGIN_URL[len(settings.BASE_URL):].lstrip('/')
+        self.client.login_url = login_url
+        
+        def keep_runningserver():
+            with self._lock:
+                return self._keep_webserver
+                    
+        def launch_server():
+            launch_webserver(settings.TEST_WEBSERVER_ADDRPORT, keep_running=keep_runningserver, ready_event = self._ready_event)
+        
+        #launch_server()
+        self._t = threading.Thread(target=launch_server)
+        self._t.start()
+        self._ready_event.wait()
+        time.sleep(0.1)
+        
+    
+    def _post_teardown(self):
+        with self._lock:
+            self._keep_webserver = False
+        conn = httplib.HTTPConnection(settings.TEST_WEBSERVER_ADDRPORT)
+        conn.request("HEAD", "/")
+        conn.getresponse()
+        self._t.join()
+        super(WebTestCase,self)._post_teardown()
+
+class OAuthTestCase(TestCase):
+    
+    def set_consumer(self, key, secret):
+        self.client.set_consumer(key, secret)
+
+    def _pre_setup(self):
+        super(OAuthTestCase,self)._pre_setup()
+        self.client = OAuthClient()
+        
+class OAuthWebTestCase(WebTestCase):
+    
+    def set_consumer(self, key, secret):
+        self.client.set_consumer(key, secret)
+
+    def _pre_setup(self):
+        super(OAuthWebTestCase,self)._pre_setup()
+        self.client = OAuthWebClient()
+        self.client.baseurl = self.baseurl
+        login_url = '/' + settings.LOGIN_URL[len(settings.BASE_URL):].lstrip('/')
+        self.client.login_url = login_url
+
+
+
+    
\ No newline at end of file