mirror of
https://github.com/planetmint/planetmint.git
synced 2025-06-07 14:46:38 +00:00

* assets changes * fixed init db code Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed some other test cases Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * Fixed 1/3 from test_queries.py * test_queries.py ALL PASSED * removed junk comment * test_schema.py fixed * added funcationilty to init a DB in case it hasn't been initialized before Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed test_schema.py * last commit * fixed some minor bugs Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * test_schema.py ALL PASSING + changes in TarantoolDB Class * test_schema.py ALL PASSING + changes in TarantoolDB Class * commit err * fixed asset issues Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed assets handling Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed missing Config().get() migrations Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed unit test error in case tx id is not defined Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed some minor bugs Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * simplified return of metadata Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * reconnect function added to reset_database if statement * removed some print * fixed TX compose bug about threshold information Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed usage of from_db part 1 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed tarantool/tendermint status management Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed some backend init issues and error handling Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed output public_keys order bug Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed deepcopy bug and another small assignment bug Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * s * fixed last asset bug Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * merge * fixed another set of tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed test_core.py by converting dict transaction to Transaction Object * fixed delete_transaction function Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * commit * pre_commit_state singledispatch issue * fixed global variable of backend * fixed backend problem with command make tests * args_reset_db added, fixed error with incorrect handling of kwargs * test_validator passing * fixed test_core.py by adding HDict in saved_key_orders function * fixed pre_commiT-state bug * init chain recoginez function fixed . * fixed last error from tendermint/test_core.py * tendermint/test_core.py all passing * fixed function from fast_query.py, problem was in deleteting functions * fixed error from test_fastquery.py, by chaning the algorithm of verifying returnred transactions id * fixed test_core.py by adding HDict in saved_key_orders function Signed-off-by: Sangat Das <sangatdas5@gmail.com> * Fix make test issue - unhealthy planetmint container because non-init of tarantool spaces Signed-off-by: Sangat Das <sangatdas5@gmail.com> * Fix tarantool connection issues in test Signed-off-by: Sangat Das <sangatdas5@gmail.com> * _save_keys_order, changes behaviour * hash problem fixed * separated asset test fixed * Removed all Errors in Make Test Signed-off-by: Sangat Das <sangatdas5@gmail.com> * mock error solved * mock solved * problem with stdout from Popen * fixed output from calling subprocess * Now planetmint drop and planemint init, is working throught schema.py file. * Fixed some lib and web issues Signed-off-by: Sangat Das <sangatdas5@gmail.com> * test_lib test_update_utxoset passing * test_commands.py -> all tests are passing * test_queries.py -> fixed * rollback my changes * fixed test_quries.py -> problem with assets * test_quries.py -> metadata error fixed * test_bigchain_api -> fixed by adding ErrorHandling for Tarantool operation * test_bigchain_api * test_integration.py -> fixed issue with block object * test_lib.py -> fixed * store and get utxo fixed * NoneType error, fixed in test_lib.py * test_lib.py fixed error, adopting verification for tarantool * test_lib.py fixed one more function * test_store_bulk_transaction -> adopted for tarantool * test_store_transaction -> changed to work with tarantool * test_asset_is_separated_from_transaciton -> skipped for Tarantool connection type * Fixed 4 issues in test/tendermint Signed-off-by: Sangat Das <sangatdas5@gmail.com> * fixed merge issues Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed last misspelling of backend config Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * test_block_tendermint.py -> solved by returning empty list if not found * readded test_core tests, fixed some linter issues Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * last changes * removed test fixture * removed planetmint_env folder Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * .idea/ added to gitignore file * removed .idea/ folder from project * create 3 files. init: indexes, schema, tables(spaces). this is used for initializing space,index and schema separately, and getting an output for specific command * added to schema all execute commands in dictionary format * Added create_tables function for tarantool connection * 'create_database' function from schema file, is ignored using TarantoolDB Class. * Implemented planetmint init via schema.py ! * added execute drop commands for spaces * drop_databases improved * Removed .lua files that was created temporarily. * replaced TarantoolDB with TarantoolDBConnection Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Added output to console for creating indexes. * fixed connection instantiation Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Added exception for NetworkError, to get specific error from connection class. * _setup_database fixture restored.(STILL NOT WORKING in this commit) * added 'universe' name as database name for tarantool * created flush_db for tarantool connection type * function create_database will call create_tables only for tarantool connection * _bdb, setup_database restored as it was before * Fixed flush_dbtarantool * Fixed fatal crashing at beginning of starting planetmint. problem was solved by returning None value if where is no space. * adding try except to some queries from tarantool/query.py. * implemented decorator for running queries in try catch * removed import of interface * Removed print + removed import of interface directly * removed importing of interface * fixed some imports, refactored TarantoolDBConnection.conn handling Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added new requirement to setup.py * added query() method, that will return Lazy Object * removed unecessary comments from connection class * get_space method is the same as old space method. * Added run() method to TarantoolDBConnection Class. * tarantool/query.py changed for using Lazy() implementation + little changes * queries from tarantool/query.py was adjusted to not get NonType error * adjusted some function calls, and connection calls Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixes for error NoneType * fix for flush function (freezing of pytest) + NoneType error * store_transactions changed to use new format of query * Changed from .space() method to .get_space() * putted from new line * fixed Lazy() has no len * adjusted _group_transaction_by_ids and store_transactions for connection.run Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed .data from select queries Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed run_command_without_output config and removed faulty error handling Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * made rollback db agnostic * Added assign for pre_commit * resolved comments and clean-up of unused code * Fixed no attribute .run(). Fixed | Fixed no attribute .data * Fixed no atribute .data * Fixed list has no attribute .data * Removed comments * Fixed flush_db_tarantool, not it removes also from blocks spaces * Fixed test_queries.py PASSED * Fixed SystemExit error by inversing sorting of array * Cleaned up test_core.py * fixed upsert() functions, incorrect behaviour * removed unused print * removed unused print (2) * Fixed test_txlist.py by improving flush_db_tarantool * Small fixes in .upsert() functions for tarantool_db * Fixes some test cases in tendermint/test_lib.py * Fixed flush_tarantool_db Function. * added utxos to SPACE_NAMES to delete data from utxo space * fixed this module by restoring original function instructions. * added hash generation to create primary key for abci_chain tuple. * Added field 'id' to abci_chains * changed flush function to delete abci_chains tuples * added indexed_pattern_search to basic lua, implemented text_search Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted some queries, wip print statements to be removed Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed get_metadata Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added some prints and simplified code Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed __asset_check Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed print statements Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added limit to text_Search Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Planetmint tarantool (#152) * added indexed_pattern_search to basic lua, implemented text_search Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted some queries, wip print statements to be removed Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed get_metadata Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added some prints and simplified code Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed __asset_check Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed print statements Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added limit to text_Search Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted store_asset behaviour to match mongodb implementation Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed test_write_metadata test case Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed pattern search for meta_data Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed text_search result conversion Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * adjusted connect config error handling and test case for new signature Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Resolved issues related to key error * Added convert.py for storing interfaces * Added convert.py implementation for tarantool * Implemented to lib.py, functions from converted.py * Added initializing for convert.py * init of convert.py for mongodb implementation * implemented convert.py for mongodatabase [NOT TESTED] * adjusted get_assets and from_db for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added comment Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fix get_assets issue (#160) * adjusted get_assets and from_db for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added comment Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * resolve conflicts * docker all in one now install tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added user to integration init.lua Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated integration test setup for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed print statements Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated changelog Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed error messaging Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed exception verification Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed printing of testdata Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * Planetmint tarantool (#169) * 31 restructue documentation (#138) * removed korean documentation Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed CN and KOR readme Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * changed to the press theme Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * first changes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixe H3 vs H1 issues Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added missing png Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added missing file Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed warnings Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * moved documents Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolete files Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolete folder Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obs. file Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added some final changes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obs. reference Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * moved chain migration to election types (#109) Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Final zenroom (#147) * zenroom fixes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * expl. defined the aiohttp package Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version number and fixed a zenroom runtime bug Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added fialing zenroom tx signing test Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * extended test to pass zenrooom validation, but to fail planetmint validation. Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added manual tx crafting Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added zenroom fulfillment verification Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * the last mile before integration Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * zenroom unit tests are passing Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * simplified zenroom unit tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolte lines from the zenroom tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed acceptance tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * adjusted zenroom integraiton tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed linting errors Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * simplified zenroom unit test Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version number Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * using cryptoconditions without print message Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased cc usage to 0.9.9 readded daemon proceses Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version to 0.9.6 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed deployment issue for 0.9.6 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * adjusted get_assets and from_db for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added comment Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * improve usability of zenroom (#159) * improve usability of zenroom * * increased version * fixed test cases * added changelog Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com> * migrated to AGPLv3 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * 150 add cryptoconditions documentation (#166) * added smaller logos fixed reference issue Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed some erros and typos Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added cryptoconditions reference to the subproject Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * docker all in one now install tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added user to integration init.lua Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated integration test setup for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed print statements Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated changelog Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed error messaging Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed exception verification Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed printing of testdata Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> Co-authored-by: Jürgen Eckel <eckelj@users.noreply.github.com> Co-authored-by: Lorenz Herzberger <64837895+LaurentDeMontBlanc@users.noreply.github.com> Co-authored-by: Alberto Lerda <30939098+albertolerda@users.noreply.github.com> Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com> * Removing naughty strings test cases * updated quickstart with tarantool installation Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated all-in-one-planetmint with tarantool port and data persistence Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed typo Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * update documentation about tarantool (#174) * 31 restructue documentation (#138) * removed korean documentation Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed CN and KOR readme Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * changed to the press theme Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * first changes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixe H3 vs H1 issues Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added missing png Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added missing file Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed warnings Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * moved documents Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolete files Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolete folder Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obs. file Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added some final changes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obs. reference Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * moved chain migration to election types (#109) Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * Final zenroom (#147) * zenroom fixes Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * expl. defined the aiohttp package Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version number and fixed a zenroom runtime bug Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added fialing zenroom tx signing test Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * extended test to pass zenrooom validation, but to fail planetmint validation. Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added manual tx crafting Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added zenroom fulfillment verification Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * the last mile before integration Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * zenroom unit tests are passing Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * simplified zenroom unit tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * removed obsolte lines from the zenroom tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed acceptance tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * adjusted zenroom integraiton tests Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed linting errors Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * simplified zenroom unit test Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version number Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * using cryptoconditions without print message Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased cc usage to 0.9.9 readded daemon proceses Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * increased version to 0.9.6 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed deployment issue for 0.9.6 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * adjusted get_assets and from_db for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added comment Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * improve usability of zenroom (#159) * improve usability of zenroom * * increased version * fixed test cases * added changelog Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com> * migrated to AGPLv3 Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * 150 add cryptoconditions documentation (#166) * added smaller logos fixed reference issue Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed some erros and typos Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * added cryptoconditions reference to the subproject Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * docker all in one now install tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * added user to integration init.lua Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated integration test setup for tarantool Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * removed print statements Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated changelog Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed error messaging Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed exception verification Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * fixed printing of testdata Signed-off-by: Jürgen Eckel <juergen@riddleandcode.com> * updated quickstart with tarantool installation Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * updated all-in-one-planetmint with tarantool port and data persistence Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> * fixed typo Signed-off-by: Lorenz Herzberger <lorenzherzberger@gmail.com> Co-authored-by: Jürgen Eckel <eckelj@users.noreply.github.com> Co-authored-by: Lorenz Herzberger <64837895+LaurentDeMontBlanc@users.noreply.github.com> Co-authored-by: Alberto Lerda <30939098+albertolerda@users.noreply.github.com> Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com> * Fixes lint issues (#176) * Resolved lint issues * resolved other lint issues Co-authored-by: Jürgen Eckel <juergen@riddleandcode.com> Co-authored-by: andrei <deffuls@debian-BULLSEYE-live-builder-AMD64> Co-authored-by: Sangat Das <sangatdas5@gmail.com> Co-authored-by: liviu-lesan <31960632+liviu-lesan@users.noreply.github.com> Co-authored-by: Lorenz Herzberger <64837895+LaurentDeMontBlanc@users.noreply.github.com> Co-authored-by: andreitricolici <97448537+andreitricolici@users.noreply.github.com> Co-authored-by: ArpitShukla007 <arpitnshukla@gmail.com> Co-authored-by: Jürgen Eckel <eckelj@users.noreply.github.com> Co-authored-by: Alberto Lerda <30939098+albertolerda@users.noreply.github.com>
643 lines
24 KiB
Python
643 lines
24 KiB
Python
# Copyright © 2020 Interplanetary Database Association e.V.,
|
|
# Planetmint and IPDB software contributors.
|
|
# SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0)
|
|
# Code is Apache-2.0 and docs are CC-BY-4.0
|
|
|
|
import json
|
|
import logging
|
|
|
|
from unittest.mock import Mock, patch
|
|
from argparse import Namespace
|
|
|
|
import pytest
|
|
|
|
from planetmint.config import Config
|
|
from planetmint import ValidatorElection
|
|
from planetmint.commands.planetmint import run_election_show
|
|
from planetmint.transactions.types.elections.election import Election
|
|
from planetmint.lib import Block
|
|
from planetmint.transactions.types.elections.chain_migration_election import ChainMigrationElection
|
|
|
|
from tests.utils import generate_election, generate_validators
|
|
|
|
def test_make_sure_we_dont_remove_any_command():
|
|
# thanks to: http://stackoverflow.com/a/18161115/597097
|
|
from planetmint.commands.planetmint import create_parser
|
|
|
|
parser = create_parser()
|
|
|
|
assert parser.parse_args(['configure', 'tarantool_db']).command
|
|
assert parser.parse_args(['show-config']).command
|
|
assert parser.parse_args(['init']).command
|
|
assert parser.parse_args(['drop']).command
|
|
assert parser.parse_args(['start']).command
|
|
assert parser.parse_args(['election', 'new', 'upsert-validator', 'TEMP_PUB_KEYPAIR', '10', 'TEMP_NODE_ID',
|
|
'--private-key', 'TEMP_PATH_TO_PRIVATE_KEY']).command
|
|
assert parser.parse_args(['election', 'new', 'chain-migration',
|
|
'--private-key', 'TEMP_PATH_TO_PRIVATE_KEY']).command
|
|
assert parser.parse_args(['election', 'approve', 'ELECTION_ID', '--private-key',
|
|
'TEMP_PATH_TO_PRIVATE_KEY']).command
|
|
assert parser.parse_args(['election', 'show', 'ELECTION_ID']).command
|
|
assert parser.parse_args(['tendermint-version']).command
|
|
|
|
|
|
@patch('planetmint.commands.utils.start')
|
|
def test_main_entrypoint(mock_start):
|
|
from planetmint.commands.planetmint import main
|
|
main()
|
|
|
|
assert mock_start.called
|
|
|
|
|
|
@patch('planetmint.log.setup_logging')
|
|
@patch('planetmint.commands.planetmint._run_init')
|
|
@patch('planetmint.config_utils.autoconfigure')
|
|
def test_bigchain_run_start(mock_setup_logging, mock_run_init,
|
|
mock_autoconfigure, mock_processes_start):
|
|
from planetmint.commands.planetmint import run_start
|
|
args = Namespace(config=None, yes=True,
|
|
skip_initialize_database=False)
|
|
run_start(args)
|
|
assert mock_setup_logging.called
|
|
|
|
|
|
# TODO Please beware, that if debugging, the "-s" switch for pytest will
|
|
# interfere with capsys.
|
|
# See related issue: https://github.com/pytest-dev/pytest/issues/128
|
|
@pytest.mark.usefixtures('ignore_local_config_file')
|
|
def test_bigchain_show_config(capsys):
|
|
from planetmint.commands.planetmint import run_show_config
|
|
|
|
args = Namespace(config=None)
|
|
_, _ = capsys.readouterr()
|
|
run_show_config(args)
|
|
output_config = json.loads(capsys.readouterr()[0])
|
|
sorted_output_config = json.dumps(output_config, indent=4, sort_keys=True)
|
|
print(f"config : {sorted_output_config}")
|
|
# Note: This test passed previously because we were always
|
|
# using the default configuration parameters, but since we
|
|
# are running with docker-compose now and expose parameters like
|
|
# PLANETMINT_SERVER_BIND, PLANETMINT_WSSERVER_HOST, PLANETMINT_WSSERVER_ADVERTISED_HOST
|
|
# the default comparison fails i.e. when config is imported at the beginning the
|
|
# dict returned is different that what is expected after run_show_config
|
|
# and run_show_config updates the planetmint.config
|
|
from planetmint.config import Config
|
|
_config = Config().get()
|
|
sorted_config = json.dumps(_config, indent=4, sort_keys=True)
|
|
print(f"_config : {sorted_config}")
|
|
# del sorted_config['CONFIGURED']
|
|
assert sorted_output_config == sorted_config
|
|
|
|
|
|
def test__run_init(mocker):
|
|
init_db_mock = mocker.patch(
|
|
'planetmint.backend.tarantool.connection.TarantoolDBConnection.init_database')
|
|
|
|
from planetmint.backend.connection import connect
|
|
|
|
conn = connect()
|
|
conn.init_database()
|
|
|
|
init_db_mock.assert_called_once_with()
|
|
|
|
|
|
@patch('planetmint.backend.schema.drop_database')
|
|
def test_drop_db_when_assumed_yes(mock_db_drop):
|
|
from planetmint.commands.planetmint import run_drop
|
|
args = Namespace(config=None, yes=True)
|
|
|
|
run_drop(args)
|
|
assert mock_db_drop.called
|
|
|
|
|
|
@patch('planetmint.backend.schema.drop_database')
|
|
def test_drop_db_when_interactive_yes(mock_db_drop, monkeypatch):
|
|
from planetmint.commands.planetmint import run_drop
|
|
args = Namespace(config=None, yes=False)
|
|
monkeypatch.setattr(
|
|
'planetmint.commands.planetmint.input_on_stderr', lambda x: 'y')
|
|
|
|
run_drop(args)
|
|
assert mock_db_drop.called
|
|
|
|
|
|
@patch('planetmint.backend.schema.drop_database')
|
|
def test_drop_db_when_db_does_not_exist(mock_db_drop, capsys):
|
|
from planetmint.transactions.common.exceptions import DatabaseDoesNotExist
|
|
from planetmint.commands.planetmint import run_drop
|
|
|
|
args = Namespace(config=None, yes=True)
|
|
mock_db_drop.side_effect = DatabaseDoesNotExist
|
|
|
|
run_drop(args)
|
|
output_message = capsys.readouterr()[1]
|
|
assert output_message == "Drop was executed, but spaces doesn't exist.\n"
|
|
# assert output_message == "Cannot drop '{name}'. The database does not exist.\n".format(
|
|
# name=Config().get()['database']['name'])
|
|
|
|
|
|
@patch('planetmint.backend.schema.drop_database')
|
|
def test_drop_db_does_not_drop_when_interactive_no(mock_db_drop, monkeypatch):
|
|
from planetmint.commands.planetmint import run_drop
|
|
args = Namespace(config=None, yes=False)
|
|
monkeypatch.setattr(
|
|
'planetmint.commands.planetmint.input_on_stderr', lambda x: 'n')
|
|
|
|
run_drop(args)
|
|
assert not mock_db_drop.called
|
|
|
|
|
|
# TODO Beware if you are putting breakpoints in there, and using the '-s'
|
|
# switch with pytest. It will just hang. Seems related to the monkeypatching of
|
|
# input_on_stderr.
|
|
def test_run_configure_when_config_does_not_exist(monkeypatch,
|
|
mock_write_config,
|
|
mock_generate_key_pair,
|
|
mock_planetmint_backup_config):
|
|
from planetmint.commands.planetmint import run_configure
|
|
monkeypatch.setattr('os.path.exists', lambda path: False)
|
|
monkeypatch.setattr('builtins.input', lambda: '\n')
|
|
args = Namespace(config=None, backend='localmongodb', yes=True)
|
|
return_value = run_configure(args)
|
|
assert return_value is None
|
|
|
|
|
|
def test_run_configure_when_config_does_exist(monkeypatch,
|
|
mock_write_config,
|
|
mock_generate_key_pair,
|
|
mock_planetmint_backup_config):
|
|
value = {}
|
|
|
|
def mock_write_config(newconfig):
|
|
value['return'] = newconfig
|
|
|
|
from planetmint.commands.planetmint import run_configure
|
|
monkeypatch.setattr('os.path.exists', lambda path: True)
|
|
monkeypatch.setattr('builtins.input', lambda: '\n')
|
|
monkeypatch.setattr(
|
|
'planetmint.config_utils.write_config', mock_write_config)
|
|
|
|
args = Namespace(config=None, yes=None)
|
|
run_configure(args)
|
|
assert value == {}
|
|
|
|
|
|
@pytest.mark.skip
|
|
@pytest.mark.parametrize('backend', (
|
|
'localmongodb',
|
|
))
|
|
def test_run_configure_with_backend(backend, monkeypatch, mock_write_config):
|
|
import planetmint
|
|
from planetmint.commands.planetmint import run_configure
|
|
|
|
value = {}
|
|
|
|
def mock_write_config(new_config, filename=None):
|
|
value['return'] = new_config
|
|
|
|
monkeypatch.setattr('os.path.exists', lambda path: False)
|
|
monkeypatch.setattr('builtins.input', lambda: '\n')
|
|
monkeypatch.setattr('planetmint.config_utils.write_config',
|
|
mock_write_config)
|
|
|
|
args = Namespace(config=None, backend=backend, yes=True)
|
|
expected_config = Config().get()
|
|
run_configure(args)
|
|
|
|
# update the expected config with the correct backend and keypair
|
|
backend_conf = getattr(planetmint, '_database_' + backend)
|
|
expected_config.update({'database': backend_conf,
|
|
'keypair': value['return']['keypair']})
|
|
|
|
assert value['return'] == expected_config
|
|
|
|
|
|
@patch('planetmint.commands.utils.start')
|
|
def test_calling_main(start_mock, monkeypatch):
|
|
from planetmint.commands.planetmint import main
|
|
|
|
argparser_mock = Mock()
|
|
parser = Mock()
|
|
subparsers = Mock()
|
|
subsubparsers = Mock()
|
|
subparsers.add_parser.return_value = subsubparsers
|
|
parser.add_subparsers.return_value = subparsers
|
|
argparser_mock.return_value = parser
|
|
monkeypatch.setattr('argparse.ArgumentParser', argparser_mock)
|
|
main()
|
|
|
|
assert argparser_mock.called is True
|
|
parser.add_subparsers.assert_called_with(title='Commands',
|
|
dest='command')
|
|
subparsers.add_parser.assert_any_call('configure',
|
|
help='Prepare the config file.')
|
|
subparsers.add_parser.assert_any_call('show-config',
|
|
help='Show the current '
|
|
'configuration')
|
|
subparsers.add_parser.assert_any_call('init', help='Init the database')
|
|
subparsers.add_parser.assert_any_call('drop', help='Drop the database')
|
|
|
|
subparsers.add_parser.assert_any_call('start', help='Start Planetmint')
|
|
subparsers.add_parser.assert_any_call('tendermint-version',
|
|
help='Show the Tendermint supported '
|
|
'versions')
|
|
|
|
assert start_mock.called is True
|
|
|
|
|
|
@patch('planetmint.commands.planetmint.run_recover')
|
|
@patch('planetmint.start.start')
|
|
def test_recover_db_on_start(mock_run_recover,
|
|
mock_start,
|
|
mocked_setup_logging):
|
|
from planetmint.commands.planetmint import run_start
|
|
args = Namespace(config=None, yes=True,
|
|
skip_initialize_database=False)
|
|
run_start(args)
|
|
|
|
assert mock_run_recover.called
|
|
assert mock_start.called
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_run_recover(b, alice, bob):
|
|
from planetmint.commands.planetmint import run_recover
|
|
from planetmint.transactions.types.assets.create import Create
|
|
from planetmint.lib import Block
|
|
from planetmint.backend import query
|
|
|
|
tx1 = Create.generate([alice.public_key],
|
|
[([alice.public_key], 1)],
|
|
asset={'cycle': 'hero'},
|
|
metadata={'name': 'hohenheim'}) \
|
|
.sign([alice.private_key])
|
|
tx2 = Create.generate([bob.public_key],
|
|
[([bob.public_key], 1)],
|
|
asset={'cycle': 'hero'},
|
|
metadata={'name': 'hohenheim'}) \
|
|
.sign([bob.private_key])
|
|
print(tx1.id)
|
|
print(tx2.id)
|
|
# store the transactions
|
|
b.store_bulk_transactions([tx1, tx2])
|
|
|
|
# create a random block
|
|
block8 = Block(app_hash='random_app_hash1', height=8,
|
|
transactions=['txid_doesnt_matter'])._asdict()
|
|
b.store_block(block8)
|
|
|
|
# create the next block
|
|
block9 = Block(app_hash='random_app_hash1', height=9,
|
|
transactions=[tx1.id])._asdict()
|
|
b.store_block(block9)
|
|
|
|
# create a pre_commit state which is ahead of the commit state
|
|
pre_commit_state = dict(height=10, transactions=[tx2.id])
|
|
b.store_pre_commit_state(pre_commit_state)
|
|
|
|
run_recover(b)
|
|
|
|
assert not query.get_transaction(b.connection, tx2.id)
|
|
|
|
|
|
# Helper
|
|
class MockResponse():
|
|
|
|
def __init__(self, height):
|
|
self.height = height
|
|
|
|
def json(self):
|
|
return {'result': {'latest_block_height': self.height}}
|
|
|
|
|
|
@pytest.mark.abci
|
|
def test_election_new_upsert_validator_with_tendermint(b, priv_validator_path, user_sk, validators):
|
|
from planetmint.commands.planetmint import run_election_new_upsert_validator
|
|
|
|
new_args = Namespace(action='new',
|
|
election_type='upsert-validator',
|
|
public_key='HHG0IQRybpT6nJMIWWFWhMczCLHt6xcm7eP52GnGuPY=',
|
|
power=1,
|
|
node_id='unique_node_id_for_test_upsert_validator_new_with_tendermint',
|
|
sk=priv_validator_path,
|
|
config={})
|
|
|
|
election_id = run_election_new_upsert_validator(new_args, b)
|
|
|
|
assert b.get_transaction(election_id)
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_election_new_upsert_validator_without_tendermint(caplog, b, priv_validator_path, user_sk):
|
|
from planetmint.commands.planetmint import run_election_new_upsert_validator
|
|
|
|
def mock_write(tx, mode):
|
|
b.store_bulk_transactions([tx])
|
|
return (202, '')
|
|
|
|
b.get_validators = mock_get_validators
|
|
b.write_transaction = mock_write
|
|
|
|
args = Namespace(action='new',
|
|
election_type='upsert-validator',
|
|
public_key='CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg=',
|
|
power=1,
|
|
node_id='fb7140f03a4ffad899fabbbf655b97e0321add66',
|
|
sk=priv_validator_path,
|
|
config={})
|
|
|
|
with caplog.at_level(logging.INFO):
|
|
election_id = run_election_new_upsert_validator(args, b)
|
|
assert caplog.records[0].msg == '[SUCCESS] Submitted proposal with id: ' + election_id
|
|
assert b.get_transaction(election_id)
|
|
|
|
|
|
@pytest.mark.abci
|
|
def test_election_new_chain_migration_with_tendermint(b, priv_validator_path, user_sk, validators):
|
|
from planetmint.commands.planetmint import run_election_new_chain_migration
|
|
|
|
new_args = Namespace(action='new',
|
|
election_type='migration',
|
|
sk=priv_validator_path,
|
|
config={})
|
|
|
|
election_id = run_election_new_chain_migration(new_args, b)
|
|
|
|
assert b.get_transaction(election_id)
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_election_new_chain_migration_without_tendermint(caplog, b, priv_validator_path, user_sk):
|
|
from planetmint.commands.planetmint import run_election_new_chain_migration
|
|
|
|
def mock_write(tx, mode):
|
|
b.store_bulk_transactions([tx])
|
|
return (202, '')
|
|
|
|
b.get_validators = mock_get_validators
|
|
b.write_transaction = mock_write
|
|
|
|
args = Namespace(action='new',
|
|
election_type='migration',
|
|
sk=priv_validator_path,
|
|
config={})
|
|
|
|
with caplog.at_level(logging.INFO):
|
|
election_id = run_election_new_chain_migration(args, b)
|
|
assert caplog.records[0].msg == '[SUCCESS] Submitted proposal with id: ' + election_id
|
|
assert b.get_transaction(election_id)
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_election_new_upsert_validator_invalid_election(caplog, b, priv_validator_path, user_sk):
|
|
from planetmint.commands.planetmint import run_election_new_upsert_validator
|
|
|
|
args = Namespace(action='new',
|
|
election_type='upsert-validator',
|
|
public_key='CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg=',
|
|
power=10,
|
|
node_id='fb7140f03a4ffad899fabbbf655b97e0321add66',
|
|
sk='/tmp/invalid/path/key.json',
|
|
config={})
|
|
|
|
with caplog.at_level(logging.ERROR):
|
|
assert not run_election_new_upsert_validator(args, b)
|
|
assert caplog.records[0].msg.__class__ == FileNotFoundError
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_election_new_upsert_validator_invalid_power(caplog, b, priv_validator_path, user_sk):
|
|
from planetmint.commands.planetmint import run_election_new_upsert_validator
|
|
from planetmint.transactions.common.exceptions import InvalidPowerChange
|
|
|
|
def mock_write(tx, mode):
|
|
b.store_bulk_transactions([tx])
|
|
return (400, '')
|
|
|
|
b.write_transaction = mock_write
|
|
b.get_validators = mock_get_validators
|
|
args = Namespace(action='new',
|
|
election_type='upsert-validator',
|
|
public_key='CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg=',
|
|
power=10,
|
|
node_id='fb7140f03a4ffad899fabbbf655b97e0321add66',
|
|
sk=priv_validator_path,
|
|
config={})
|
|
|
|
with caplog.at_level(logging.ERROR):
|
|
assert not run_election_new_upsert_validator(args, b)
|
|
assert caplog.records[0].msg.__class__ == InvalidPowerChange
|
|
|
|
|
|
@pytest.mark.abci
|
|
def test_election_approve_with_tendermint(b, priv_validator_path, user_sk, validators):
|
|
from planetmint.commands.planetmint import (run_election_new_upsert_validator,
|
|
run_election_approve)
|
|
|
|
public_key = 'CJxdItf4lz2PwEf4SmYNAu/c/VpmX39JEgC5YpH7fxg='
|
|
new_args = Namespace(action='new',
|
|
election_type='upsert-validator',
|
|
public_key=public_key,
|
|
power=1,
|
|
node_id='fb7140f03a4ffad899fabbbf655b97e0321add66',
|
|
sk=priv_validator_path,
|
|
config={})
|
|
|
|
election_id = run_election_new_upsert_validator(new_args, b)
|
|
assert election_id
|
|
|
|
args = Namespace(action='approve',
|
|
election_id=election_id,
|
|
sk=priv_validator_path,
|
|
config={})
|
|
approve = run_election_approve(args, b)
|
|
|
|
assert b.get_transaction(approve)
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_election_approve_without_tendermint(caplog, b, priv_validator_path, new_validator, node_key):
|
|
from planetmint.commands.planetmint import run_election_approve
|
|
from argparse import Namespace
|
|
|
|
b, election_id = call_election(b, new_validator, node_key)
|
|
|
|
# call run_election_approve with args that point to the election
|
|
args = Namespace(action='approve',
|
|
election_id=election_id,
|
|
sk=priv_validator_path,
|
|
config={})
|
|
|
|
# assert returned id is in the db
|
|
with caplog.at_level(logging.INFO):
|
|
approval_id = run_election_approve(args, b)
|
|
assert caplog.records[0].msg == '[SUCCESS] Your vote has been submitted'
|
|
assert b.get_transaction(approval_id)
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_election_approve_failure(caplog, b, priv_validator_path, new_validator, node_key):
|
|
from planetmint.commands.planetmint import run_election_approve
|
|
from argparse import Namespace
|
|
|
|
b, election_id = call_election(b, new_validator, node_key)
|
|
|
|
def mock_write(tx, mode):
|
|
b.store_bulk_transactions([tx])
|
|
return (400, '')
|
|
|
|
b.write_transaction = mock_write
|
|
|
|
# call run_upsert_validator_approve with args that point to the election
|
|
args = Namespace(action='approve',
|
|
election_id=election_id,
|
|
sk=priv_validator_path,
|
|
config={})
|
|
|
|
with caplog.at_level(logging.ERROR):
|
|
assert not run_election_approve(args, b)
|
|
assert caplog.records[0].msg == 'Failed to commit vote'
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_election_approve_called_with_bad_key(caplog, b, bad_validator_path, new_validator, node_key):
|
|
from planetmint.commands.planetmint import run_election_approve
|
|
from argparse import Namespace
|
|
|
|
b, election_id = call_election(b, new_validator, node_key)
|
|
|
|
# call run_upsert_validator_approve with args that point to the election, but a bad signing key
|
|
args = Namespace(action='approve',
|
|
election_id=election_id,
|
|
sk=bad_validator_path,
|
|
config={})
|
|
|
|
with caplog.at_level(logging.ERROR):
|
|
assert not run_election_approve(args, b)
|
|
assert caplog.records[0].msg == 'The key you provided does not match any of ' \
|
|
'the eligible voters in this election.'
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_chain_migration_election_show_shows_inconclusive(b):
|
|
validators = generate_validators([1] * 4)
|
|
b.store_validator_set(1, [v['storage'] for v in validators])
|
|
|
|
public_key = validators[0]['public_key']
|
|
private_key = validators[0]['private_key']
|
|
voter_keys = [v['private_key'] for v in validators]
|
|
|
|
election, votes = generate_election(b,
|
|
ChainMigrationElection,
|
|
public_key, private_key,
|
|
{},
|
|
voter_keys)
|
|
|
|
assert not run_election_show(Namespace(election_id=election.id), b)
|
|
|
|
Election.process_block(b, 1, [election])
|
|
b.store_bulk_transactions([election])
|
|
|
|
assert run_election_show(Namespace(election_id=election.id), b) == \
|
|
'status=ongoing'
|
|
|
|
b.store_block(Block(height=1, transactions=[], app_hash='')._asdict())
|
|
b.store_validator_set(2, [v['storage'] for v in validators])
|
|
|
|
assert run_election_show(Namespace(election_id=election.id), b) == \
|
|
'status=ongoing'
|
|
|
|
b.store_block(Block(height=2, transactions=[], app_hash='')._asdict())
|
|
# TODO insert yet another block here when upgrading to Tendermint 0.22.4.
|
|
|
|
assert run_election_show(Namespace(election_id=election.id), b) == \
|
|
'status=inconclusive'
|
|
|
|
|
|
@pytest.mark.bdb
|
|
def test_chain_migration_election_show_shows_concluded(b):
|
|
validators = generate_validators([1] * 4)
|
|
b.store_validator_set(1, [v['storage'] for v in validators])
|
|
|
|
public_key = validators[0]['public_key']
|
|
private_key = validators[0]['private_key']
|
|
voter_keys = [v['private_key'] for v in validators]
|
|
|
|
election, votes = generate_election(b,
|
|
ChainMigrationElection,
|
|
public_key, private_key,
|
|
{},
|
|
voter_keys)
|
|
|
|
assert not run_election_show(Namespace(election_id=election.id), b)
|
|
|
|
b.store_bulk_transactions([election])
|
|
Election.process_block(b, 1, [election])
|
|
|
|
assert run_election_show(Namespace(election_id=election.id), b) == \
|
|
'status=ongoing'
|
|
|
|
b.store_abci_chain(1, 'chain-X')
|
|
b.store_block(Block(height=1,
|
|
transactions=[v.id for v in votes],
|
|
app_hash='last_app_hash')._asdict())
|
|
Election.process_block(b, 2, votes)
|
|
|
|
assert run_election_show(Namespace(election_id=election.id), b) == \
|
|
f'''status=concluded
|
|
chain_id=chain-X-migrated-at-height-1
|
|
app_hash=last_app_hash
|
|
validators=[{''.join([f"""
|
|
{{
|
|
"pub_key": {{
|
|
"type": "tendermint/PubKeyEd25519",
|
|
"value": "{v['public_key']}"
|
|
}},
|
|
"power": {v['storage']['voting_power']}
|
|
}}{',' if i + 1 != len(validators) else ''}""" for i, v in enumerate(validators)])}
|
|
]'''
|
|
|
|
|
|
def test_bigchain_tendermint_version(capsys):
|
|
from planetmint.commands.planetmint import run_tendermint_version
|
|
|
|
args = Namespace(config=None)
|
|
_, _ = capsys.readouterr()
|
|
run_tendermint_version(args)
|
|
output_config = json.loads(capsys.readouterr()[0])
|
|
from planetmint.version import __tm_supported_versions__
|
|
assert len(output_config["tendermint"]) == len(__tm_supported_versions__)
|
|
assert sorted(output_config["tendermint"]) == sorted(__tm_supported_versions__)
|
|
|
|
|
|
def mock_get_validators(height):
|
|
return [
|
|
{'public_key': {'value': "zL/DasvKulXZzhSNFwx4cLRXKkSM9GPK7Y0nZ4FEylM=",
|
|
'type': 'ed25519-base64'},
|
|
'voting_power': 10}
|
|
]
|
|
|
|
|
|
def call_election(b, new_validator, node_key):
|
|
def mock_write(tx, mode):
|
|
b.store_bulk_transactions([tx])
|
|
return (202, '')
|
|
|
|
# patch the validator set. We now have one validator with power 10
|
|
b.get_validators = mock_get_validators
|
|
b.write_transaction = mock_write
|
|
|
|
# our voters is a list of length 1, populated from our mocked validator
|
|
voters = ValidatorElection.recipients(b)
|
|
# and our voter is the public key from the voter list
|
|
voter = node_key.public_key
|
|
valid_election = ValidatorElection.generate([voter],
|
|
voters,
|
|
new_validator, None).sign([node_key.private_key])
|
|
|
|
# patch in an election with a vote issued to the user
|
|
election_id = valid_election.id
|
|
b.store_bulk_transactions([valid_election])
|
|
|
|
return b, election_id
|