-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1a2a7c2
commit 02616ab
Showing
1 changed file
with
239 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,239 @@ | ||
# Farmer-client Testing guide | ||
|
||
Melodot Farmer-client includes both unit tests and e2e tests, which can be executed locally or within a Docker container. | ||
|
||
## ****Local Testing**** | ||
|
||
Ensure you have the necessary environment set up for Rust. | ||
|
||
### ****Unit Tests**** | ||
|
||
Run all unit tests using the following command: | ||
|
||
```bash | ||
make test | ||
``` | ||
|
||
### Building | ||
|
||
We need to compile two projects: the melodot node and the Farmer-client. | ||
|
||
Known issue: Unable to compile under Mac environment, we will fix this issue later. | ||
|
||
1. Build the melodot node using the following command, this may take some time: | ||
|
||
```bash | ||
make build-default | ||
``` | ||
|
||
2. Compile the farmer-client using the following command: | ||
|
||
```bash | ||
make build-farmer | ||
``` | ||
|
||
### ****Launching the Development Network**** | ||
|
||
To initiate the development network, use the command below: | ||
|
||
```bash | ||
make run-dev | ||
``` | ||
|
||
Once you observe the following output, it indicates that the development network is up and running, and blocks are being produced normally: | ||
|
||
```bash | ||
2023-11-09 21:36:31 Melodot Node | ||
2023-11-09 21:36:31 ✌️ version 0.0.1-1df3a1f033a | ||
2023-11-09 21:36:31 ❤️ by DKLee <[email protected]>, 2017-2023 | ||
2023-11-09 21:36:31 📋 Chain specification: Development | ||
2023-11-09 21:36:31 🏷 Node name: accessible-cobweb-6597 | ||
2023-11-09 21:36:31 👤 Role: AUTHORITY | ||
2023-11-09 21:36:31 💾 Database: RocksDb at /tmp/substrateJ6MN0y/chains/dev/db/full | ||
2023-11-09 21:36:31 ⛓ Native runtime: melodot-1 (melodot-1.tx1.au1) | ||
2023-11-09 21:36:32 [0] 💸 generated 1 npos voters, 1 from validators and 0 nominators | ||
2023-11-09 21:36:32 [0] 💸 generated 1 npos targets | ||
2023-11-09 21:36:33 🔨 Initializing Genesis block/state (state: 0x2538…5e46, header-hash: 0xac37…e2d5) | ||
2023-11-09 21:36:33 👴 Loading GRANDPA authority set from genesis on what appears to be first startup. | ||
2023-11-09 21:36:34 👶 Creating empty BABE epoch changes on what appears to be first startup. | ||
2023-11-09 21:36:34 Failed to register metrics: Duplicate metrics collector registration attempted | ||
2023-11-09 21:36:34 Using default protocol ID "sup" because none is configured in the chain specs | ||
2023-11-09 21:36:34 🏷 Local node identity is: 12D3KooWF8kNQjNivebHiCnTvkACt2SrNW6uEkJbyxWqzu1PAbVg | ||
2023-11-09 21:36:34 🚀 Starting transaction pool listener. | ||
2023-11-09 21:36:34 💻 Operating system: linux | ||
2023-11-09 21:36:34 💻 CPU architecture: x86_64 | ||
2023-11-09 21:36:34 💻 Target environment: gnu | ||
2023-11-09 21:36:34 💻 CPU: Intel(R) Xeon(R) Platinum | ||
2023-11-09 21:36:34 💻 CPU cores: 4 | ||
2023-11-09 21:36:34 💻 Memory: 7283MB | ||
2023-11-09 21:36:34 💻 Kernel: 5.15.0-79-generic | ||
2023-11-09 21:36:34 💻 Linux distribution: Ubuntu 22.04.3 LTS | ||
2023-11-09 21:36:34 💻 Virtual machine: yes | ||
2023-11-09 21:36:34 📦 Highest known block at #0 | ||
2023-11-09 21:36:34 〽️ Prometheus exporter started at 127.0.0.1:9615 | ||
2023-11-09 21:36:34 Running JSON-RPC HTTP server: addr=127.0.0.1:9933, allowed origins=["*"] | ||
2023-11-09 21:36:34 Running JSON-RPC WS server: addr=0.0.0.0:9944, allowed origins=["*"] | ||
2023-11-09 21:36:34 👶 Starting BABE Authorship worker | ||
2023-11-09 21:36:36 🙌 Starting consensus session on top of parent 0xac37c22f067cbea3a82a9952ed61a40a0a32eabb4a46fa96ebc230e63855e2d5 | ||
2023-11-09 21:36:36 🎁 Prepared block for proposing at 1 (0 ms) [hash: 0x94cbc9ee49438476b9291ed9ea4dd722201bff89aaa61c803a6a484e218e3c82; parent_hash: 0xac37…e2d5; extrinsics (1): [0x6d27…d03d]] | ||
2023-11-09 21:36:36 🔖 Pre-sealed block for proposal at 1. Hash now 0x0b832715fa87a6e813606832ab364150830465fae6fd43f9b740763ba0eba75a, previously 0x94cbc9ee49438476b9291ed9ea4dd722201bff89aaa61c803a6a484e218e3c82. | ||
2023-11-09 21:36:36 👶 New epoch 0 launching at block 0x0b83…a75a (block slot 283256166 >= start slot 283256166). | ||
2023-11-09 21:36:36 👶 Next epoch starts at slot 283256766 | ||
2023-11-09 21:36:36 😴 Block 1 has no blob | ||
2023-11-09 21:36:36 ✨ Imported #1 (0x0b83…a75a) | ||
2023-11-09 21:36:38 Accepting new connection 1/100 | ||
2023-11-09 21:36:39 discovered: 12D3KooW9wv5DVBvtUv9fy46PCkEDo9K1jyXzPS3SKiBbhW4rfty /ip4/172.19.0.1/tcp/4418 | ||
2023-11-09 21:36:39 discovered: 12D3KooW9wv5DVBvtUv9fy46PCkEDo9K1jyXzPS3SKiBbhW4rfty /ip4/172.16.7.77/tcp/4418 | ||
2023-11-09 21:36:39 discovered: 12D3KooW9wv5DVBvtUv9fy46PCkEDo9K1jyXzPS3SKiBbhW4rfty /ip4/172.17.0.1/tcp/4418 | ||
2023-11-09 21:36:39 💤 Idle (0 peers), best: #1 (0x0b83…a75a), finalized #0 (0xac37…e2d5), ⬇ 0 ⬆ 0 | ||
2023-11-09 21:36:42 🙌 Starting consensus session on top of parent 0x0b832715fa87a6e813606832ab364150830465fae6fd43f9b740763ba0eba75a | ||
2023-11-09 21:36:42 🎁 Prepared block for proposing at 2 (0 ms) [hash: 0x28b41376f2b51efd8def9083bffc3e5c5f98f15d266dfb1986172de9e09e26fc; parent_hash: 0x0b83…a75a; extrinsics (1): [0x57d3…a11a]] | ||
2023-11-09 21:36:42 🔖 Pre-sealed block for proposal at 2. Hash now 0xb0134001cfed9449650f3c8c6af26230dd2d6ac682b06391b5ec4187c4e365ff, previously 0x28b41376f2b51efd8def9083bffc3e5c5f98f15d266dfb1986172de9e09e26fc. | ||
2023-11-09 21:36:42 😴 Block 2 has no blob | ||
2023-11-09 21:36:42 ✨ Imported #2 (0xb013…65ff) | ||
2023-11-09 21:36:44 💤 Idle (0 peers), best: #2 (0xb013…65ff), finalized #0 (0xac37…e2d5), ⬇ 0 ⬆ 0 | ||
2023-11-09 21:36:48 🙌 Starting consensus session on top of parent 0xb0134001cfed9449650f3c8c6af26230dd2d6ac682b06391b5ec4187c4e365ff | ||
2023-11-09 21:36:48 🎁 Prepared block for proposing at 3 (0 ms) [hash: 0x73880cfd4f67132321ac78829d30389869c233e8ba528c6b19627ef4b7db8c48; parent_hash: 0xb013…65ff; extrinsics (1): [0xb35b…16f5]] | ||
``` | ||
### ****Running Farmer-clent**** | ||
Open a new terminal and execute the following command to run the farmer-client: | ||
```bash | ||
make run-farmer | ||
``` | ||
Once you observe the following output, it indicates that the farmer-client is up and running: | ||
```bash | ||
INFO 🚀 Melodot Farmer Client starting up | ||
INFO creating instance on iface 172.16.7.77 | ||
INFO creating instance on iface 172.19.0.1 | ||
INFO creating instance on iface 172.17.0.1 | ||
INFO 🌐 Subscribed to best block headers | ||
INFO ⚓ Received best block header #0 | ||
INFO ⏭️ No data in block #0 | ||
INFO discovered: 12D3KooWDA8b1nVXeU22coo6cy217DUucgF5zcTRfa7DqXRnSE9L /ip4/172.16.7.77/tcp/4417 | ||
INFO discovered: 12D3KooWDA8b1nVXeU22coo6cy217DUucgF5zcTRfa7DqXRnSE9L /ip4/172.17.0.1/tcp/4417 | ||
INFO discovered: 12D3KooWDA8b1nVXeU22coo6cy217DUucgF5zcTRfa7DqXRnSE9L /ip4/172.19.0.1/tcp/4417 | ||
INFO ⚓ Received best block header #1 | ||
INFO ⏭️ No data in block #1 | ||
``` | ||
If you encounter a network error, it may be because the melodot-node has not yet initialized the network. You just need to wait a few seconds and then run the farmer-client again. | ||
### ****Running e2e Tests**** | ||
Ensure the test network and farmer-client are running. Open a new terminal and execute the e2e tests using the following command: | ||
```bash | ||
make e2e | ||
``` | ||
This will run the end-to-end (e2e) tests for melodot-node, including data upload. You will see the following output: | ||
```bash | ||
Running example: header | ||
Compiling melodot-runtime v0.0.1 (/root/melodot/runtime) | ||
Compiling melo-das-rpc v0.0.1 (/root/melodot/crates/das-rpc) | ||
Compiling meloxt v0.0.1 (/root/melodot/crates/meloxt) | ||
Finished release [optimized] target(s) in 3m 24s | ||
Running `target/release/examples/header` | ||
INFO 🌟 Start get header | ||
INFO ✅ Success Current block_num: 35 | ||
INFO 💯 All success : Header | ||
Running example: register_app | ||
Compiling meloxt v0.0.1 (/root/melodot/crates/meloxt) | ||
Finished release [optimized] target(s) in 19.50s | ||
Running `target/release/examples/register_app` | ||
INFO 🌟 Start register app | ||
INFO ✅ Success Application created, block hash: 0x8032…2426 | ||
INFO 💯 All success : Register app | ||
Running example: submit_blob_tx | ||
Compiling meloxt v0.0.1 (/root/melodot/crates/meloxt) | ||
Finished release [optimized] target(s) in 15.96s | ||
Running `target/release/examples/submit_blob_tx` | ||
INFO 🌟 Start submit blob tx | ||
INFO ✅ Success: Commitments bytes: [171, 26, 161, 31, 215, 245, 79, 117, 106, 34, 232, 99, 28, 0, 229, 164, 6, 136, 85, 40, 22, 77, 143, 120, 175, 238, 104, 50, 7, 50, 218, 226, 191, 226, 69, 52, 179, 38, 228, 236, 179, 122, 101, 10, 130, 105, 126, 189] | ||
INFO ✅ Success: Data submited, tx_hash: 0x6db80e4e172677cbab41c5891035b8bdef538a7b05d7f24f2e0b43197dc5bcc8 | ||
INFO ⏳ Data not verified yet, current block number: 45 | ||
INFO ⏳ Data not verified yet, current block number: 46 | ||
INFO ✅ Success Data should have been verified by the validators at: 47 | ||
INFO 💯 All success : Submit blob tx | ||
Running example: submit_data | ||
Compiling meloxt v0.0.1 (/root/melodot/crates/meloxt) | ||
Finished release [optimized] target(s) in 15.55s | ||
Running `target/release/examples/submit_data` | ||
INFO 🌟 Start submit data | ||
INFO ✅ Success: Data submited, block hash: 0x4c49…41fe | ||
INFO 💯 All success : Submit data | ||
Running example: submit_invalid_blob_tx | ||
Compiling meloxt v0.0.1 (/root/melodot/crates/meloxt) | ||
Finished release [optimized] target(s) in 14.24s | ||
Running `target/release/examples/submit_invalid_blob_tx` | ||
INFO 🌟 Start submit invalid blob tx | ||
INFO ✅ Success: Commitments bytes: [166, 182, 73, 97, 133, 21, 86, 237, 128, 28, 102, 130, 250, 210, 22, 184, 0, 123, 104, 160, 30, 122, 92, 38, 197, 190, 67, 98, 134, 77, 243, 183, 214, 132, 242, 125, 137, 179, 229, 153, 160, 233, 193, 101, 224, 104, 102, 143] | ||
INFO ✅ Success: Submit InvalidExtrinsic, tx failed with code: 10002 | ||
INFO ✅ Success: Submit InvalidBytesLen, tx failed with code: 10005 | ||
INFO ✅ Success: Submit invalid commitments, tx failed: "Data verification failed. Please check your data and try again." | ||
INFO ✅ Success: Submit invalid proofs, tx failed: "Data verification failed. Please check your data and try again." | ||
INFO 💯 All success : Submit invalid blob tx | ||
``` | ||
At this point, the farmer-client should receive the data and save it locally. If successful, you should see the following output in the farmer-client: | ||
``` | ||
INFO 🚩 Data rows num: 1 | ||
INFO 💾 Data saved successfully | ||
INFO ⚓ Received best block header #48 | ||
INFO ⏭️ No data in block #48 | ||
INFO ⚓ Received best block header #49 | ||
INFO ⏭️ No data in block #49 | ||
INFO ⚓ Received best block header #50 | ||
INFO ⏭️ No data in block #50 | ||
INFO ⚓ Received best block header #51 | ||
INFO 🚩 Data rows num: 1 | ||
INFO 💾 Data saved successfully | ||
INFO ⚓ Received best block header #52 | ||
INFO ⏭️ No data in block #52 | ||
INFO ⚓ Received best block header #53 | ||
INFO ⏭️ No data in block #53 | ||
INFO ⚓ Received best block header #54 | ||
INFO ⏭️ No data in block #54 | ||
INFO ⚓ Received best block header #55 | ||
INFO ⏭️ No data in block #55 | ||
INFO ⚓ Received best block header #56 | ||
INFO 🚩 Data rows num: 1 | ||
INFO 💾 Data saved successfully | ||
``` | ||
## **Using Docker** | ||
First, install Docker and Docker Compose. | ||
You need to run the following commands in the root directory of **`melodot`**: | ||
```bash | ||
./scripts/docker_run.sh | ||
``` | ||
This command will build a Docker image and start a Docker container. Within the container, you can carry out the same steps as in the previous section for unit testing, building, and running the development network. | ||
You can then open a new Docker terminal with the following command, running the farmer-client. | ||
```bash | ||
./scripts/docker_run.sh new | ||
``` | ||
Finally, open another new Docker terminal to run the e2e tests: | ||
```bash | ||
make run-farmer | ||
``` | ||
Then, open another new Docker terminal to run the e2e tests: | ||
```bash | ||
make e2e | ||
``` |