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