Skip to content

Commit

Permalink
test: init namada per test
Browse files Browse the repository at this point in the history
  • Loading branch information
mateuszjasiuk committed Jul 24, 2023
1 parent a062c58 commit 6568e7c
Show file tree
Hide file tree
Showing 9 changed files with 322 additions and 100 deletions.
17 changes: 17 additions & 0 deletions e2e/dl-wasms.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash -x

NAMADA_DIR=".namada"
CHECKSUMS="${NAMADA_DIR}/checksums.json"
WASM=""
S3="https://namada-wasm-master.s3.eu-west-1.amazonaws.com"

mkdir "${NAMADA_DIR}/wasm"

while read -r line;
do
if [[ $line == *"wasm"* ]]; then
WASM=$(echo "$line" | sed -E "s/\".+\":\s\"//g" | sed -E "s/\".*//g");
curl "${S3}/${WASM}" --output "${NAMADA_DIR}/wasm/${WASM}"
fi

done < "$CHECKSUMS"
9 changes: 8 additions & 1 deletion e2e/genesis.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ Ester = "1000000"
faucet = "9223372036854"
"faucet.public_key" = "100"
"validator-0.public_key" = "100"
TestA = "1000"
"TestA.public_key" = "1000"
TestB = "1000"
"TestB.public_key" = "1000"

[token.BTC]
address = "atest1v4ehgw36xdzryve5gsc52veeg5cnsv2yx5eygvp38qcrvd29xy6rys6p8yc5xvp4xfpy2v694wgwcp"
Expand Down Expand Up @@ -136,9 +140,12 @@ vp = "vp_masp"

[implicit.Ester]

[implicit.Test]
[established.TestA]
address = "atest1d9khqw36xccyydp3xpznjvzrx3zrq3fexep5y33nxverqdz9xcc5ydeexgm52djrxvuyxsjr44hd2f"

[established.TestB]
address = "atest1d9khqw368qury3phx3prsvp4gezrssenxqmyxwpn8qmrqvpsg4znjdjp8ycry3p3g4p5vd6x66dnmw"

# Wasm VP definitions

# Implicit VP
Expand Down
9 changes: 6 additions & 3 deletions e2e/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,26 @@
"lint": "npx eslint src --ext .ts",
"lint:fix": "yarn lint -- --fix",
"lint:ci": "yarn lint --max-warnings 0",
"setup": "./setup-tests.sh",
"setup": "/setup-frontend.sh",
"test": "jest --runInBand",
"test:watch": "jest --watch",
"test:watch": "jest --watch --runInBand",
"e2e": "start-server-and-test setup http://localhost:3000 test"
},
"dependencies": {
"typescript": "^5.1.3"
},
"devDependencies": {
"@types/jest": "^29.0.0",
"@types/node": "^20.4.2",
"@types/puppeteer": "^7.0.4",
"eslint": "^8.23.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-prettier": "^8.5.0",
"eslint-import-resolver-typescript": "^3.5.1",
"http-server": "^14.1.1",
"jest": "^29.0.2",
"jest-puppeteer": "^9.0.0",
"puppeteer": "^20.8.2"
"puppeteer": "^20.8.2",
"terminate": "^2.6.1"
}
}
29 changes: 29 additions & 0 deletions e2e/setup-frontend.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash -x
CHAIN_ID="dev-test.000000000000000000000"

# Run the extension
cd ../apps/extension && \
yarn clean:chrome && \
export NODE_ENV=development; \
export TARGET=chrome; \
export REACT_APP_NAMADA_CHAIN_ID=${CHAIN_ID}; \
export REACT_APP_NAMADA_URL=http://127.0.0.1:27657 && \
npx webpack --watch &

# Run the interface
cd ../namada-interface && \
export NODE_ENV=development; \
export REACT_APP_LOCAL=true; \
export REACT_APP_NAMADA_CHAIN_ID=${CHAIN_ID}; \
export REACT_APP_NAMADA_URL=http://127.0.0.1:27657 && \
npx webpack --watch &

cd ../../e2e

npx http-server -p 8080 -c-1 ../apps/namada-interface/build

# Sleep indefinitely
while :; do sleep 86400; done

# Kill all processes on exit
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
75 changes: 75 additions & 0 deletions e2e/setup-namada.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#!/bin/bash -x

VERSION="v0.19.0"
CURRENT_VERSION=""
NAMADA_DIR=".namada"
NAMADA_BASE_DIR=".namada/basedir"

# Read current version
CURRENT_VERSION_PATH="${NAMADA_DIR}/.version"
if test -f "$CURRENT_VERSION_PATH"; then
while read -r line;
do
CURRENT_VERSION=$line

done < "$CURRENT_VERSION_PATH"
fi

if [ "$CURRENT_VERSION" != "$VERSION" ]; then
# Download Namada binaries
FILENAME="namada-${VERSION}-Linux-x86_64.tar.gz"
curl --location --remote-header-name --remote-name https://github.com/anoma/namada/releases/download/${VERSION}/${FILENAME}
mkdir $NAMADA_DIR
tar -xzf ${FILENAME} --directory $NAMADA_DIR --strip-components 1
rm -rf ${FILENAME}

# Download wasm checksums
curl --location --remote-header-name --remote-name https://raw.githubusercontent.com/anoma/namada/${VERSION}/wasm/checksums.json
mv checksums.json "${NAMADA_DIR}/checksums.json"

# Download wasms
CHECKSUMS="${NAMADA_DIR}/checksums.json"
WASM=""
S3="https://namada-wasm-master.s3.eu-west-1.amazonaws.com"

