TFCweb  1.0.4 $Rev: 483 $
TFC Primavera 2012: Nucli d'un servidor web
TestDataHTTP.cc
Veure la documentació d'aquest fitxer.
1 
11 /*
12  * Copyright (c) 2012 Toni Corvera
13  *
14  * This file is part of TFCWeb.
15  *
16  * TFCWeb is free software: you can redistribute it and/or modify
17  * it under the terms of the GNU General Public License as published by
18  * the Free Software Foundation, either version 3 of the License, or
19  * (at your option) any later version.
20  *
21  * TFCWeb is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24  * GNU General Public License for more details.
25  *
26  * You should have received a copy of the GNU General Public License
27  * along with TFCWeb. If not, see <http://www.gnu.org/licenses/>.
28  */
29 
30 #include <iostream>
31 #include <boost/date_time.hpp>
32 
33 #include <DataHTTP.h>
34 #include <utils.h>
35 
36 #include "comu.h"
37 
38 using namespace std;
39 using namespace tfc;
40 
41 namespace tfc { namespace Fixtures {
42 
43 struct FxtData {
44  // Data de referència
45  const time_t epoch;
46  const boost::posix_time::ptime pt_epoch;
47  const string str_epoch;
48 
50  : epoch(0),
51  // FIXME: 01 ó 1?
52  str_epoch("Thu, 01 Jan 1970 00:00:00 GMT"),
53  pt_epoch(boost::posix_time::from_time_t(0))
54  {
55  // buit
56  }
57 };
58 
59 } // ns Fixtures
60 } // ns tfc
61 
62 BOOST_FIXTURE_TEST_SUITE( DataHTTP_TestSuite, Fixtures::FxtData )
63 
64 BOOST_AUTO_TEST_CASE( representacio_i_analisi )
65 {
66  using namespace boost::posix_time;
67  // Valors de referència (Epoch)
68  BOOST_CHECK_EQUAL( data_http(epoch), str_epoch );
69  BOOST_CHECK_EQUAL( llegeix_data_http(str_epoch), epoch );
70  // Invariants
71  const string ara = data_http();
72  const time_t t_ara = llegeix_data_http(ara);
73  BOOST_CHECK_EQUAL( data_http(llegeix_data_http(ara)), ara );
74  BOOST_CHECK_EQUAL( llegeix_data_http(data_http(t_ara)), t_ara );
75 }
76 
77 BOOST_AUTO_TEST_CASE( formats_reconeguts )
78 {
79  // Valors d'exemple de l'RFC 2068, 3.3.1:
80  const char * rfc822 = "Sun, 06 Nov 1994 08:49:37 GMT"; // RFC 822, updated by RFC 1123
81  const char * rfc850 = "Sunday, 06-Nov-94 08:49:37 GMT"; // RFC 850, obsoleted by RFC 1036
82  const char * casctime = "Sun Nov 6 08:49:37 1994"; // ANSI C's asctime() format
83  // Format tècnicament incorrecte, comprobació que s'accepten els
84  // dos dígits en el día correctament
85  const char * casctime_alt = "Sun Nov 06 08:49:37 1994";
86  BOOST_CHECK_NO_THROW( llegeix_data_http(rfc822) );
87  BOOST_CHECK_NO_THROW( llegeix_data_http(rfc850) );
88  BOOST_CHECK_NO_THROW( llegeix_data_http(casctime) );
89 
90  BOOST_CHECK_EQUAL( llegeix_data_http(rfc822), llegeix_data_http(rfc850) );
91  BOOST_CHECK_EQUAL( llegeix_data_http(rfc822), llegeix_data_http(casctime) );
92  BOOST_CHECK_EQUAL( llegeix_data_http(casctime), llegeix_data_http(casctime_alt) );
93 }
94 
95 BOOST_AUTO_TEST_SUITE_END()
96 
97 // vim:set ts=4 et ai: //