web/ldt/test/testcases.py
author wakimd
Wed, 22 Dec 2010 12:01:05 +0100
changeset 25 c8dfd7ea87e5
parent 22 83b28fc0d731
permissions -rw-r--r--
Corrections on merge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
22
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
from django.conf import settings
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from django.core.management import call_command
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
from django.test.testcases import TestCase, TransactionTestCase
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
import django
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
import threading
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
import time
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
import httplib
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
from ldt.test.client import WebClient, OAuthClient, OAuthWebClient
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
        
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
def launch_webserver(addrport='', keep_running = None, ready_event = None):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
    call_command('testrunserver',addrport, keep_running, ready_event)
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
class WebTestCase(TransactionTestCase):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
#    def __init__(self, clientKlass = None):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
#        super(WebTestCase,self).__init__()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
#        if clientKlass is not None:
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
#            self.client = clientKlass(self.client)
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    def set_login_url(self, value):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        self.client.login_url = value
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    def _pre_setup(self):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        super(WebTestCase,self)._pre_setup()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        self._keep_webserver = True
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        self._lock = threading.Lock()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        self._ready_event = threading.Event()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        self.baseurl = "http://"+settings.TEST_WEBSERVER_ADDRPORT
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
        self.client = WebClient()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        self.client.baseurl = self.baseurl
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
        login_url = '/' + settings.LOGIN_URL[len(settings.BASE_URL):].lstrip('/')
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
        self.client.login_url = login_url
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        def keep_runningserver():
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
            with self._lock:
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
                return self._keep_webserver
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
                    
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        def launch_server():
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
            launch_webserver(settings.TEST_WEBSERVER_ADDRPORT, keep_running=keep_runningserver, ready_event = self._ready_event)
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        #launch_server()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        self._t = threading.Thread(target=launch_server)
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        self._t.start()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        self._ready_event.wait()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        time.sleep(0.1)
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    def _post_teardown(self):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        with self._lock:
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
            self._keep_webserver = False
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        conn = httplib.HTTPConnection(settings.TEST_WEBSERVER_ADDRPORT)
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
        conn.request("HEAD", "/")
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        conn.getresponse()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        self._t.join()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        super(WebTestCase,self)._post_teardown()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
class OAuthTestCase(TestCase):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    def set_consumer(self, key, secret):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        self.client.set_consumer(key, secret)
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    def _pre_setup(self):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        super(OAuthTestCase,self)._pre_setup()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        self.client = OAuthClient()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
class OAuthWebTestCase(WebTestCase):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    def set_consumer(self, key, secret):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
        self.client.set_consumer(key, secret)
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    def _pre_setup(self):
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        super(OAuthWebTestCase,self)._pre_setup()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        self.client = OAuthWebClient()
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        self.client.baseurl = self.baseurl
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        login_url = '/' + settings.LOGIN_URL[len(settings.BASE_URL):].lstrip('/')
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
        self.client.login_url = login_url
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
83b28fc0d731 improve on ldt test framework
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82