@@ -26,6 +26,8 @@ BOOST_FIXTURE_TEST_SUITE(electrum_tests, electrum_setup_fixture)
2626// blockchain.transaction.broadcast
2727
2828using namespace system;
29+ static const code not_found{ server::error::not_found };
30+ static const code not_implemented{ server::error::not_implemented };
2931static const code invalid_argument{ server::error::invalid_argument };
3032static const code unconfirmable_transaction{ server::error::unconfirmable_transaction };
3133
@@ -63,4 +65,79 @@ BOOST_AUTO_TEST_CASE(electrum__blockchain_transaction_broadcast__genesis_coinbas
6365 BOOST_CHECK_EQUAL (response.at (" error" ).as_object ().at (" code" ).as_int64 (), unconfirmable_transaction.value ());
6466}
6567
68+ // blockchain.transaction.get
69+
70+ BOOST_AUTO_TEST_CASE (electrum__blockchain_transaction_get__empty_hash__invalid_argument)
71+ {
72+ BOOST_CHECK (handshake ());
73+
74+ const auto response = get (R"( {"id":77,"method":"blockchain.transaction.get","params":["",false]})" " \n " );
75+ BOOST_CHECK_EQUAL (response.at (" error" ).as_object ().at (" code" ).as_int64 (), invalid_argument.value ());
76+ }
77+
78+ BOOST_AUTO_TEST_CASE (electrum__blockchain_transaction_get__invalid_hash__invalid_argument)
79+ {
80+ BOOST_CHECK (handshake ());
81+
82+ const auto response = get (R"( {"id":78,"method":"blockchain.transaction.get","params":["deadbeef",false]})" " \n " );
83+ BOOST_CHECK_EQUAL (response.at (" error" ).as_object ().at (" code" ).as_int64 (), invalid_argument.value ());
84+ }
85+
86+ BOOST_AUTO_TEST_CASE (electrum__blockchain_transaction_get__nonexistent_tx__not_found)
87+ {
88+ BOOST_CHECK (handshake ());
89+
90+ const auto bogus = " 0000000000000000000000000000000000000000000000000000000000000042" ;
91+ const auto request = R"( {"id":79,"method":"blockchain.transaction.get","params":["%1%",false]})" " \n " ;
92+ const auto response = get ((boost::format (request) % bogus).str ());
93+ BOOST_CHECK_EQUAL (response.at (" error" ).as_object ().at (" code" ).as_int64 (), not_found.value ());
94+ }
95+
96+ BOOST_AUTO_TEST_CASE (electrum__blockchain_transaction_get__missing_param__dropped)
97+ {
98+ BOOST_CHECK (handshake ());
99+
100+ const auto & coinbase = *genesis.transactions_ptr ()->front ();
101+ const auto tx_hash = encode_hash (coinbase.hash (false ));
102+ const auto request = R"( {"id":80,"method":"blockchain.transaction.get","params":["%1%"]})" " \n " ;
103+ const auto response = get ((boost::format (request) % tx_hash).str ());
104+ BOOST_CHECK (response.at (" dropped" ).as_bool ());
105+ }
106+
107+ BOOST_AUTO_TEST_CASE (electrum__blockchain_transaction_get__extra_param__dropped)
108+ {
109+ BOOST_CHECK (handshake ());
110+
111+ const auto & coinbase = *genesis.transactions_ptr ()->front ();
112+ const auto tx_hash = encode_hash (coinbase.hash (false ));
113+ const auto request = R"( {"id":81,"method":"blockchain.transaction.get","params":["%1%",false,"extra"]})" " \n " ;
114+ const auto response = get ((boost::format (request) % tx_hash).str ());
115+ BOOST_CHECK (response.at (" dropped" ).as_bool ());
116+ }
117+
118+ BOOST_AUTO_TEST_CASE (electrum__blockchain_transaction_get__genesis_coinbase_verbose_false__expected)
119+ {
120+ BOOST_CHECK (handshake ());
121+
122+ const auto & coinbase = *genesis.transactions_ptr ()->front ();
123+ const auto tx_hash = encode_hash (coinbase.hash (false ));
124+ const auto request = R"( {"id":82,"method":"blockchain.transaction.get","params":["%1%",false]})" " \n " ;
125+ const auto response = get ((boost::format (request) % tx_hash).str ());
126+ BOOST_CHECK_EQUAL (response.at (" result" ).as_string (), encode_base16 (coinbase.to_data (true )));
127+ }
128+
129+ BOOST_AUTO_TEST_CASE (electrum__blockchain_transaction_get__genesis_coinbase_verbose_true__expected)
130+ {
131+ BOOST_CHECK (handshake ());
132+
133+ const auto & coinbase = *genesis.transactions_ptr ()->front ();
134+ const auto tx_hash = encode_hash (coinbase.hash (false ));
135+ const auto request = R"( {"id":83,"method":"blockchain.transaction.get","params":["%1%",true]})" " \n " ;
136+ const auto response = get ((boost::format (request) % tx_hash).str ());
137+ BOOST_CHECK_EQUAL (response.at (" result" ).as_object (), value_from (bitcoind (coinbase)));
138+ }
139+
140+ // blockchain.transaction.get_merkle
141+ // blockchain.transaction.id_from_pos
142+
66143BOOST_AUTO_TEST_SUITE_END ()
0 commit comments