github.com/igggame/nebulas-go@v2.1.0+incompatible/nbre/test/fs/gtest_blockchain.cpp (about) 1 // Copyright (C) 2018 go-nebulas authors 2 // 3 // This file is part of the go-nebulas library. 4 // 5 // the go-nebulas library is free software: you can redistribute it and/or 6 // modify 7 // it under the terms of the GNU General Public License as published by 8 // the Free Software Foundation, either version 3 of the License, or 9 // (at your option) any later version. 10 // 11 // the go-nebulas library is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 // 16 // You should have received a copy of the GNU General Public License 17 // along with the go-nebulas library. If not, see 18 // <http://www.gnu.org/licenses/>. 19 // 20 #include "fs/blockchain.h" 21 #include "fs/util.h" 22 #include "gtest_common.h" 23 #include <gtest/gtest.h> 24 25 TEST(test_fs, read_blockchain_transcations) { 26 std::string db_path = get_db_path_for_read(); 27 28 neb::fs::bc_storage_session::instance().init(db_path, 29 neb::fs::storage_open_default); 30 31 block_ptr_t block = neb::fs::blockchain::load_block_with_height(1); 32 auto header = block->header(); 33 EXPECT_EQ(header.timestamp(), 0); 34 35 auto txs = block->transactions(); 36 auto tx = txs.begin(); 37 EXPECT_EQ(tx->nonce(), 1); 38 EXPECT_EQ(tx->chain_id(), 1003); 39 40 std::string hash = tx->hash(); 41 std::string hash_hex = neb::string_to_byte(hash).to_hex(); 42 EXPECT_EQ(hash_hex, 43 "f2a9f39bbc01d7063eaf8e703da268c043124a732ddfc69fdcbac79dd071eadd"); 44 45 std::string from = tx->from(); 46 std::string from_base58 = neb::string_to_byte(from).to_base58(); 47 EXPECT_EQ(from_base58, "n1HQb7j3Ctpj5A9sJnfhRwXS549nGPv2EkD"); 48 49 std::string value = tx->value(); 50 std::string value_hex = neb::string_to_byte(value).to_hex(); 51 EXPECT_EQ(value_hex, "00000000000000000000000000000000"); 52 53 std::string price = tx->gas_price(); 54 std::string price_hex = neb::string_to_byte(price).to_hex(); 55 EXPECT_EQ(price.size(), 16); 56 EXPECT_EQ(price_hex.size(), 32); 57 EXPECT_EQ(price_hex, "000000000000000000000000000f4240"); 58 59 auto data = tx->data(); 60 std::string type = data.type(); 61 EXPECT_EQ(type, "binary"); 62 63 std::string payload = data.payload(); 64 std::string payload_base64 = neb::string_to_byte(payload).to_base58(); 65 std::string want_base64( 66 "98b9sMCBs5NGM8ryDcbAtRXDWDeZ8t62hAJjPxVTE6Pk4fWBFT9FUYJwSjZgMd19T9DUsFRb" 67 "VbtMwtVNrALuTL6Sw4zkrhDMsHfQbSrSdmV6HmcwXWMLF93K52C8brF3yp8LxUkog4cYn9fy" 68 "XYyfdaCtAjVfFrhwG47FcXRpFALo7vqeuQxqv48YZfQMwntiZbEb1KWYbQskEZVCvr2VFoYS" 69 "mKqKPYK1Qh8s6KnzwstGtLiegSfRvjCpPSgVSksbUFjsa49mhkoarQ86vr6if7y9Hq5pmbfS" 70 "B8ot8dw38g4z7UXCXiGzQMdbsig8Z1cggCz4E6TyKhc5dSN9eiHGgyLJC32FtHFvkgY1yjVt" 71 "cCpL9YKEE3ic19xiYdNUsMhWrXmRmbqZVV17DyFWLeUc5R9Zq9kQtMZ1jPtbjXA8rK9Zv8zL" 72 "ebBpnP6ZBS39bJcRhidY8W86a7rMSi7t7CWAZbc6sEmDENqaFHEhydmBgQNkqnHAzVZzqdWX" 73 "rS3bVSJ1Z9ejuwzHExbEhWxmQZZrthbhZnniZpjtPCZ2WL7e5DXjJxjokBwWgehFeZ9riAjS" 74 "3U4shjQtsHr5HoPTwB299WEoAM6sgXMbAjVUdj97ToFCxRk1LfuiSZkjXhNyTVRsNRUWiKJn" 75 "2XS6whpKViZ6qFLRzGY2199aYkAX6LGZM9CrK2jFd89EcHFjy27i6pp82PuGk9a6iAqnpRcv" 76 "jYbk1hHrdxbE5sCzh1r9wWToedKPUeVqoX3gh32Qvgd3Eyiq1i4ZPWe2c76tRLSiqLEmtKRW" 77 "ha5xQY8APE11Rm2uUQagXtUsfvSnWYhJgJBbMStgpCNUG9sK8UCQF6rMyvEGjYr1jwTBzYyE" 78 "gQYD794DaHp6Bt5dCGZfZMsMYGbinV6um1LcKCvwihZmFqbu5KpJ5kg9VKoRNTmJJ3CvmCCr" 79 "UgTxeEysiNcof7JZu7WvxPhdGMZrorS7KqQDFK8Kr5tCG9ffk4sTLMGYwbHeKa9r3WQMz7ME" 80 "CdZ9HUUVgremti3as6hnfqfJy8Tc2ZG47kTPmWonVoCZebaCpNZunqBcSEXdy4DVgy7r96re" 81 "9CU4UXkpToL7GAsUwRSy5pJauLTJXFrqs9hH85jf5omzHK2GPamejE4ibHWio3DK7pXW3ov8" 82 "nZvYHU438thcSUv3Tgn9RoKqbYmzWDd3Fjp62h9curoHfTymLLeP2y3dx3c6NGyauR6hNRkX" 83 "sddu9KzitfPxw43X9YbQqgRYFsavzxtC5WkACxjxU4sGNK7DvobUo6mHfrz8FyBYziYisPKJ" 84 "dRxwt3EwbAY2mrda7Dimr5N6YN3itia6GF9Z59v3aX4f4Z58NS7CCapzK9yxDdWdLJbZA3Ab" 85 "Ugs6eYx2s1pnBsjVwGLG8UvcRfjTkuLceSbRYcVJGFtNmvKwEpfLYEQbUZXQhaEJj7VgKLCq" 86 "GT6jYRQ8GBWGHm8Vargg2FwiwAoBGRq4E27JMmpZNsPBQSHkp9KcwBwCFYEfGhvaRdHqSeXh" 87 "3iyr55TAE2ptbKJi1HmYuSQ9SZspLaKkmku32JjHoMc98C1eHvTUr7xB3oFQC67wtPH3Xky6" 88 "uck2T2yfEs2nTyHXkvpsbCDacqoJv1mp1wsFeN4d9MCYy5vVizMb57VrSd6PAxnePEitG22D" 89 "DYjfDT4ZxMtD4v14TCA4FpK67ZG1vnHaL2yCJku9jhkGE1JajCKrHG2EVF1UTpnf8EbqWoeN" 90 "Eja9oW8WXzaHSw5YphzngDVMvcsya6ksPU2gdMsqeshmSNafxUYFsMUXarFfhZaR14zoR2Xq" 91 "Lm31UNPefQY8X3owt8yCGsn5LMANBgaU6CJ8TXhLMRMHYHvXAEFygaVek1HiD3nF8UwvRNdq" 92 "uyg2J8EdxbZ2nYCsukqSJby7mvVyunjLjH6KSgM2eZyv86BLZ9hhRj5tHhZzVNVcuynp6WpB" 93 "7tg8johWMNiXLPbAbKXut9vk1KWucKJE5SFWmELpraB4Wk7qr66yMKczyk63Uiv6Xjym92G9" 94 "31ZeiWJV9gn26zDSd56hP9GEFHXkDQU5rkpLdWK83ypkvoPUe1YeTau6pChFjNkQajkcP5qa" 95 "YYhhqpK5KiTirv3WKjp8vEPqZqT3QaHoynQKXGGsag8rATSvAS4YZff6Vsu3xWf11wAjEJHZ" 96 "PZM2c4UVXHwBd99AP1tMuSddqazwYuT4rxV748cRVg7qyY1rYMfXJzyjSLGg9C98GMJUKLFX" 97 "NyV4D1ymSRJPj2BkUnRN3oKAyjRhVyFr6Pe1EYLq3oP3Xk1FAAHQNoRPL39cQjnqXs5v9STp" 98 "cC83N2FSkt4VjnhAEPrXh1xqYhciT2fn5M3JjyQFxg8YGKgJ6JxfwpvMeqeWd7KwGoEBozbf" 99 "4JwKqfyocUPeeVry2QTib3oefrsDgnL4hMEN8NAw8VzMoLyg2qxFUeSUWiMXZ3akFbfcXok4" 100 "eCqJGUh232wGwcrEAVJLscSvm7qdLPLppBCvYrtD3gG8CVG7MtXhs9ujAJB6hJu5woZ426f6" 101 "GMoFKBx5mCYE5yqhaytyMjN1WFcS6DDZH6zknZJjd9GkQgzShNybA3HzhgdhyKG7LqFuh25X" 102 "CBvpjnA49QRL23anTgfasWoT8gPmXSVyNyf9GZXcrXLLgoe6JyNMwxDKYtX7SCyKvpxnxH7i" 103 "c2o3YFDB97ZsaNry7FDejJ2MoKqTvLDh4MkaWQuwARAS3B54zMEVUccpXVSv1xp1jJGEVZbM" 104 "qFRKzrbW1CWntBZ9THH6P39jLCpL2kUH8reiv5U4Bi436S7nbbZ7U1t1mVad1EDE8ex9oezu" 105 "xrdjQRdKXFKcG7HraZfnLaXC5uoME74KcYFcFXjyKfJnHrZpY6AgjYzAzr8b3TmJH8Dbpj" 106 "S"); 107 EXPECT_EQ(payload_base64, want_base64); 108 } 109 110 TEST(test_fs, throw_operation_db) { 111 std::string db_path = get_db_path_for_read(); 112 113 neb::fs::rocksdb_storage rs; 114 rs.open_database(db_path, neb::fs::storage_open_for_readonly); 115 116 EXPECT_THROW(rs.open_database(db_path, neb::fs::storage_open_for_readonly), 117 std::runtime_error); 118 119 rs.close_database(); 120 EXPECT_THROW(rs.open_database("", neb::fs::storage_open_for_readonly), 121 neb::fs::storage_general_failure); 122 123 EXPECT_THROW(rs.get(neb::fs::blockchain::Block_LIB), 124 neb::fs::storage_exception_no_init); 125 126 EXPECT_THROW( 127 rs.put(neb::fs::blockchain::Block_LIB, neb::string_to_byte("xxx")), 128 neb::fs::storage_exception_no_init); 129 130 EXPECT_THROW(rs.del(neb::fs::blockchain::Block_LIB), 131 neb::fs::storage_exception_no_init); 132 133 std::string db_path_readwrite = get_db_path_for_write(); 134 rs.open_database(db_path_readwrite, neb::fs::storage_open_for_readwrite); 135 136 EXPECT_THROW(rs.get("no_exist"), neb::fs::storage_general_failure); 137 } 138 139 140 TEST(test_fs, load_LIB_block) { 141 142 std::string db_path = get_db_path_for_read(); 143 144 neb::fs::bc_storage_session::instance().init(db_path, 145 neb::fs::storage_open_default); 146 std::shared_ptr<corepb::Block> block_ptr = 147 neb::fs::blockchain::load_LIB_block(); 148 149 EXPECT_EQ(block_ptr->height(), 23078); 150 EXPECT_EQ(block_ptr->transactions_size(), 0); 151 152 auto header = block_ptr->header(); 153 auto hash_bytes = neb::string_to_byte(header.hash()); 154 EXPECT_EQ(hash_bytes.to_hex(), 155 "8da918837dfa46c6d689eb3be3dc2eff4dffb6dca8a1027df0eddd0d0597af8f"); 156 EXPECT_EQ(header.timestamp(), 1531895265); 157 EXPECT_EQ(header.chain_id(), 1003); 158 }