github.com/igggame/nebulas-go@v2.1.0+incompatible/nebtestkit/cases/rpc/Subscribe.test.js (about)

     1  'use strict';
     2  
     3  var expect = require('chai').expect;
     4  var rpc_client = require('./rpc_client/rpc_client.js');
     5  var Wallet = require("nebulas");
     6  
     7  var coinbase,
     8      client,
     9      sourceAccount,
    10      chain_id,
    11      server_address;
    12  
    13  
    14  var env = process.env.NET || 'local';
    15  if (env === 'testneb1') {
    16      chain_id = 1001;
    17      sourceAccount = new Wallet.Account("25a3a441a34658e7a595a0eda222fa43ac51bd223017d17b420674fb6d0a4d52");
    18      coinbase = "n1SAeQRVn33bamxN4ehWUT7JGdxipwn8b17";
    19      server_address = "35.182.48.19:8684";
    20    
    21    } else if (env === "testneb2") {
    22      chain_id = 1002;
    23      sourceAccount = new Wallet.Account("25a3a441a34658e7a595a0eda222fa43ac51bd223017d17b420674fb6d0a4d52");
    24      coinbase = "n1SAeQRVn33bamxN4ehWUT7JGdxipwn8b17";
    25      server_address = "34.205.26.12:8684";
    26    
    27    } else if (env === "testneb3") {
    28      chain_id = 1003;
    29      sourceAccount = new Wallet.Account("25a3a441a34658e7a595a0eda222fa43ac51bd223017d17b420674fb6d0a4d52");
    30      coinbase = "n1SAeQRVn33bamxN4ehWUT7JGdxipwn8b17";
    31      server_address = "35.177.214.138:8684";
    32    
    33    } else if (env === "testneb4") { //super node
    34      chain_id = 1004;
    35      sourceAccount = new Wallet.Account("c75402f6ffe6edcc2c062134b5932151cb39b6486a7beb984792bb9da3f38b9f");
    36      coinbase = "n1EzGmFsVepKduN1U5QFyhLqpzFvM9sRSmG";
    37      server_address = "35.154.108.11:8684";
    38    } else if (env === "testneb4_normalnode"){
    39      chain_id = 1004;
    40      sourceAccount = new Wallet.Account("c75402f6ffe6edcc2c062134b5932151cb39b6486a7beb984792bb9da3f38b9f");
    41      coinbase = "n1EzGmFsVepKduN1U5QFyhLqpzFvM9sRSmG";
    42      server_address = "18.197.107.228:8684";
    43    } else if (env === "local") {
    44      chain_id = 100;
    45      sourceAccount = new Wallet.Account("d80f115bdbba5ef215707a8d7053c16f4e65588fd50b0f83369ad142b99891b5");
    46      coinbase = "n1QZMXSZtW7BUerroSms4axNfyBGyFGkrh5";
    47      server_address = "127.0.0.1:8684";
    48    
    49    } else if (env === "maintest"){
    50      chain_id = 2;
    51      sourceAccount = new Wallet.Account("d2319a8a63b1abcb0cc6d4183198e5d7b264d271f97edf0c76cfdb1f2631848c");
    52      coinbase = "n1dZZnqKGEkb1LHYsZRei1CH6DunTio1j1q";
    53      server_address = "54.149.15.132:8684";
    54    } else {
    55      throw new Error("invalid env (" + env + ").");
    56    }
    57  
    58  var all_topics = [
    59      "chain.pendingTransaction",
    60      "chain.sendTransaction",
    61      "chain.deployContract",
    62      "chain.callContract",
    63      "chain.contract",
    64      "chain.delegate",
    65      "chain.candidate",
    66      "chain.linkBlock",
    67      "chain.latestIrreversibleBlock",
    68      "chain.executeTxFailed",
    69      "chain.executeTxSuccess",
    70      "chain.transactionResult"
    71  ];
    72  
    73  function testSubscribe(testInput, testExpect, done) {
    74      var counter = 0;
    75      var call;
    76      try {
    77          call = client.Subscribe(testInput);
    78          
    79          call.on('end', () => {
    80              console.log("server finish sending");
    81          });
    82  
    83          call.on('data', evt => {
    84              console.log("[event] " + JSON.stringify(evt) + "\n");
    85              try {
    86                  expect(evt).to.have.property('topic');
    87                  expect(evt).to.have.property('data');
    88                  counter++;
    89                  if (testExpect.justRecieveNum <= counter) {
    90                      console.log("recieved " + counter + " events, now stop.")
    91                      call.cancel();
    92                      done();
    93                  }
    94              } catch (err) {
    95                  call.cancel();
    96                  done(err);
    97              }
    98          });
    99  
   100          call.on('status', status => {
   101              console.log("[status] " + JSON.stringify(status) + "\n");
   102          });
   103  
   104          setTimeout(() => {
   105              if (0 == counter) {
   106                  console.log(new Error("no events got after " + testExpect.timeout + " ms"))
   107                  call.cancel();
   108                  done();
   109              }
   110          }, testExpect.timeout);
   111  
   112      } catch(err) {
   113          console.log("call failed:" + err.toString())
   114          if (testExpect.callFailed) {
   115              try {
   116                  expect(err.toString()).to.have.string(testExpect.errorMsg);
   117                  done();
   118              } catch(er) {
   119                  done(err);
   120              }
   121          } else {
   122              done(err)
   123          }
   124      }
   125  }
   126  
   127  describe("rpc: Subscribe", () => {
   128      before(() => {
   129          client = rpc_client.new_client(server_address);
   130      });
   131  
   132      it('1. subsribe all', done => {
   133  
   134          var testInput = {
   135              topics: all_topics
   136          }
   137  
   138          var testExpect = {
   139              callFailed: false,
   140              justRecieveNum: 1,
   141              timeout: 20000
   142          }
   143  
   144          testSubscribe(testInput, testExpect, done)
   145      });
   146  
   147      it('2. all topics are unkown', done => {
   148  
   149          var testInput = {
   150              topics: ["unkown"]
   151          }
   152  
   153          var testExpect = {
   154              callFailed: false,
   155              justRecieveNum: 1,
   156              timeout: 20000
   157          }
   158  
   159          testSubscribe(testInput, testExpect, done)
   160      });
   161  
   162      it('3. partial of all topics are unkown', done => {
   163  
   164          var testInput = {
   165              topics: [
   166                  "unkown",
   167                  "chain.linkBlock"
   168              ]
   169          }
   170  
   171          var testExpect = {
   172              callFailed: false,
   173              justRecieveNum: 1,
   174              timeout: 20000
   175          }
   176  
   177          testSubscribe(testInput, testExpect, done)
   178      }); 
   179  
   180      it('4. no topic', done => {
   181  
   182          var testInput = {
   183              topics: []
   184          }
   185  
   186          var testExpect = {
   187              callFailed: false,
   188              justRecieveNum: 1,
   189              timeout: 20000
   190          }
   191  
   192          testSubscribe(testInput, testExpect, done)
   193      });
   194  });