Skip to content

Commit

Permalink
Add reorged docker compose (#1579)
Browse files Browse the repository at this point in the history
  • Loading branch information
ayrat555 committed Jul 9, 2020
1 parent e6f0c23 commit 8aebb53
Show file tree
Hide file tree
Showing 21 changed files with 667 additions and 58 deletions.
88 changes: 85 additions & 3 deletions .circleci/config.yml
Expand Up @@ -160,9 +160,12 @@ jobs:
- priv
- data
- snapshots.env
- snapshot_reorg.env
- nginx.conf
- contract_addresses_template.env
- localchain_contract_addresses.env


audit_deps:
executor: builder
environment:
Expand Down Expand Up @@ -281,7 +284,7 @@ jobs:
# if mix failed, then coveralls_report won't run, so signal done here and return original exit status
(retval=$? && curl -k https://coveralls.io/webhook?repo_token=$COVERALLS_REPO_TOKEN -d "payload[build_num]=$CIRCLE_WORKFLOW_WORKSPACE_ID&payload[status]=done" && exit $retval)
fi
watcher_info_coveralls_and_integration_tests:
executor: builder_pg_geth
environment:
Expand Down Expand Up @@ -526,6 +529,82 @@ jobs:
cd priv/perf
mix do credo, format --check-formatted --dry-run
test_docker_compose_reorg:
machine:
image: ubuntu-1604:201903-01
environment:
REORG: true
steps:
- checkout
- run:
name: Setup data dir
command: |
[ -d data1 ] || mkdir data1 && chmod 777 data1
[ -d data2 ] || mkdir data2 && chmod 777 data2
[ -d data ] || mkdir data && chmod 777 data
- run: make docker-child_chain
- run: make docker-watcher
- run: make docker-watcher_info
- run:
name: Start daemon services
command: |
cd priv/cabbage
make start_daemon_services_reorg || (START_RESULT=$?; docker-compose logs; exit $START_RESULT;)
- run:
name: Print docker states
command: |
docker image ls
docker-compose ps
- restore_cache:
key: v2-asdf-install
- run:
name: Install Erlang and Elixir
command: |
[ -d ~/.asdf-vm ] || git clone https://github.com/asdf-vm/asdf.git ~/.asdf-vm --branch v0.7.4
echo 'source ~/.asdf-vm/asdf.sh' >> $BASH_ENV
source $BASH_ENV
asdf plugin-add erlang || asdf plugin-update erlang
asdf plugin-add elixir || asdf plugin-update elixir
asdf install erlang 22.3
asdf install elixir 1.10.2
asdf global elixir 1.10.2
asdf global erlang 22.3
no_output_timeout: 2400
- save_cache:
key: v2-asdf-install
paths:
- ~/.asdf
- ~/.asdf-vm
- run: make install-hex-rebar
- run: sh .circleci/status.sh
- restore_cache:
key: v2-mix-specs-cache-{{ .Branch }}-{{ checksum "mix.lock" }}
- run:
name: Print watcher logs
command: docker-compose -f docker-compose.yml -f ./priv/cabbage/docker-compose-reorg.yml -f ./priv/cabbage/docker-compose-cabbage.yml logs --follow watcher
background: true
- run:
name: Print watcher_info logs
command: docker-compose -f docker-compose.yml -f ./priv/cabbage/docker-compose-reorg.yml -f ./priv/cabbage/docker-compose-cabbage.yml logs --follow watcher_info
background: true
- run:
name: Print childchain logs
command: docker-compose -f docker-compose.yml -f ./priv/cabbage/docker-compose-reorg.yml -f ./priv/cabbage/docker-compose-cabbage.yml logs --follow childchain
background: true
- run:
name: Print reorg logs
command: docker-compose -f docker-compose.yml -f ./priv/cabbage/docker-compose-reorg.yml -f ./priv/cabbage/docker-compose-cabbage.yml logs --follow | grep "reorg"
background: true
- run:
name: Run specs
command: |
cd priv/cabbage
make install
make generate_api_code
mix deps.get
mix test --only reorg --trace
no_output_timeout: 30m

test_barebone_release:
machine:
image: ubuntu-1604:201903-01
Expand Down Expand Up @@ -653,7 +732,7 @@ jobs:
steps:
- checkout
- run: make docker-watcher WATCHER_IMAGE_NAME=$WATCHER_IMAGE_NAME
- run:
- run:
name: "cp release"
command: |
mkdir current_release/
Expand All @@ -671,7 +750,7 @@ jobs:
steps:
- checkout
- run: make docker-watcher_info WATCHER_INFO_IMAGE_NAME=$WATCHER_INFO_IMAGE_NAME
- run:
- run:
name: "cp release"
command: |
mkdir current_release/
Expand Down Expand Up @@ -804,6 +883,9 @@ workflows:
- test_docker_compose_release:
requires: [build]
filters: *all_branches_and_tags
- test_docker_compose_reorg:
requires: [build]
filters: *all_branches_and_tags
- audit_deps:
requires: [build]
filters: *all_branches_and_tags
Expand Down
35 changes: 34 additions & 1 deletion Makefile
Expand Up @@ -219,6 +219,37 @@ init-contracts: clean-contracts
PLASMA_FRAMEWORK_TX_HASH=$$PLASMA_FRAMEWORK_TX_HASH PLASMA_FRAMEWORK=$$PLASMA_FRAMEWORK \
PAYMENT_EIP712_LIBMOCK=$$PAYMENT_EIP712_LIBMOCK MERKLE_WRAPPER=$$MERKLE_WRAPPER ERC20_MINTABLE=$$ERC20_MINTABLE

init-contracts-reorg: clean-contracts
mkdir data1/ || true && \
mkdir data2/ || true && \
mkdir data/ || true && \
URL=$$(grep "SNAPSHOT" snapshot_reorg.env | cut -d'=' -f2-) && \
curl -o data1/snapshot.tar.gz $$URL && \
cd data1 && \
tar --strip-components 1 -zxvf snapshot.tar.gz data/geth && \
tar --exclude=data/* -xvzf snapshot.tar.gz && \
mv snapshot.tar.gz ../data2/snapshot.tar.gz && \
cd ../data2 && \
tar --strip-components 1 -zxvf snapshot.tar.gz data/geth && \
tar --exclude=data/* -xvzf snapshot.tar.gz && \
mv snapshot.tar.gz ../data/snapshot.tar.gz && \
cd ../data && \
tar --strip-components 1 -zxvf snapshot.tar.gz data/geth && \
tar --exclude=data/* -xvzf snapshot.tar.gz && \
AUTHORITY_ADDRESS=$$(cat plasma-contracts/build/authority_address) && \
ETH_VAULT=$$(cat plasma-contracts/build/eth_vault) && \
ERC20_VAULT=$$(cat plasma-contracts/build/erc20_vault) && \
PAYMENT_EXIT_GAME=$$(cat plasma-contracts/build/payment_exit_game) && \
PLASMA_FRAMEWORK_TX_HASH=$$(cat plasma-contracts/build/plasma_framework_tx_hash) && \
PLASMA_FRAMEWORK=$$(cat plasma-contracts/build/plasma_framework) && \
PAYMENT_EIP712_LIBMOCK=$$(cat plasma-contracts/build/paymentEip712LibMock) && \
MERKLE_WRAPPER=$$(cat plasma-contracts/build/merkleWrapper) && \
ERC20_MINTABLE=$$(cat plasma-contracts/build/erc20Mintable) && \
sh ../bin/generate-localchain-env AUTHORITY_ADDRESS=$$AUTHORITY_ADDRESS ETH_VAULT=$$ETH_VAULT \
ERC20_VAULT=$$ERC20_VAULT PAYMENT_EXIT_GAME=$$PAYMENT_EXIT_GAME \
PLASMA_FRAMEWORK_TX_HASH=$$PLASMA_FRAMEWORK_TX_HASH PLASMA_FRAMEWORK=$$PLASMA_FRAMEWORK \
PAYMENT_EIP712_LIBMOCK=$$PAYMENT_EIP712_LIBMOCK MERKLE_WRAPPER=$$MERKLE_WRAPPER ERC20_MINTABLE=$$ERC20_MINTABLE

.PHONY: init-contracts

#
Expand All @@ -227,6 +258,8 @@ init-contracts: clean-contracts

init_test: init-contracts

init_test_reorg: init-contracts-reorg

test:
mix test --include test --exclude common --exclude watcher --exclude watcher_info --exclude child_chain

Expand Down Expand Up @@ -377,7 +410,7 @@ docker-remote-childchain:
###
start-services:
SNAPSHOT=SNAPSHOT_MIX_EXIT_PERIOD_SECONDS_120 make init_test && \
docker-compose up geth postgres
docker-compose up geth nginx postgres

start-child_chain:
. ${OVERRIDING_VARIABLES} && \
Expand Down
58 changes: 49 additions & 9 deletions docker-compose.yml
Expand Up @@ -14,6 +14,9 @@ services:
interval: 5s
timeout: 3s
retries: 5
networks:
chain_net:
ipv4_address: 172.27.0.106

geth:
image: ethereum/client-go:v1.9.12
Expand Down Expand Up @@ -47,8 +50,8 @@ services:
--mine \
--allow-insecure-unlock
ports:
- "8545:8545"
- "8546:8546"
- "8555:8545"
- "8556:8546"
expose:
- "8546"
- "8545"
Expand All @@ -59,6 +62,27 @@ services:
interval: 5s
timeout: 3s
retries: 5
networks:
chain_net:
ipv4_address: 172.27.0.101

nginx:
image: nginx:latest
container_name: nginx
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
ports:
- 8545:80
- 8546:81
- 443:443
healthcheck:
test: curl nginx:80
interval: 5s
timeout: 3s
retries: 5
networks:
chain_net:
ipv4_address: 172.27.0.102

childchain:
image: omisego/child_chain:latest
Expand All @@ -68,7 +92,7 @@ services:
- ./localchain_contract_addresses.env
environment:
- ETHEREUM_NETWORK=LOCALCHAIN
- ETHEREUM_RPC_URL=http://geth:8545
- ETHEREUM_RPC_URL=http://172.27.0.102:80
- APP_ENV=local_docker_development
- DD_HOSTNAME=datadog
- DD_DISABLED=true
Expand Down Expand Up @@ -97,8 +121,11 @@ services:
retries: 5
start_period: 30s
depends_on:
geth:
nginx:
condition: service_healthy
networks:
chain_net:
ipv4_address: 172.27.0.103

watcher:
image: omisego/watcher:latest
Expand All @@ -108,8 +135,8 @@ services:
- ./localchain_contract_addresses.env
environment:
- ETHEREUM_NETWORK=LOCALCHAIN
- ETHEREUM_RPC_URL=http://geth:8545
- CHILD_CHAIN_URL=http://childchain:9656
- ETHEREUM_RPC_URL=http://172.27.0.102:80
- CHILD_CHAIN_URL=http://172.27.0.103:9656
- PORT=7434
- APP_ENV=local_docker_development
- DD_HOSTNAME=datadog
Expand Down Expand Up @@ -139,6 +166,9 @@ services:
depends_on:
childchain:
condition: service_healthy
networks:
chain_net:
ipv4_address: 172.27.0.104

watcher_info:
image: omisego/watcher_info:latest
Expand All @@ -148,9 +178,9 @@ services:
- ./localchain_contract_addresses.env
environment:
- ETHEREUM_NETWORK=LOCALCHAIN
- ETHEREUM_RPC_URL=http://geth:8545
- CHILD_CHAIN_URL=http://childchain:9656
- DATABASE_URL=postgresql://omisego_dev:omisego_dev@postgres:5432/omisego_dev
- ETHEREUM_RPC_URL=http://172.27.0.102:80
- CHILD_CHAIN_URL=http://172.27.0.103:9656
- DATABASE_URL=postgresql://omisego_dev:omisego_dev@172.27.0.106:5432/omisego_dev
- PORT=7534
- APP_ENV=local_docker_development
- DD_HOSTNAME=datadog
Expand Down Expand Up @@ -181,3 +211,13 @@ services:
condition: service_healthy
postgres:
condition: service_healthy
networks:
chain_net:
ipv4_address: 172.27.0.105

networks:
chain_net:
driver: bridge
ipam:
config:
- subnet: 172.27.0.0/24
24 changes: 24 additions & 0 deletions nginx.conf
@@ -0,0 +1,24 @@
events {}
http {
server {
listen 80;

location / {
proxy_pass http://172.27.0.101:8545;
}
}

server {
listen 81;

location / {
proxy_pass http://172.27.0.101:8546;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_connect_timeout 7d;
proxy_send_timeout 7d;
proxy_read_timeout 7d;
}
}
}
6 changes: 6 additions & 0 deletions priv/cabbage/Makefile
Expand Up @@ -14,6 +14,12 @@ start_daemon_services:
cd priv/cabbage/ && \
docker-compose -f ../../docker-compose.yml -f docker-compose-cabbage.yml up -d

start_daemon_services_reorg:
cd ../../ && \
make init_test_reorg && \
cd priv/cabbage/ && \
docker-compose -f ../../docker-compose.yml -f docker-compose-reorg.yml -f docker-compose-cabbage.yml up -d

generate-security_critical_api_specs:
priv/openapitools/openapi-generator-cli generate -i ../../apps/omg_watcher_rpc/priv/swagger/security_critical_api_specs.yaml -g elixir -o apps/watcher_security_critical_api

Expand Down
19 changes: 14 additions & 5 deletions priv/cabbage/apps/itest/lib/account.ex
Expand Up @@ -17,14 +17,15 @@ defmodule Itest.Account do
Maintaining used accounts state so that we're able to run tests multiple times.
"""

alias Itest.Reorg
alias Itest.Transactions.Encoding
import Itest.Poller, only: [wait_on_receipt_confirmed: 1]

@spec take_accounts(integer()) :: map()
def take_accounts(number_of_accounts) do
1..number_of_accounts
|> Task.async_stream(fn _ -> account() end,
timeout: 60_000,
timeout: 120_000,
on_timeout: :kill_task,
max_concurrency: System.schedulers_online() * 2
)
Expand All @@ -46,7 +47,11 @@ defmodule Itest.Account do

wait_on_receipt_confirmed(receipt_hash)

{:ok, true} = Ethereumex.HttpClient.request("personal_unlockAccount", [addr, "dev.period", 0], [])
if Application.get_env(:cabbage, :reorg) do
Reorg.unlock_account(addr, passphrase)
else
{:ok, true} = Ethereumex.HttpClient.request("personal_unlockAccount", [addr, passphrase, 0], [])
end

{addr, account_priv_enc}
end
Expand Down Expand Up @@ -79,9 +84,13 @@ defmodule Itest.Account do
{:ok, address}
end

defp hash(message), do: ExthCrypto.Hash.hash(message, ExthCrypto.Hash.kec())

defp create_account_from_secret(secret, passphrase) do
Ethereumex.HttpClient.request("personal_importRawKey", [secret, passphrase], [])
if Application.get_env(:cabbage, :reorg) do
Reorg.create_account_from_secret(secret, passphrase)
else
Ethereumex.HttpClient.request("personal_importRawKey", [secret, passphrase], [])
end
end

defp hash(message), do: ExthCrypto.Hash.hash(message, ExthCrypto.Hash.kec())
end

0 comments on commit 8aebb53

Please sign in to comment.