0.0.35 • Published 8 months ago

nse-test v0.0.35

Weekly downloads
-
License
MIT
Repository
-
Last release
8 months ago

NodeStateEngine

NodeStateEngine is an environment for testing Lido offchain applications with the ability to deploy pre-defined states.

At this point, it's a proof of concept. Only one state is currently supported: testing keys-api for DVT module support.

Motivation

Testing oracles and services requires the ability to have a network with a set of given states.

These states include:

  • Lido's smart contracts
  • Staking modules
  • Keys of staking modules
  • External staking modules
  • Different invariants of contracts, modules, and keys

This type of problem cannot be solved in local e2e tests.

  • Lido's deployment is not trivial
  • As part of the Validator Set tasks, smart contracts developed by external teams may appear, and we need to test their integration
  • In many cases, it is necessary to publish and test smart contracts
  • Ganache does not support blockTag in RPC requests
  • We would like to have a declarative description of states that can be applied to different networks for testing purposes

Introduction

This environment was developed as a solution to these problems.

This project allows you to run a test network with an arbitrary chainId, load and deploy smart contracts, and declaratively describe the states needed for testing service operations.

Currently, only one state is supported: to test keys-api for DVT module support.

Getting started

You will need to have the latest LTS versions of NodeJS and Yarn installed.

Add the test package to your repository

yarn add --dev nse-test

Create configuration file in root dir of your project with name nse.config.js

// nse.config.js

module.exports = {
  engine: {
    // the port on which the node-state-engine will run
    port: 8001
  },
};

Run compile command to build contracts and dependencies

npx nse-test compile

Start engine running start command

npx nse-test start

Interact with the environment using http-api or using the sdk

SDK

import { createSDK } from "nse-test";

(async () => {
  const sdk = await createSDK("http://localhost:8001");
  const { port } = await sdk.env.hardhat({});
  const simpleDVTState = await sdk.story("simple-dvt-mock/initial-state", {
    sessionKey: port,
  });
  console.log(simpleDVTState);
})();

HTTP-API

If you want to interact with the API directly, you can check out the list of endpoints at address: http://localhost:8001/docs (port from engine config)

Usecases

Testing your applcation using Jest

import { createSDK, nse } from 'nse-test';

jest.setTimeout(100_000);

describe('Simple DVT', () => {
  let sdk: nse.SDK;
  let session: nse.Session;
  let initialState: nse.StoryResult<'simple-dvt-mock/initial-state'>;
  beforeAll(async () => {
    sdk = await createSDK('http://localhost:8001');

    session = await sdk.env.hardhat({});
    initialState = await session.story('simple-dvt-mock/initial-state', {});
  });

  test('initial state created', () => {
    console.log(initialState);
  });
});
0.0.35

8 months ago

0.0.34

8 months ago

0.0.33

8 months ago

0.0.32

8 months ago

0.0.31

8 months ago

0.0.30

8 months ago

0.0.29

8 months ago

0.0.27

8 months ago

0.0.26

8 months ago

0.0.25

8 months ago

0.0.24

8 months ago

0.0.23

8 months ago

0.0.22

8 months ago

0.0.21

8 months ago

0.0.20

8 months ago

0.0.19

8 months ago

0.0.18

8 months ago

0.0.17

8 months ago

0.0.16

8 months ago

0.0.15

8 months ago

0.0.14

8 months ago

0.0.13

8 months ago

0.0.12

8 months ago

0.0.11

8 months ago

0.0.10

8 months ago

0.0.9

8 months ago

0.0.8

8 months ago

0.0.7

8 months ago

0.0.6

8 months ago

0.0.5

8 months ago

0.0.4

8 months ago

0.0.3

8 months ago

0.0.2

8 months ago

0.0.1

8 months ago