~hudson-openstack/burrow/trunk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Copyright (C) 2011 OpenStack LLC.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

'''Unittests for burrow.'''

import atexit
import os
import signal
import sys
import time

import burrow


def start_server():
    '''Fork and start the server, saving the pid in a file.'''
    kill_server()
    pid = os.fork()
    if pid == 0:
        try:
            import coverage
            cov = coverage.coverage(data_suffix=True)
            cov.start()

            def save_coverage(_signum, _frame):
                '''Callback for signal to save coverage info to file.'''
                cov.save()

            signal.signal(signal.SIGUSR1, save_coverage)
        except ImportError:
            pass
        server = burrow.Server(add_default_log_handler=False)
        server.frontends[0].default_ttl = 0
        server.run()
        sys.exit(0)
    pid_file = open('TestHTTP.pid', 'w')
    pid_file.write(str(pid))
    pid_file.close()
    atexit.register(kill_server)
    time.sleep(1)


def kill_server():
    '''Try killing the server if the pid file exists.'''
    try:
        pid_file = open('TestHTTP.pid', 'r')
        pid = pid_file.read()
        pid_file.close()
        try:
            os.kill(int(pid), signal.SIGUSR1)
            time.sleep(1)
            os.kill(int(pid), signal.SIGTERM)
        except OSError:
            pass
        os.unlink('TestHTTP.pid')
    except IOError:
        pass

start_server()