rm -rf "${NAMADA_DIR}/wasm"
mkdir "${NAMADA_DIR}/wasm"

while read -r line;
do
WASM=$(echo "$line" | sed -E "s/\".+\":\s\"//g" | sed -E "s/\".*//g");
curl "${S3}/${WASM}" --output "${NAMADA_DIR}/wasm/${WASM}"

done < "$CHECKSUMS"

# Save version
echo "${VERSION}" > "${NAMADA_DIR}/.version"
fi

# Clear the basedir
rm -rf $NAMADA_BASE_DIR

"${NAMADA_DIR}/namadac" --base-dir $NAMADA_BASE_DIR utils init-network \
--chain-prefix dev-test \
--wasm-checksums-path "${NAMADA_DIR}/checksums.json" \
--genesis-path genesis.toml \
--dont-archive \
--unsafe-dont-encrypt

CONFIG="${NAMADA_BASE_DIR}/global-config.toml"
CHAIN_ID=""

# Read CHAIN_ID from global-config.toml
while read -r line;
do
CHAIN_ID=$(echo "$line" | sed "s/default_chain_id = \"//g" | sed "s/\"//");

done < "$CONFIG"

# Copy wasms
cp -f ${NAMADA_DIR}/wasm/*.wasm ${NAMADA_BASE_DIR}/${CHAIN_ID}/setup/validator-0/.namada/${CHAIN_ID}/wasm/
cp -f ${NAMADA_DIR}/wasm/*.wasm ${NAMADA_BASE_DIR}/${CHAIN_ID}/wasm/

# Override envs - so we do not have to rebuild extension and app
find ../apps/extension/build/chrome -type f -exec sed -i -E "s/dev-test\..{21}/$CHAIN_ID/g" {} +
find ../apps/namada-interface/build -type f -exec sed -i -E "s/dev-test\..{21}/$CHAIN_ID/g" {} +
91 changes: 0 additions & 91 deletions e2e/setup-tests.sh

This file was deleted.

47 changes: 45 additions & 2 deletions e2e/src/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,16 @@
*/
import * as puppeteer from "puppeteer";
import nodePath from "node:path";
import { ChildProcess, exec } from "child_process";
import terminate from "terminate/promise";
import util from "node:util";

import { mnemonic, pwdOrAlias } from "./utils/values";
import { targetPage, waitForXpath } from "./utils/helpers";

// promisify exec
const execPromise = util.promisify(exec);

const root = nodePath.resolve(process.cwd(), "..");
const path = `${root}/apps/extension/build/chrome`;

Expand All @@ -15,7 +21,7 @@ const puppeteerArgs = [
`--load-extension=${path}`,
"--disable-features=DialMediaRouteProvider",
];
jest.setTimeout(120000);
jest.setTimeout(70000);

let browser: puppeteer.Browser;
let page: puppeteer.Page;
Expand All @@ -36,7 +42,7 @@ const getExtensionId = async (): Promise<string> => {
};

const openInterface = async (): Promise<void> => {
await page.goto("http://localhost:3000", {
await page.goto("http://localhost:8080", {
waitUntil: ["domcontentloaded"],
});
};
Expand All @@ -59,8 +65,27 @@ const openSetup = async (): Promise<void> => {
});
};

function startNamada(namRefs: Set<ChildProcess>): ChildProcess {
const nam = exec(`sh ${process.cwd()}/start-namada.sh`);
namRefs.add(nam);
return nam;
}

async function setupNamada(): Promise<void> {
await execPromise(`sh ${process.cwd()}/setup-namada.sh`);
}

async function stopNamada(namada: ChildProcess): Promise<void> {
if (namada.pid) {
await terminate(namada.pid);
}
}

describe("Namada extension", () => {
const namRefs = new Set<ChildProcess>();

beforeEach(async function () {
await setupNamada();
browser = await puppeteer.launch({
headless: false,
slowMo: 50,
Expand All @@ -73,6 +98,20 @@ describe("Namada extension", () => {
await browser.close();
});

afterAll(async () => {
for await (const namada of namRefs) {
// We want to stop the namada process only if:
// - process is NOT about to stop - SIGKILL
// - process is NOT already stopped - exitCode is not set
const stop = !(
namada.signalCode === "SIGKILL" || namada.exitCode !== null
);
if (stop) {
await stopNamada(namada);
}
}
});

describe("open the popup", () => {
test("should open the popup", async () => {
await openPopup();
Expand All @@ -84,6 +123,8 @@ describe("Namada extension", () => {

describe("send transfer", () => {
test("should send transfer", async () => {
const nam = startNamada(namRefs);

await openSetup();

// Check H1
Expand Down Expand Up @@ -205,6 +246,8 @@ describe("Namada extension", () => {
const toast = await page.waitForXPath(
"//div[contains(., 'Transfer successful!')]"
);

await stopNamada(nam);
expect(toast).toBeDefined();
});
});
Expand Down
16 changes: 16 additions & 0 deletions e2e/start-namada.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash -x

NAMADA_DIR=".namada"
NAMADA_BASE_DIR=".namada/basedir"

CONFIG="${NAMADA_BASE_DIR}/global-config.toml"

# Read CHAIN_ID from global-config.toml
while read -r line;
do
CHAIN_ID=$(echo "$line" | sed "s/default_chain_id = \"//g" | sed "s/\"//");

done < "$CONFIG"

# Start the chain
"${NAMADA_DIR}/namadan" --chain-id ${CHAIN_ID} --base-dir ${NAMADA_BASE_DIR}/${CHAIN_ID}/setup/validator-0/.namada ledger
Loading

0 comments on commit 6568e7c

Please sign in to comment.