fixed adding file problem
[c11concurrency-benchmarks.git] / gdax-orderbook-hpp / demo / dependencies / websocketpp-0.7.0 / test / utility / close.cpp
1 /*
2  * Copyright (c) 2014, Peter Thorson. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of the WebSocket++ Project nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY
19  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  */
27 //#define BOOST_TEST_DYN_LINK
28 #define BOOST_TEST_MODULE close
29 #include <boost/test/unit_test.hpp>
30
31 #include <iostream>
32 #include <string>
33
34 #include <websocketpp/close.hpp>
35 #include <websocketpp/utilities.hpp>
36
37 using namespace websocketpp;
38
39 BOOST_AUTO_TEST_CASE( reserved_values ) {
40     BOOST_CHECK( !close::status::reserved(999) );
41     BOOST_CHECK( close::status::reserved(1004) );
42     BOOST_CHECK( close::status::reserved(1014) );
43     BOOST_CHECK( close::status::reserved(1016) );
44     BOOST_CHECK( close::status::reserved(2999) );
45     BOOST_CHECK( !close::status::reserved(1000) );
46 }
47
48 BOOST_AUTO_TEST_CASE( invalid_values ) {
49     BOOST_CHECK( close::status::invalid(0) );
50     BOOST_CHECK( close::status::invalid(999) );
51     BOOST_CHECK( !close::status::invalid(1000) );
52     BOOST_CHECK( close::status::invalid(1005) );
53     BOOST_CHECK( close::status::invalid(1006) );
54     BOOST_CHECK( close::status::invalid(1015) );
55     BOOST_CHECK( !close::status::invalid(2999) );
56     BOOST_CHECK( !close::status::invalid(3000) );
57     BOOST_CHECK( close::status::invalid(5000) );
58 }
59
60 BOOST_AUTO_TEST_CASE( value_extraction ) {
61     lib::error_code ec;
62     std::string payload = "oo";
63
64     // Value = 1000
65     payload[0] = 0x03;
66     payload[1] = char(0xe8);
67     BOOST_CHECK( close::extract_code(payload,ec) == close::status::normal );
68     BOOST_CHECK( !ec );
69
70     // Value = 1004
71     payload[0] = 0x03;
72     payload[1] = char(0xec);
73     BOOST_CHECK( close::extract_code(payload,ec) == 1004 );
74     BOOST_CHECK( ec == error::reserved_close_code );
75
76     // Value = 1005
77     payload[0] = 0x03;
78     payload[1] = char(0xed);
79     BOOST_CHECK( close::extract_code(payload,ec) == close::status::no_status );
80     BOOST_CHECK( ec == error::invalid_close_code );
81
82     // Value = 3000
83     payload[0] = 0x0b;
84     payload[1] = char(0xb8);
85     BOOST_CHECK( close::extract_code(payload,ec) == 3000 );
86     BOOST_CHECK( !ec );
87 }
88
89 BOOST_AUTO_TEST_CASE( extract_empty ) {
90     lib::error_code ec;
91     std::string payload;
92
93     BOOST_CHECK( close::extract_code(payload,ec) == close::status::no_status );
94     BOOST_CHECK( !ec );
95 }
96
97 BOOST_AUTO_TEST_CASE( extract_short ) {
98     lib::error_code ec;
99     std::string payload = "0";
100
101     BOOST_CHECK( close::extract_code(payload,ec) == close::status::protocol_error );
102     BOOST_CHECK( ec == error::bad_close_code );
103 }
104
105 BOOST_AUTO_TEST_CASE( extract_reason ) {
106     lib::error_code ec;
107     std::string payload = "00Foo";
108
109     BOOST_CHECK( close::extract_reason(payload,ec) == "Foo" );
110     BOOST_CHECK( !ec );
111
112     payload.clear();
113     BOOST_CHECK( close::extract_reason(payload,ec).empty() );
114     BOOST_CHECK( !ec );
115
116     payload = "00";
117     BOOST_CHECK( close::extract_reason(payload,ec).empty() );
118     BOOST_CHECK( !ec );
119
120     payload = "000";
121     payload[2] = char(0xFF);
122
123     close::extract_reason(payload,ec);
124     BOOST_CHECK( ec == error::invalid_utf8 );
125 }