File: test_httpserver.py

package info (click to toggle)
gracie 0.2.11-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 412 kB
  • ctags: 552
  • sloc: python: 3,851; sh: 62; makefile: 16
file content (145 lines) | stat: -rw-r--r-- 5,177 bytes parent folder | download
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# -*- coding: utf-8 -*-

# test/test_httpserver.py
# Part of Gracie, an OpenID provider.
#
# Copyright © 2007–2010 Ben Finney <ben+python@benfinney.id.au>
# This is free software; you may copy, modify and/or distribute this work
# under the terms of the GNU General Public License, version 2 or later.
# No warranty expressed or implied. See the file ‘LICENSE.GPL-2’ for details.

""" Unit test for httpserver module.
    """

import sys
from StringIO import StringIO

import scaffold
from scaffold import Mock
from test_server import stub_server_bind, make_default_opts
from test_gracied import Stub_GracieServer

from gracie import httpserver


class net_location_TestCase(scaffold.TestCase):
    """ Test cases for net_location function. """

    def setUp(self):
        """ Set up test fixtures """
        self.default_port_prev = httpserver.default_port
        self.default_port_test = 9779
        httpserver.default_port = self.default_port_test

    def tearDown(self):
        """ Tear down test fixtures """
        httpserver.default_port = self.default_port_prev

    def test_combines_components_to_location(self):
        """ net_location() should combine components to net location """
        http_port = 80
        locations = {
            ("foo", None): "foo",
            ("foo", http_port): "foo",
            ("foo", self.default_port_test):
                "foo:%s" % self.default_port_test,
            ("foo", 2468): "foo:2468",
            }

        for (host, port), expect_location in locations.items():
            location = httpserver.net_location(host, port)
            self.failUnlessEqual(expect_location, location)


class Stub_HTTPRequestHandler(object):
    """ Stub class for HTTPRequestHandler """


class HTTPServer_TestCase(scaffold.TestCase):
    """ Test cases for HTTPServer class. """

    def setUp(self):
        """ Set up test fixtures """
        self.mock_tracker = scaffold.MockTracker()

        self.server_class = httpserver.HTTPServer

        self.stub_handler_class = Stub_HTTPRequestHandler
        self.mock_handler_class = Mock('HTTPRequestHandler')

        self.server_bind_prev = httpserver.BaseHTTPServer.server_bind
        httpserver.BaseHTTPServer.server_bind = stub_server_bind

        self.stdout_prev = sys.stdout
        self.stdout_test = StringIO()
        sys.stdout = self.stdout_test

        self.valid_servers = {
            'simple': dict(
                address = ('', 80),
                ),
            }

        for key, params in self.valid_servers.items():
            args = params.get('args')
            address = params.get('address')
            handler_class = params.setdefault(
                'handler_class', self.stub_handler_class)
            opts = make_default_opts()
            gracie_server = params.setdefault(
                'gracie_server', Stub_GracieServer(address, opts)
                )
            if not args:
                args = dict(
                    server_address = params['address'],
                    RequestHandlerClass = params['handler_class'],
                    gracie_server = params['gracie_server'],
                    )
            instance = self.server_class(**args)
            params['args'] = args
            params['instance'] = instance

    def tearDown(self):
        """ Tear down test fixtures """
        sys.stdout = self.stdout_prev
        httpserver.BaseHTTPServer.server_bind = self.server_bind_prev
        scaffold.mock_restore()

    def test_instantiate(self):
        """ New HTTPServer instance should be created """
        for params in self.valid_servers.values():
            instance = params['instance']
            self.failIfIs(None, instance)

    def test_version_as_specified(self):
        """ HTTPServer should have specified version string """
        params = self.valid_servers['simple']
        server_module = sys.modules['gracie.server']
        scaffold.mock(
            "server_module.version", tracker=self.mock_tracker)
        version_test = Stub_GracieServer.version
        server_module.version.version_full = version_test
        instance = self.server_class(**params['args'])
        self.failUnlessEqual(version_test, instance.version)

    def test_request_handler_class_as_specified(self):
        """ HTTPServer should have specified RequestHandlerClass """
        for params in self.valid_servers.values():
            instance = params['instance']
            handler_class = params['handler_class']
            self.failUnlessEqual(
                handler_class, instance.RequestHandlerClass
                )

    def test_gracie_server_as_specified(self):
        """ HTTPServer should have specified Gracie server instance """
        for params in self.valid_servers.values():
            instance = params['instance']
            gracie_server = params['gracie_server']
            self.failUnlessEqual(
                gracie_server, instance.gracie_server
                )

    def test_serve_forever_is_callable(self):
        """ HTTPServer.serve_forever should be callable """
        self.failUnless(callable(self.server_class.serve_forever))