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