Giter Club home page Giter Club logo

test-infra's People

Contributors

bidon15 avatar derrandz avatar evan-forbes avatar jrmanes avatar msevey avatar rach-id avatar renaynay avatar vgonkivs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

test-infra's Issues

docs: create the process of transferring bugs to actionable items

This is an issue that requires definition of how we treat bugs:
Main criterias to focus for the doc are:

  • How we treat bugs that are not covered by any existing test-cases
  • What to do if the bug is hard and expensive to reproduce (limitations section)
  • Response time to bugs by urgency levels
  • When to reject/close/obsolete the existing bug

testground/app: refactor repetitive steps into reusable components

Introduction ๐Ÿ––

As @Wondertan has correctly mentioned, having redundant code for Celestia App network creation is not a sustainable approach. Thus this issue should address to solving this

What needs to be done ๐Ÿง

Test-steps like InitChain, CreateKey, AddGenAccounts, GenTx, CollectGenTxs should be refactored to components in the appkit to make the overall process of bootstrapping an app's network better
For instance, rn the RunApp func is mostly containing the same code base that InitValidator has for Application specific instances

References ๐Ÿ‘€

PR that caused this issue creation: #23

investigation/testground: multiple barriers are causing some of the instances to freeze

When we want instances to get into a specific state and later continue test logic, we are using state mechanism in sync client.
However, after 1+ usage of state and barrier we see that sometimes instances are freezing due to waiting for an event to happen across each other.

Need to create a simple test-case that abuses barrier multiple times to see if this is reliable reproducible

infra: schedule execution of tests

When to execute tests and at what stages are still an open questions to be answered

  • What branches can wait more time for execution of the majority of tests
  • What stages are defined in the pipeline to start with

manual: dasing for big messages

Pre-Reqs:
In Terminal 1:

# 16000 are an equivalent for 16 kilobytes 
msg=$(openssl rand -hex 16000)

pay for message testing

  1. for 1mb message
  2. for 16mb message
  3. for 32mb message

Steps to do:

  1. In Terminal 1: Have a dedicated celestia-app/celestia full node in synced status and account to create payForMessage TXs
  2. In Terminal 2: Have a light client synced with the celestia full node
  3. In Terminal 1: Execute the command with different message sizes (from 1 to 16 and 32mbs)
celestia-appd tx payment payForMessage 0102030405060708 $msg --from <acc_addr> --keyring-backend test --chain-id devnet-2

docs: create a kick-off test plan

  • We need a test plan that covers the basics of our repos.
  • The test plan should be based/linked to existing spec/ADR to not lose track of what is being tested
  • Creation of test cases should be done in the separate issue that will be linked to this
  • The pipeline for executing tests should be done in the separate issue that will be linked to this

infra: hive forking and tuning

We need to revisit what is needed in the repo, to define what

  • can be used for out testing needs
  • should be removed in the present state of the repo
  • functionality is lacking to achieve our testing needs
  • dashboard to track em(tests) all

testground/celestia-app: create basic validator steps creation

In order to finish celestia-app basic chapter, we need the list below to be done in order to have not-only pre-gen keys/configs as the only solution:

  • keys add creation
  • adding genesis account
  • sending genesis.json across N amount of instances
  • gentx per instance
  • sending gentxs to orchestrator
  • collect-gentx by the orchestrator

hive: basic test for celestia-core + celestia-app

This test-case should test celestia-core on the following scenario:

Pre-reqs:

  1. Spin up the sim env
  2. Load config(genesis file, etc) for the celestia-core + app
  3. Startup the core+app instances
  4. Check the genesis file is consumed correctly

Steps:

  1. Post the data via the cli of the app
  2. Check data consumption

