未验证 提交 0d102cf8 编写于 作者: A arhag 提交者: GitHub

Merge branch 'master' into ChangeVersion

此差异已折叠。
pipeline {
agent none
stages {
stage('Build') {
parallel {
stage('Ubuntu') {
agent { label 'Ubuntu' }
steps {
sh '''
. $HOME/.bash_profile
echo 1 | ./eosio_build.sh
'''
stash includes: 'build/**/*', name: 'buildUbuntu'
}
}
stage('MacOS') {
agent { label 'MacOS' }
steps {
sh '''
. $HOME/.bash_profile
echo 1 | ./eosio_build.sh
'''
stash includes: 'build/**/*', name: 'buildMacOS'
}
}
stage('Fedora') {
agent { label 'Fedora' }
steps {
sh '''
. $HOME/.bash_profile
echo 1 | ./eosio_build.sh
'''
stash includes: 'build/**/*', name: 'buildFedora'
}
}
}
}
stage('Tests') {
parallel {
stage('Ubuntu') {
agent { label 'Ubuntu' }
steps {
unstash 'buildUbuntu'
sh '''
. $HOME/.bash_profile
if ! /usr/bin/pgrep mongod &>/dev/null; then
/usr/bin/mongod -f /etc/mongod.conf > /dev/null 2>&1 &
fi
cd build
printf "Waiting for testing to be available..."
while /usr/bin/pgrep -x ctest > /dev/null; do sleep 1; done
echo "OK!"
ctest --output-on-failure
'''
}
post {
failure {
archiveArtifacts 'build/genesis.json'
archiveArtifacts 'build/etc/eosio/node_00/config.ini'
archiveArtifacts 'build/var/lib/node_00/stderr.txt'
archiveArtifacts 'build/test_walletd_output.log'
}
}
}
stage('MacOS') {
agent { label 'MacOS' }
steps {
unstash 'buildMacOS'
sh '''
. $HOME/.bash_profile
if ! /usr/bin/pgrep mongod &>/dev/null; then
/usr/local/bin/mongod -f /usr/local/etc/mongod.conf > /dev/null 2>&1 &
fi
cd build
ctest --output-on-failure
'''
}
post {
failure {
archiveArtifacts 'build/genesis.json'
archiveArtifacts 'build/etc/eosio/node_00/config.ini'
archiveArtifacts 'build/var/lib/node_00/stderr.txt'
archiveArtifacts 'build/test_walletd_output.log'
}
}
}
stage('Fedora') {
agent { label 'Fedora' }
steps {
unstash 'buildFedora'
sh '''
. $HOME/.bash_profile
if ! /usr/bin/pgrep mongod &>/dev/null; then
/usr/bin/mongod -f /etc/mongod.conf > /dev/null 2>&1 &
fi
cd build
printf "Waiting for testing to be available..."
while /usr/bin/pgrep -x ctest > /dev/null; do sleep 1; done
echo "OK!"
ctest --output-on-failure
'''
}
post {
failure {
archiveArtifacts 'build/genesis.json'
archiveArtifacts 'build/etc/eosio/node_00/config.ini'
archiveArtifacts 'build/var/lib/node_00/stderr.txt'
archiveArtifacts 'build/test_walletd_output.log'
}
}
}
}
}
}
post {
always {
node('Ubuntu') {
cleanWs()
}
node('MacOS') {
cleanWs()
}
node('Fedora') {
cleanWs()
}
}
}
}
machine:
services:
- docker
dependencies:
override:
- cd ~/eos && docker build -t eosio/eos -f Docker/Dockerfile .
test:
pre:
- sleep 5
override:
- docker run eosio/eos
......@@ -122,8 +122,8 @@ namespace eosiosystem {
int64_t bytes_out;
auto itr = _rammarket.find(S(4,RAMCORE));
_rammarket.modify( itr, 0, [&]( auto& es ) {
const auto& market = _rammarket.get(S(4,RAMCORE), "ram market does not exist");
_rammarket.modify( market, 0, [&]( auto& es ) {
bytes_out = es.convert( quant_after_fee, S(0,RAM) ).amount;
});
......
......@@ -249,7 +249,7 @@
{"name":"max_ram_size", "type":"uint64"},
{"name":"total_ram_bytes_reserved", "type":"uint64"},
{"name":"total_ram_stake", "type":"int64"},
{"name":"last_producer_schedule_update", "type":"time_point_sec"},
{"name":"last_producer_schedule_update", "type":"block_timestamp_type"},
{"name":"last_pervote_bucket_fill", "type":"uint64"},
{"name":"pervote_bucket", "type":"int64"},
{"name":"perblock_bucket", "type":"int64"},
......
......@@ -114,6 +114,7 @@ struct interpreter_interface : ModuleInstance::ExternalInterface {
}
void growMemory(Address old_size, Address new_size) override {
memset(memory.data + old_size.addr, 0, new_size.addr - old_size.addr);
current_memory_size += new_size.addr - old_size.addr;
}
......
......@@ -114,6 +114,7 @@ namespace Runtime
{
return -1;
}
memset(memory->baseAddress + (memory->numPages << IR::numBytesPerPageLog2), 0, numNewPages << IR::numBytesPerPageLog2);
memory->numPages += numNewPages;
}
return previousNumPages;
......
......@@ -24,7 +24,6 @@ add_dependencies(plugin_test asserter test_api test_api_mem test_api_db test_api
#
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/core_symbol.py.in ${CMAKE_CURRENT_BINARY_DIR}/core_symbol.py)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/p2p_tests/sync/test.sh ${CMAKE_CURRENT_BINARY_DIR}/p2p_tests/sync/test.sh COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/p2p_tests/dawn_515/test.sh ${CMAKE_CURRENT_BINARY_DIR}/p2p_tests/dawn_515/test.sh COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/trans_sync_across_mixed_cluster_test.sh ${CMAKE_CURRENT_BINARY_DIR}/trans_sync_across_mixed_cluster_test.sh COPYONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/distributed-transactions-test.py ${CMAKE_CURRENT_BINARY_DIR}/distributed-transactions-test.py COPYONLY)
......@@ -48,9 +47,6 @@ add_test(NAME nodeos_run_remote_test COMMAND tests/nodeos_run_remote_test.py -v
#endif()
# TODO: Tests removed until working again on master.
# TODO: add_test(NAME p2p_sync_test COMMAND tests/p2p_tests/sync/test.sh WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
# TODO: add_test(NAME p2p_sync_test_p2_d10 COMMAND tests/p2p_tests/sync/test.sh -p 2 -d 10 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
# TODO: add_test(NAME message_storm COMMAND tests/p2p_tests/sync/test.sh -m -p 21 -n 21 -d 5 -l WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
# TODO: add_test(NAME trans_sync_across_mixed_cluster_test COMMAND tests/trans_sync_across_mixed_cluster_test.sh -p 1 -n 2 WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
add_test(NAME distributed-transactions-test COMMAND tests/distributed-transactions-test.py -p 1 -n 4 -v --dump-error-detail WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
add_test(NAME distributed-transactions-remote-test COMMAND tests/distributed-transactions-remote-test.py -v --dump-error-detail WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
......
此差异已折叠。
#!/bin/bash
###############################################################
# -p <producing nodes count>
# -n <total nodes>
# -s <topology>
# -d <delay between nodes startup>
# -m # message storm test
# message storm test: "-m -p 21 -n 21 -d 5"
###############################################################
pnodes=10
topo=mesh
delay=0
debug="false"
message_storm="false"
args=`getopt p:n:s:d:lm $*`
if [ $? == 0 ]; then
set -- $args
for i; do
case "$i"
in
-p) pnodes=$2;
shift; shift;;
-n) total_nodes=$2;
shift; shift;;
-d) delay=$2;
shift; shift;;
-s) topo="$2";
shift; shift;;
-l) debug="true"
shift;;
-m) message_storm="true"
shift;;
--) shift;
break;;
esac
done
else
echo "huh we got err $?"
if [ -n "$1" ]; then
pnodes=$1
if [ -n "$2" ]; then
topo=$2
if [ -n "$3" ]; then
total_nodes=$3
fi
fi
fi
fi
total_nodes="${total_nodes:-`echo $pnodes`}"
launcherPath="programs/eosio-launcher/eosio-launcher"
clientPath="programs/cleos/cleos"
rm -rf etc/eosio/node_* var/lib/* stage
ls -l etc/eosio var/lib
debugArg=""
if [ "$debug" == true ]; then
debugArg="--nodeos \"--log-level-net-plugin debug\""
fi
cmd="$launcherPath -p $pnodes -n $total_nodes -s $topo -d $delay $debugArg"
if [ "$delay" == 0 ]; then
cmd="$launcherPath -p $pnodes -n $total_nodes -s $topo"
fi
echo cmd: $cmd
eval $cmd
sleep 25
echo "start" > test.out
port=8888
endport=`expr $port + $total_nodes`
echo endport = $endport
while [ $port -ne $endport ]; do
cmd="$clientPath --port $port get block 20 >> test.out 2>&1;"
echo cmd: $cmd
eval $cmd
port=`expr $port + 1`
done
grep 'producer"' test.out | tee summary | sort -u -k2 | tee unique
prodsfound=`wc -l < unique`
lines=`wc -l < summary`
if [ $lines -eq $total_nodes -a $prodsfound -eq 1 ]; then
echo all synced
if [ "$message_storm" == false ]; then
cmd="$launcherPath -k 15"
echo cmd: $cmd
eval $cmd
exit
fi
fi
echo $lines reports out of $total_nodes and prods = $prodsfound
sleep 18
cmd="$clientPath --port 8888 get block 25"
echo cmd: $cmd
eval $cmd
sleep 15
cmd="$clientPath --port 8888 get block 30"
echo cmd: $cmd
eval $cmd
sleep 15
cmd="$clientPath --port 8888 get block 35"
echo cmd: $cmd
eval $cmd
sleep 15
cmd="$clientPath --port 8888 get block 40"
echo cmd: $cmd
eval $cmd
sleep 15
echo "pass 2" > test.out
port=8888
while [ $port -ne $endport ]; do
cmd="$clientPath --port $port get block 1 >> test.out 2>&1;"
echo cmd: $cmd
eval $cmd
port=`expr $port + 1`
done
grep 'producer"' test.out | tee summary | sort -u -k2 | tee unique
prodsfound=`wc -l < unique`
lines=`wc -l < summary`
if [ $lines -eq $total_nodes -a $prodsfound -eq 1 ]; then
echo all synced
cmd="$launcherPath -k 15"
echo cmd: $cmd
eval $cmd
exit
fi
echo ERROR: $lines reports out of $total_nodes and prods = $prodsfound
cmd="$launcherPath -k 15"
echo cmd: $cmd
eval $cmd
count=0
while [ $count -lt $total_nodes ]; do
num=$(printf "%02s" $count)
echo =================================================================
echo Contents of etc/eosio/node_${num}/config.ini:
cat etc/eosio/node_${num}/config.ini
echo =================================================================
echo Contents of var/lib/node_${num}/stderr.txt:
cat var/lib/node_${num}/stderr.txt
count=`expr $count + 1`
done
exit 1
......@@ -158,6 +158,9 @@ def createStakedAccounts(b, e):
for i in range(b, e):
a = accounts[i]
funds = a['funds']
print('#' * 80)
print('# %d/%d %s %s' % (i, e, a['name'], intToCurrency(funds)))
print('#' * 80)
if funds < ramFunds:
print('skipping %s: not enough funds to cover ram' % a['name'])
continue
......@@ -168,9 +171,10 @@ def createStakedAccounts(b, e):
stakeCpu = stake - stakeNet
print('%s: total funds=%s, ram=%s, net=%s, cpu=%s, unstaked=%s' % (a['name'], intToCurrency(a['funds']), intToCurrency(ramFunds), intToCurrency(stakeNet), intToCurrency(stakeCpu), intToCurrency(unstaked)))
assert(funds == ramFunds + stakeNet + stakeCpu + unstaked)
run(args.cleos + 'system newaccount --transfer eosio %s %s --stake-net "%s" --stake-cpu "%s" --buy-ram "%s" ' %
retry(args.cleos + 'system newaccount --transfer eosio %s %s --stake-net "%s" --stake-cpu "%s" --buy-ram "%s" ' %
(a['name'], a['pub'], intToCurrency(stakeNet), intToCurrency(stakeCpu), intToCurrency(ramFunds)))
run(args.cleos + 'transfer eosio %s "%s"' % (a['name'], intToCurrency(unstaked)))
if unstaked:
retry(args.cleos + 'transfer eosio %s "%s"' % (a['name'], intToCurrency(unstaked)))
def regProducers(b, e):
for i in range(b, e):
......@@ -268,7 +272,7 @@ def msigReplaceSystem():
def produceNewAccounts():
with open('newusers', 'w') as f:
for i in range(3000, 30000):
for i in range(120_000, 200_000):
x = getOutput(args.cleos + 'create key')
r = re.match('Private key: *([^ \n]*)\nPublic key: *([^ \n]*)', x, re.DOTALL | re.MULTILINE)
name = 'user'
......
......@@ -563,3 +563,40 @@ static const char import_injected_wast[] =
" (import \"" EOSIO_INJECTED_MODULE_NAME "\" \"checktime\" (func $inj (param i32)))" \
" (func $apply (param $0 i64) (param $1 i64) (param $2 i64))" \
")";
static const char memory_growth_memset_store[] = R"=====(
(module
(export "apply" (func $apply))
(memory $0 1)
(func $apply (param $0 i64)(param $1 i64)(param $2 i64)
(drop (grow_memory (i32.const 2)))
(i32.store (i32.const 80000) (i32.const 2))
(i32.store (i32.const 140000) (i32.const 3))
)
)
)=====";
static const char memory_growth_memset_test[] = R"=====(
(module
(export "apply" (func $apply))
(import "env" "eosio_assert" (func $eosio_assert (param i32 i32)))
(memory $0 1)
(func $apply (param $0 i64)(param $1 i64)(param $2 i64)
(drop (grow_memory (i32.const 2)))
(call $eosio_assert
(i32.eq
(i32.load offset=80000 (i32.const 0))
(i32.const 0)
)
(i32.const 0)
)
(call $eosio_assert
(i32.eq
(i32.load offset=140000 (i32.const 0))
(i32.const 0)
)
(i32.const 0)
)
)
)
)=====";
\ No newline at end of file
......@@ -1558,6 +1558,37 @@ BOOST_FIXTURE_TEST_CASE( protect_injected, TESTER ) try {
produce_blocks(1);
} FC_LOG_AND_RETHROW()
BOOST_FIXTURE_TEST_CASE( mem_growth_memset, TESTER ) try {
produce_blocks(2);
create_accounts( {N(grower)} );
produce_block();
action act;
act.account = N(grower);
act.name = N();
act.authorization = vector<permission_level>{{N(grower),config::active_name}};
set_code(N(grower), memory_growth_memset_store);
{
signed_transaction trx;
trx.actions.push_back(act);
set_transaction_headers(trx);
trx.sign(get_private_key( N(grower), "active" ), control->get_chain_id());
push_transaction(trx);
}
produce_blocks(1);
set_code(N(grower), memory_growth_memset_test);
{
signed_transaction trx;
trx.actions.push_back(act);
set_transaction_headers(trx);
trx.sign(get_private_key( N(grower), "active" ), control->get_chain_id());
push_transaction(trx);
}
} FC_LOG_AND_RETHROW()
INCBIN(fuzz1, "fuzz1.wasm");
INCBIN(fuzz2, "fuzz2.wasm");
INCBIN(fuzz3, "fuzz3.wasm");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册