@@ -7,12 +7,10 @@ import {GetBlockRequest, ServerStatusRequest} from "../lib/grpc.js";
77export const options = {
88 thresholds : { // todo make these good defaults, we need these to display tags in the result, but also to ping us if they go over
99 'grpc_req_duration{name:block_node_server_status}' : [ 'p(95)<300' ] ,
10- 'grpc_req_duration{name:get_first_block}' : [ 'p(95)<300' ] ,
11- 'grpc_req_duration{name:get_last_block}' : [ 'p(95)<300' ] ,
10+ 'grpc_req_duration{name:get_block}' : [ 'p(95)<300' ] ,
1211 } ,
1312} ;
1413
15-
1614// load test configuration data
1715const data = new SharedArray ( 'BN Test Configs' , function ( ) {
1816 return JSON . parse ( open ( './../data.json' ) ) . configs ;
@@ -26,7 +24,7 @@ client.load([data.protobufPath],
2624 'block-node/api/block_stream_subscribe_service.proto' ) ;
2725
2826// run test
29- export default ( ) => {
27+ export default async ( ) => {
3028 client . connect ( data . blockNodeUrl , {
3129 plaintext : true
3230 } ) ;
@@ -44,24 +42,26 @@ export default () => {
4442 if ( firstAvailableBlock === '18446744073709551615' ) {
4543 console . log ( `No blocks to fetch, exiting test.` ) ;
4644 } else {
47- const getFirstBlockRequestParams = {
48- tags : { name : 'get_first_block' } ,
49- } ;
50- const firstAvailableBlockResponse = new GetBlockRequest ( client ) . invoke ( firstAvailableBlock , getFirstBlockRequestParams ) ;
51- check ( firstAvailableBlockResponse , {
52- 'block fetch status is OK' : ( r ) => r && r . status === StatusOK ,
53- 'fetched block number is correct' : ( r ) => r && r . message . block . items [ 0 ] . blockHeader . number === firstAvailableBlock ,
54- } ) ;
55- console . log ( `Fetched Block '${ firstAvailableBlock } ' with size '${ firstAvailableBlockResponse . message . block . items . length } ' items` ) ;
56- const getLastBlockRequestParams = {
57- tags : { name : 'get_last_block' } ,
45+ for ( let i = parseInt ( firstAvailableBlock ) ; i <= parseInt ( lastAvailableBlock ) ; i ++ ) {
46+ const getBlockRequestParams = {
47+ tags : { name : 'get_block' } ,
48+ }
49+ const blockResponse = new GetBlockRequest ( client ) . invoke ( i , getBlockRequestParams ) ;
50+ try {
51+ check ( blockResponse , {
52+ 'block fetch status is OK' : ( r ) => r && r . status
53+ === StatusOK ,
54+ 'fetched block number is correct' : ( r ) => r && parseInt (
55+ r . message . block . items [ 0 ] . blockHeader . number ) === i ,
56+ } ) ;
57+ } catch ( e ) {
58+ console . log ( `error fetching block: ${ i } \nresponse: ${ JSON . stringify ( blockResponse ) } ` )
59+ }
60+ // Sleep just for a tiny bit, it seems networking with k6 is not always fast enough and we do see
61+ // some errors when fetching blocks, sometimes no data is received at all.
62+ await new Promise ( r => setTimeout ( r , 50 ) ) ;
5863 }
59- const lastAvailableBlockResponse = new GetBlockRequest ( client ) . invoke ( lastAvailableBlock , getLastBlockRequestParams ) ;
60- check ( lastAvailableBlockResponse , {
61- 'block fetch status is OK' : ( r ) => r && r . status === StatusOK ,
62- 'fetched block number is correct' : ( r ) => r && r . message . block . items [ 0 ] . blockHeader . number === lastAvailableBlock ,
63- } ) ;
64- console . log ( `Fetched Block '${ lastAvailableBlock } ' with size '${ lastAvailableBlockResponse . message . block . items . length } ' items` ) ;
64+ sleep ( 1 )
6565 }
6666 client . close ( ) ;
6767 sleep ( 1 ) ;
0 commit comments