00001 /* 00002 00003 Copyright (C) 2006-2007 by Peter Dimov. 00004 00005 This file is part of Calitko (http://www.calitko.org). 00006 00007 Calitko is free software; you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation; either version 2 of the License, or 00010 (at your option) any later version. 00011 00012 Calitko is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with Calitko; if not, write to the Free Software 00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00020 00021 */ 00022 00023 #include "Qt.h" 00024 #include "../RequestHeader.h" 00025 #include "Imports.cpp" 00026 00027 namespace Protocols { 00028 namespace Http { 00029 namespace Testing { 00030 00032 00034 class RequestHeaderTest : public CppUnit::TestFixture 00035 { 00036 CPPUNIT_TEST_SUITE (RequestHeaderTest); 00037 CPPUNIT_TEST (testParseFailsInvalidProtocol); 00038 CPPUNIT_TEST (testParseFailsNoPath); 00039 CPPUNIT_TEST (testParseFailsBadVersion); 00040 CPPUNIT_TEST (testParseSucceeds); 00041 CPPUNIT_TEST (testWriteHeader); 00042 CPPUNIT_TEST_SUITE_END(); 00043 00044 RequestHeader requestHeader; 00045 const QByteArray rawRequestHeader; 00046 00047 public: 00048 RequestHeaderTest() 00049 : rawRequestHeader ("GET /index.php HTTP/2.3\r\n" 00050 "header-name: value\r\n" 00051 "\r\n") 00052 { 00053 } 00054 00055 void setUp() 00056 { 00057 requestHeader = RequestHeader(); 00058 } 00059 00060 void refParseFails (const QByteArray &invalidRawRequestHeader) 00061 { 00062 bool parsed = requestHeader.parse (invalidRawRequestHeader); 00063 CPPUNIT_ASSERT (parsed == false); 00064 } 00065 00066 void testParseFailsInvalidProtocol() 00067 { 00068 refParseFails ("GET / NPTP/1.1\r\n" "header-name: value\r\n"); 00069 } 00070 00071 void testParseFailsNoPath() 00072 { 00073 refParseFails ("GET HTTP/1.1\r\n" "header-name: value\r\n"); 00074 } 00075 00076 void testParseFailsBadVersion() 00077 { 00078 refParseFails ("GET / HTTP/11\r\n" "header-name: value\r\n"); 00079 } 00080 00081 void testParseSucceeds() 00082 { 00083 bool parsed = requestHeader.parse (rawRequestHeader); 00084 CPPUNIT_ASSERT (parsed == true); 00085 CPPUNIT_ASSERT (requestHeader.method() == "GET"); 00086 CPPUNIT_ASSERT (requestHeader.path() == "/index.php"); 00087 CPPUNIT_ASSERT (requestHeader.majorVersion() == 2); 00088 CPPUNIT_ASSERT (requestHeader.minorVersion() == 3); 00089 } 00090 00091 void testWriteHeader() 00092 { 00093 requestHeader = RequestHeader ("GET", "/index.php", 2, 3); 00094 requestHeader.setFieldValue ("header-name", "value"); 00095 QByteArray rawHeader = requestHeader.toRawBytes(); 00096 CPPUNIT_ASSERT (rawHeader == rawRequestHeader); 00097 } 00098 }; 00099 00100 CPPUNIT_TEST_SUITE_REGISTRATION (RequestHeaderTest); 00101 00102 } // namespace Testing 00103 } // namespace Http 00104 } // namespace Protocols