mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
New integration tests:
* New tests for autobridging and freeze * Discrepancy detection tests * Don't let Mocha suppress load time errors
This commit is contained in:
committed by
Nik Bougalis
parent
0848e348bb
commit
e14c700c60
177
test/autobridge-test.coffee
Normal file
177
test/autobridge-test.coffee
Normal file
@@ -0,0 +1,177 @@
|
||||
################################### REQUIRES ###################################
|
||||
|
||||
extend = require 'extend'
|
||||
fs = require 'fs'
|
||||
assert = require 'assert'
|
||||
{
|
||||
Amount
|
||||
UInt160
|
||||
Transaction
|
||||
} = require 'ripple-lib'
|
||||
|
||||
|
||||
testutils = require './testutils'
|
||||
{
|
||||
LedgerState
|
||||
LedgerVerifier
|
||||
TestAccount
|
||||
} = require './ledger-state'
|
||||
{
|
||||
beast_configured
|
||||
is_focused_test
|
||||
pretty_json
|
||||
server_setup_teardown
|
||||
skip_or_only
|
||||
str_ends_with
|
||||
submit_for_final
|
||||
} = require './batmans-belt'
|
||||
|
||||
#################################### CONFIG ####################################
|
||||
|
||||
config = testutils.init_config()
|
||||
|
||||
#################################### HELPERS ###################################
|
||||
|
||||
make_offer = (remote, account, pays, gets, flag_or_flags) ->
|
||||
tx = remote.transaction()
|
||||
tx.offer_create(account, pays, gets)
|
||||
tx.set_flags(flag_or_flags) if flag_or_flags?
|
||||
tx
|
||||
|
||||
dump_rpc_script = (ledger_state, test_decl) ->
|
||||
lines = ledger_state.compile_to_rpc_commands()
|
||||
|
||||
# Realias etc ;)
|
||||
# TODO
|
||||
account = test_decl.offer[0]
|
||||
[pays, gets, flags] = test_decl.offer[1..]
|
||||
tx = new Transaction({secrets: {}})
|
||||
tx.offer_create(account, pays, gets)
|
||||
tx.set_flags(flags)
|
||||
|
||||
tx_json = tx.tx_json
|
||||
# Account: account
|
||||
# TransactionType: "OfferCreate"
|
||||
# TakerPays: pays
|
||||
# TakerGets: gets
|
||||
|
||||
lines += "\nbuild/rippled submit #{account} '#{JSON.stringify tx_json}'"
|
||||
lines += "\nbuild/rippled ledger_accept\n"
|
||||
fs.writeFileSync(__dirname + '/../manual-offer-test.sh', lines)
|
||||
|
||||
dump_aliased_ledger = (pre_or_post, ledger_state, done) ->
|
||||
# TODO: generify to post/pre
|
||||
ledger_state.remote.request_ledger 'validated', {full: true}, (e, m) ->
|
||||
ledger_dump = ledger_state.pretty_json m.ledger.accountState
|
||||
fn = __dirname + "/../manual-offer-test-#{pre_or_post}-ledger.json"
|
||||
fs.writeFileSync(fn, ledger_dump)
|
||||
done()
|
||||
|
||||
################################# TEST FACTORY #################################
|
||||
|
||||
make_offer_create_test = (get_context, test_name, test_decl) ->
|
||||
'''
|
||||
|
||||
@get_context {Function}
|
||||
|
||||
a getter function, which gets the current context with the ripple-lib remote
|
||||
etc attached
|
||||
|
||||
@test_name {String}
|
||||
|
||||
This function will create a `test` using @test_name based on @test_decl
|
||||
|
||||
@test_decl {Object}
|
||||
|
||||
@pre_ledger
|
||||
@post_ledger
|
||||
@offer
|
||||
|
||||
'''
|
||||
test_func = skip_or_only test_name, test
|
||||
focused_test = is_focused_test test_name
|
||||
|
||||
test_func test_name, (done) ->
|
||||
context = get_context()
|
||||
|
||||
remote = context.remote
|
||||
ledger_state = context.ledger
|
||||
tx = make_offer(remote, test_decl.offer...)
|
||||
|
||||
submit_for_final tx, (m) ->
|
||||
'assert transaction was successful'
|
||||
assert.equal m.metadata.TransactionResult, 'tesSUCCESS'
|
||||
|
||||
context.ledger.verifier(test_decl.post_ledger).do_verify (errors) ->
|
||||
this_done = ->
|
||||
assert Object.keys(errors).length == 0,
|
||||
"post_ledger errors:\n"+ pretty_json errors
|
||||
done()
|
||||
|
||||
if focused_test
|
||||
dump_aliased_ledger('post', ledger_state, this_done)
|
||||
else
|
||||
this_done()
|
||||
test_func
|
||||
|
||||
ledger_state_setup = (get_context, decls) ->
|
||||
setup (done) ->
|
||||
[test_name, test_decl] = decls.shift()
|
||||
|
||||
context = get_context()
|
||||
focused_test = is_focused_test test_name
|
||||
|
||||
context.ledger =
|
||||
new LedgerState(test_decl.pre_ledger, assert, context.remote, config)
|
||||
|
||||
if focused_test
|
||||
dump_rpc_script(context.ledger, test_decl)
|
||||
|
||||
context.ledger.setup(
|
||||
# console.log
|
||||
->, # noop logging function
|
||||
->
|
||||
context.ledger.verifier().do_verify (errors) ->
|
||||
assert Object.keys(errors).length == 0,
|
||||
"pre_ledger errors:\n"+ pretty_json errors
|
||||
|
||||
if focused_test
|
||||
dump_aliased_ledger('pre', context.ledger, done)
|
||||
else
|
||||
done()
|
||||
)
|
||||
|
||||
############################### TEST DECLARATIONS ##############################
|
||||
|
||||
try
|
||||
offer_create_tests = require("./offer-tests-json")
|
||||
# console.log offer_create_tests
|
||||
# offer_create_tests = JSON.parse offer_tests_string
|
||||
extend offer_create_tests, {}
|
||||
catch e
|
||||
console.log e
|
||||
|
||||
if beast_configured('RIPPLE_ENABLE_AUTOBRIDGING', '1')
|
||||
suite_func = suite
|
||||
else
|
||||
suite_func = suite.skip
|
||||
|
||||
suite_func 'Offer Create Tests', ->
|
||||
try
|
||||
get_context = server_setup_teardown()
|
||||
# tests = ([k,v] for k,v of offer_create_tests)
|
||||
|
||||
tests = []
|
||||
only = false
|
||||
for k,v of offer_create_tests
|
||||
f = make_offer_create_test(get_context, k, v)
|
||||
if not only and f == test.only
|
||||
only = [[k, v]]
|
||||
if not str_ends_with k, '_skip'
|
||||
tests.push [k,v]
|
||||
|
||||
# f = make_offer_create_test(get_context, k, v) for [k,v] in tests
|
||||
ledger_state_setup(get_context, if only then only else tests)
|
||||
catch e
|
||||
console.log e
|
||||
|
||||
Reference in New Issue
Block a user