Statistics
| Branch: | Tag: | Revision:

root / snf-quotaholder-app / test / config.py @ 889be75c

History | View | Annotate | Download (3.3 kB)

1
### IMPORTS ###
2
import sys
3
import os
4
import subprocess
5
import time
6
from socket import socket, AF_INET, SOCK_STREAM, IPPROTO_TCP, error as socket_error
7
from errno import ECONNREFUSED
8
from os.path import dirname
9

    
10
# The following import is copied from snf-tools/syneffo_tools/burnin.py
11
# Thank you John Giannelos <johngian@grnet.gr>
12
# Use backported unittest functionality if Python < 2.7
13
try:
14
    import unittest2 as unittest
15
except ImportError:
16
    if sys.version_info < (2, 7):
17
        raise Exception("The unittest2 package is required for Python < 2.7")
18
    import unittest
19

    
20
from quotaholder.clients.kamaki import quotaholder_client
21
from quotaholder.api import (InvalidKeyError, NoEntityError,
22
                             NoQuantityError, NoCapacityError,
23
                             ExportLimitError, ImportLimitError)
24

    
25
import random 
26

    
27
def printf(fmt, *args):
28
    print(fmt.format(*args))
29

    
30
def environ_get(key, default_value = ''):
31
    if os.environ.has_key(key):
32
        return os.environ.get(key)
33
    else:
34
        return default_value
35

    
36
# Use environ vars [TEST_]QH_{HOST, PORT}
37
QH_HOST = environ_get("TEST_QH_HOST", environ_get("QH_HOST", "127.0.0.1"))
38
QH_PORT = environ_get("TEST_QH_PORT", environ_get("QH_PORT", "8008"))
39

    
40
assert QH_HOST != None
41
assert QH_PORT != None
42

    
43
printf("Will connect to QH_HOST = {0}", QH_HOST)
44
printf("            and QH_PORT = {0}", QH_PORT)
45

    
46
QH_SERVER = '{0}:{1}'.format(QH_HOST, QH_PORT)
47
QH_URL = "http://{0}/api/quotaholder/v".format(QH_SERVER)
48

    
49
### DEFS ###
50
def new_quota_holder_client():
51
    """
52
    Create a new quota holder api client
53
    """
54
    return quotaholder_client(QH_URL)
55

    
56
def run_test_case(test_case):
57
    """
58
    Runs the test_case and returns the result
59
    """
60
    # Again from snf-tools/synnefo_tools/burnin.py
61
    # Thank you John Giannelos <johngian@grnet.gr>
62
    printf("Running {0}", test_case)
63
    import sys
64
    suite = unittest.TestLoader().loadTestsFromTestCase(test_case)
65
    runner = unittest.TextTestRunner(stream=sys.stderr, verbosity=2,
66
                                     failfast=True, buffer=False)
67
    return runner.run(suite)
68

    
69
def run_test_cases(test_cases):
70
    for test_case in test_cases:
71
        run_test_case(test_case)
72

    
73
def rand_string():
74
   alphabet = 'abcdefghijklmnopqrstuvwxyz'
75
   min = 5
76
   max = 15
77
   string=''
78
   for x in random.sample(alphabet,random.randint(min,max)):
79
    string += x
80
   return string
81

    
82
HERE = dirname(__file__)
83

    
84
def init_server():
85
    p = subprocess.Popen(['setsid', HERE+'/qh_init', QH_SERVER])
86
    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
87
    while True:
88
        try:
89
            s.connect((QH_HOST, int(QH_PORT)))
90
            break
91
        except socket_error, e:
92
            if e.errno != ECONNREFUSED:
93
                raise
94
            time.sleep(0.1)
95
    return p.pid
96

    
97
### CLASSES ###
98
class QHTestCase(unittest.TestCase):
99
    @classmethod
100
    def setUpClass(self):
101
        self.server = init_server()
102
        self.qh = new_quota_holder_client()
103
#        self.qh.create_entity(create_entity=[("pgerakios", "system", "key1", "")])
104

    
105
    def setUp(self):
106
        print
107

    
108
    @classmethod
109
    def tearDownClass(self):
110
        from signal import SIGTERM
111
        os.kill(-self.server, SIGTERM)
112
        os.remove('/tmp/qh_testdb')
113
        del self.qh
114

    
115

    
116
### VARS ###
117
DefaultOrCustom = {
118
    True: "default",
119
    False: "custom"
120
}
121