Motivation: we need to smoke this out to get hands dirty in order to complete burning gas fee test-case(ref to #39)

docs: Test-case creation

Creating successful test-case requires each of criterias to be met:

  1. A Test plan -> test suite should be linked to it
  2. What part of the spec/ADR the test-case is testing
  3. Steps should be human readable
  4. If a bug is found with the test-case, it(bug) should be linked to the test-case to avoid further duplicates

[EPIC] Failure and Recovery cases for block with withheld data

Background

Original Message:

We should do network tests for cases like if a block producer withholds some of the block:
(1) will full nodes reconstruct it in case the block is recoverable, and how long will it take?
(2) after the block is reconstructed - what happens to light clients that have hanging DAS queries?
(3) if the erasure code is valid, will a bad coding fraud proof be generated and how long?

Introduction

This epic contains creating/implementation/reporting of the test-plan(or plans)

Docs/Test-Plan creation

TBA

Test-Plan implementation

  • #96
  • Big Network tests for Sq Sz 128/256
  • DASing from a Full Node that has reconstructed a block

Test-Plan Execution & Reporting

Notes

manual: measure footprint from fully synced devnet-2

Steps to do:

  1. install celestia-app and celestia-node . Install docs: https://docs.celestia.org/nodes/overview
  2. Start/Sync the celestia-app non-validating instance with the chain
  3. Start Celestia Bridge node with a remote flag pointing to a synced celestia-app with the genesis trusted hash (block=1)
  4. Wait till Celestia Bridge becomes fully synced
  5. Repeat 2-3-4 for Full Node
  6. Initialize the Celestia Light Node with the genesis trusted hash and the trusted peer of the synced Celestia Full Node
  7. Start the Celestia Light Client
  8. Wait until the Celestia Light Client is fully synced
  9. Using sudo du -sh <path> measure the disk space of the following directories
  • .celestia-app
  • .celestia-bridge
  • .celestia-full
  • .celestia-light

testground/node/app: create PFD steps

Introduction ๐Ÿ––

In both celestia-app and celestia-node, we can submit pfd. However, this is not a straightforward approach for both of them

Celestia Application part ๐Ÿ”ง

In celestia-app, we can already use the wrapcli approach to fulfil plain PFD
Still, we need to implement opening of the grpc rpc endpoint from app to other celestia-node types such as light/full

Celestia Node part ๐Ÿงฑ

Pre-Requisites ๐Ÿ“ฆ

  • Celestia-App should find a way that the node is asking for funding the account
  • Celestia-Node should check the balance before starting PFD

What needs to be done ๐Ÿง

In celestia-node, we are currently using the RPC approach
https://docs.celestia.org/developers/node-tutorial#connect-to-a-public-core-endpoint

We might need to wrap this RPC part as usually the user uses these APIs
https://docs.celestia.org/developers/node-tutorial#submit-a-pfd-transaction

infra: Increase cluster resources

According to our upcoming test-plan implementation #55, we need to prepare the cluster to accommodate:

  1. 100 Celestia Application Validators (4 cores/ 6Gb) => 400 cores / 600 Gb
  2. 100 Celestia Bridge Nodes (4 cores/ 6Gb) => 400 cores / 600 Gb
  3. 50 Celestia Full Nodes (4 cores / 4 Gb) => 200 cores / 200 Gb
  4. 1000 Celestia Light Nodes (2 cores / 3 Gb) => 2000 cores / 3000 Gb

The total for all this is 2600 cores / 4400 Gb
Taking into consideration sidecar/influx and the testground's daemon, we definitely need more power

ci: tests execution env

We need to decide on which CI to execute tests as well as on which stages to execute them(tests)
This requires analysis of existing tools like circle/travis/ga/etc.

testground/app: Configure any node to be a bootstrapper as a pre-requisite

Introduction ๐Ÿ“œ

In order to start the chain, our validators should find each other.
Now, we are adding them as p2p.persistent-peers in config.toml using sync.Client from testground.

Ideally, we need to configure any of the existing node to be a bootstrapper to others by editing the config.toml file

Bootstrap Mode ๐Ÿ“ก

What to do:

  1. Create a new topic, where any validator can become a bootstrap-peer to others by publishing it's peerid to the event
  2. Others listens to the event to receive this peerid (or a set of peerids)
  3. We need a new WrapCLI func that changes p2p.bootstrap-peers for those nodes who wants to find others

testground/app: create a seed node

a seed node that connect the peers to each other, so the peers don't need to add one another as persistent peers as mandatory anymore

This can help us in the future minimize the amount of inbound/outbound peers per 1 validator for testing bandwidth vs big blocks

simple local test-net using docker compose

Suggestion

Modify the existing approach in tendermint to run a local testnet using docker-compose.

References:

Instructions:

It should be a low-hanging fruit to use this approach to spin up a celestia-node IMO. That way we create the genesis file once and put it directly into the docker containers before creating them (no need to scp stuff around etc).

[EPIC][Celestia-App]: Refactor existing features to reusable components

Introduction ๐Ÿ––

This epic contains all necessary features that need to be refactor out as reusable components for future ease of test development
As spinning up Celestia Application instances is a pre-requisite to every test-run, we need to make this setup process less redundant as well as let the test designer configure those components as they wish to via .toml file

What needs to be done ๐Ÿง

hive: basic test for celestia-core

This test-case should test celestia-core on the following scenario:

  1. Spin up the sim env
  2. Load config(genesis file, etc) for the celestia-core
  3. Startup the core instance
  4. Check the genesis file is consumed correctly

testground/app/node: Fund accounts mechanism

Introduction ๐Ÿ––

Celestia Node full/light need to have funds in order to start submitting PFDs.
Creating a sync topic for that specific case will solve the task

What we have as a reference point ๐Ÿ‘€

We already have a sync topic for sharing accounts between app's for funding genesis accounts (ref: #24).
Tbe, these parts:

What needs to be done ๐Ÿง

To get this done we need:

  1. A new topic for funding accounts
  2. New WrapCLI command for app
  3. Node publishes to the topic for funding
  4. App subscribes to all events and funds celes accounts accordingly

Ref: #31

celestia-app: smoke suite

We need to create a smoke suite for celestia-app without hive due to issues with #3
What ideas for implementation could be used for this(sorted by ease and knowledge):

  • vanilla docker compose
  • dockertest
  • testground

infra: K8S cluster setup

In order to run full-scale network tests, we need to set up the k8s cluster on a cloud provider.
Here are the steps that needs to be done:

  1. Choose a cloud provider
  2. Install all dependencies required to run a testground's test-plan
  3. Setting up a monitoring dashboard for runs
  4. Including test-runs into GA (e.g. cadence)

Materials to read:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.