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  }