Skip to content

Commit aac074d

Browse files
Dimfredxeroc
authored andcommitted
added test
1 parent 9f33785 commit aac074d

File tree

1 file changed

+304
-0
lines changed

1 file changed

+304
-0
lines changed

tests/tests/login_signed_tests.cpp

Lines changed: 304 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,304 @@
1+
/*
2+
* Copyright (c) 2019 Blockchain Projects B.V.
3+
*
4+
* The MIT License
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
* THE SOFTWARE.
23+
*/
24+
25+
#include <boost/test/unit_test.hpp>
26+
#include <boost/assign/list_of.hpp>
27+
28+
#include <graphene/chain/protocol/transaction.hpp>
29+
30+
#include <graphene/app/api.hpp>
31+
32+
#include <fc/crypto/digest.hpp>
33+
#include <fc/crypto/base64.hpp>
34+
35+
#include "../common/database_fixture.hpp"
36+
37+
using namespace graphene::chain;
38+
using namespace graphene::chain::test;
39+
using namespace graphene::app;
40+
41+
42+
struct login_signed_fixture : public database_fixture
43+
{
44+
45+
};
46+
47+
BOOST_FIXTURE_TEST_SUITE( login_signed_tests, login_signed_fixture )
48+
49+
BOOST_AUTO_TEST_CASE( fail_with_timestamp_too_fresh )
50+
{ try {
51+
52+
ACTOR( alice );
53+
transfer_operation op;
54+
op.from = alice_id;
55+
56+
signed_transaction trx;
57+
trx.operations.push_back( op );
58+
trx.expiration = db.head_block_time() + 60*60; // too far in the future
59+
trx.sign( alice_private_key, db.get_chain_id() );
60+
61+
auto json = fc::json::to_string<signed_transaction>( trx );
62+
auto encoded = fc::base64_encode( json );
63+
64+
login_api login_api( app );
65+
bool logged_in = login_api.login_signed( encoded );
66+
BOOST_CHECK( !logged_in );
67+
68+
} FC_LOG_AND_RETHROW() }
69+
70+
71+
BOOST_AUTO_TEST_CASE( fail_with_timestamp_too_old )
72+
{ try {
73+
74+
ACTOR( alice );
75+
transfer_operation op;
76+
op.from = alice_id;
77+
78+
signed_transaction trx;
79+
trx.operations.push_back( op );
80+
trx.expiration = db.head_block_time() - 60*60; // too far in the past
81+
trx.sign( alice_private_key, db.get_chain_id() );
82+
83+
auto json = fc::json::to_string<signed_transaction>( trx );
84+
auto encoded = fc::base64_encode( json );
85+
86+
login_api login_api( app );
87+
bool logged_in = login_api.login_signed( encoded );
88+
BOOST_CHECK( !logged_in );
89+
90+
} FC_LOG_AND_RETHROW() }
91+
92+
BOOST_AUTO_TEST_CASE( fail_with_not_transfer_op_in_trx )
93+
{ try {
94+
95+
ACTOR( alice );
96+
account_update_operation op;
97+
op.account = alice_id;
98+
99+
signed_transaction trx;
100+
trx.operations.push_back( op );
101+
trx.expiration = db.head_block_time() + 60;
102+
trx.sign( alice_private_key, db.get_chain_id() );
103+
104+
auto json = fc::json::to_string<signed_transaction>( trx );
105+
auto encoded = fc::base64_encode( json );
106+
107+
login_api login_api( app );
108+
bool logged_in = login_api.login_signed( encoded );
109+
BOOST_CHECK( !logged_in );
110+
111+
} FC_LOG_AND_RETHROW() }
112+
113+
BOOST_AUTO_TEST_CASE( fail_with_empty_signature_keys )
114+
{ try {
115+
116+
ACTOR( alice );
117+
transfer_operation op;
118+
op.from = alice_id;
119+
120+
signed_transaction trx;
121+
trx.operations.push_back( op );
122+
trx.expiration = db.head_block_time() + 60;
123+
124+
auto json = fc::json::to_string<signed_transaction>( trx );
125+
auto encoded = fc::base64_encode( json );
126+
127+
login_api login_api( app );
128+
bool logged_in = login_api.login_signed( encoded );
129+
BOOST_CHECK( !logged_in );
130+
131+
} FC_LOG_AND_RETHROW() }
132+
133+
BOOST_AUTO_TEST_CASE( fail_with_wrong_signature )
134+
{ try {
135+
136+
ACTORS( (alice) (bob) );
137+
transfer_operation op;
138+
op.from = alice_id;
139+
140+
signed_transaction trx;
141+
trx.operations.push_back( op );
142+
trx.expiration = db.head_block_time() + 60;
143+
trx.sign( bob_private_key, db.get_chain_id() );
144+
145+
auto json = fc::json::to_string<signed_transaction>( trx );
146+
auto encoded = fc::base64_encode( json );
147+
148+
login_api login_api( app );
149+
login_api.enable_api( "database_api" );
150+
bool logged_in = login_api.login_signed( encoded );
151+
BOOST_CHECK( !logged_in );
152+
153+
} FC_LOG_AND_RETHROW() }
154+
155+
BOOST_AUTO_TEST_CASE( fail_as_default_user_no_lifetime_member )
156+
{ try {
157+
158+
api_access_info_signed info;
159+
info.required_lifetime_member = true;
160+
info.required_registrar = "";
161+
info.allowed_apis = { "database_api" };
162+
163+
app.set_api_access_info_signed_default( {info} );
164+
165+
ACTOR( alice );
166+
transfer_operation op;
167+
op.from = alice_id;
168+
169+
signed_transaction trx;
170+
trx.operations.push_back( op );
171+
trx.expiration = db.head_block_time() + 60;
172+
trx.sign( alice_private_key, db.get_chain_id() );
173+
174+
auto json = fc::json::to_string<signed_transaction>( trx );
175+
auto encoded = fc::base64_encode( json );
176+
177+
login_api login_api( app );
178+
login_api.enable_api( "database_api" );
179+
bool logged_in = login_api.login_signed( encoded );
180+
BOOST_CHECK( !logged_in );
181+
182+
} FC_LOG_AND_RETHROW() }
183+
184+
BOOST_AUTO_TEST_CASE( fail_as_default_user_no_required_registrar )
185+
{ try {
186+
187+
api_access_info_signed info;
188+
info.required_lifetime_member = false;
189+
info.required_registrar = "required_registrar_name";
190+
info.allowed_apis = { "database_api" };
191+
192+
app.set_api_access_info_signed_default( {info} );
193+
194+
ACTOR( alice );
195+
transfer_operation op;
196+
op.from = alice_id;
197+
198+
signed_transaction trx;
199+
trx.operations.push_back( op );
200+
trx.expiration = db.head_block_time() + 60;
201+
trx.sign( alice_private_key, db.get_chain_id() );
202+
203+
auto json = fc::json::to_string<signed_transaction>( trx );
204+
auto encoded = fc::base64_encode( json );
205+
206+
login_api login_api( app );
207+
login_api.enable_api( "database_api" );
208+
bool logged_in = login_api.login_signed( encoded );
209+
BOOST_CHECK( !logged_in );
210+
211+
} FC_LOG_AND_RETHROW() }
212+
213+
BOOST_AUTO_TEST_CASE( pass_as_default_user_no_specials )
214+
{ try {
215+
216+
api_access_info_signed info;
217+
info.required_lifetime_member = false;
218+
info.required_registrar = "";
219+
info.allowed_apis = { "database_api" };
220+
221+
app.set_api_access_info_signed_default( {info} );
222+
223+
ACTOR( alice );
224+
transfer_operation op;
225+
op.from = alice_id;
226+
227+
signed_transaction trx;
228+
trx.operations.push_back( op );
229+
trx.expiration = db.head_block_time() + 60;
230+
trx.sign( alice_private_key, db.get_chain_id() );
231+
232+
auto json = fc::json::to_string<signed_transaction>( trx );
233+
auto encoded = fc::base64_encode( json );
234+
235+
login_api login_api( app );
236+
login_api.enable_api( "database_api" );
237+
bool logged_in = login_api.login_signed( encoded );
238+
BOOST_CHECK( logged_in );
239+
240+
} FC_LOG_AND_RETHROW() }
241+
242+
BOOST_AUTO_TEST_CASE( pass_as_default_user_with_lifetime_member )
243+
{ try {
244+
245+
api_access_info_signed info;
246+
info.required_lifetime_member = true;
247+
info.required_registrar = "";
248+
info.allowed_apis = { "database_api" };
249+
250+
app.set_api_access_info_signed_default( {info} );
251+
252+
ACTOR( alice );
253+
db.modify( alice, [](account_object& obj) {
254+
obj.membership_expiration_date = time_point_sec::maximum();
255+
});
256+
257+
transfer_operation op;
258+
op.from = alice_id;
259+
260+
signed_transaction trx;
261+
trx.operations.push_back( op );
262+
trx.expiration = db.head_block_time() + 60;
263+
trx.sign( alice_private_key, db.get_chain_id() );
264+
265+
auto json = fc::json::to_string<signed_transaction>( trx );
266+
auto encoded = fc::base64_encode( json );
267+
268+
login_api login_api( app );
269+
login_api.enable_api( "database_api" );
270+
bool logged_in = login_api.login_signed( encoded );
271+
BOOST_CHECK( logged_in );
272+
273+
} FC_LOG_AND_RETHROW() }
274+
275+
BOOST_AUTO_TEST_CASE( pass_as_special_user )
276+
{ try {
277+
278+
api_access_info_signed info;
279+
info.required_lifetime_member = false;
280+
info.required_registrar = "";
281+
info.allowed_apis = { "database_api" };
282+
283+
app.set_api_access_info_signed_user( "alice", std::move(info) );
284+
285+
ACTOR( alice );
286+
transfer_operation op;
287+
op.from = alice_id;
288+
289+
signed_transaction trx;
290+
trx.operations.push_back( op );
291+
trx.expiration = db.head_block_time() + 60;
292+
trx.sign( alice_private_key, db.get_chain_id() );
293+
294+
auto json = fc::json::to_string<signed_transaction>( trx );
295+
auto encoded = fc::base64_encode( json );
296+
297+
login_api login_api( app );
298+
login_api.enable_api( "database_api" );
299+
bool logged_in = login_api.login_signed( encoded );
300+
BOOST_CHECK( logged_in );
301+
302+
} FC_LOG_AND_RETHROW() }
303+
304+
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)