12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python
22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright 2011, Google Inc.
42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# All rights reserved.
52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Redistribution and use in source and binary forms, with or without
72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# modification, are permitted provided that the following conditions are
82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# met:
92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#     * Redistributions of source code must retain the above copyright
112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# notice, this list of conditions and the following disclaimer.
122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#     * Redistributions in binary form must reproduce the above
132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# copyright notice, this list of conditions and the following disclaimer
142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# in the documentation and/or other materials provided with the
152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# distribution.
162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#     * Neither the name of Google Inc. nor the names of its
172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# contributors may be used to endorse or promote products derived from
182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# this software without specific prior written permission.
192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis"""Tests for http_header_util module."""
342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
362da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport unittest
372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
382da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom mod_pywebsocket import http_header_util
392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
412da489cd246702bee5938545b18a6f710ed214bcJamie Gennisclass UnitTest(unittest.TestCase):
422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    """A unittest for http_header_util module."""
432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_parse_relative_uri(self):
452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        host, port, resource = http_header_util.parse_uri('/ws/test')
462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(None, host)
472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(None, port)
482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('/ws/test', resource)
492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_parse_absolute_uri(self):
512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        host, port, resource = http_header_util.parse_uri(
522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis            'ws://localhost:10080/ws/test')
532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('localhost', host)
542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(10080, port)
552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('/ws/test', resource)
562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        host, port, resource = http_header_util.parse_uri(
582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis            'ws://example.com/ws/test')
592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('example.com', host)
602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(80, port)
612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('/ws/test', resource)
622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        host, port, resource = http_header_util.parse_uri(
642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis            'wss://example.com/')
652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('example.com', host)
662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(443, port)
672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('/', resource)
682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        host, port, resource = http_header_util.parse_uri(
702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis            'ws://example.com:8080')
712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('example.com', host)
722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(8080, port)
732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual('/', resource)
742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    def test_parse_invalid_uri(self):
762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        host, port, resource = http_header_util.parse_uri('ws:///')
772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(None, resource)
782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        host, port, resource = http_header_util.parse_uri('ws://localhost:')
802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(None, resource)
812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        host, port, resource = http_header_util.parse_uri('ws://localhost:/ws')
832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis        self.assertEqual(None, resource)
842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
862da489cd246702bee5938545b18a6f710ed214bcJamie Gennisif __name__ == '__main__':
872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    unittest.main()
882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# vi:sts=4 sw=4 et
91