decred.org/dcrdex@v1.0.5/dex/testing/dcrdex/harness.sh (about)

     1  #!/usr/bin/env bash
     2  # Tmux script that configures and runs dcrdex.
     3  
     4  set -e
     5  
     6  # Setup test data dir for dcrdex.
     7  TEST_ROOT=~/dextest
     8  DCRDEX_DATA_DIR=${TEST_ROOT}/dcrdex
     9  rm -rf "${DCRDEX_DATA_DIR}"
    10  mkdir -p "${DCRDEX_DATA_DIR}"
    11  
    12  # Rebuild dcrdex with the required simnet locktime settings.
    13  HARNESS_DIR=$(
    14    cd $(dirname "$0")
    15    pwd
    16  )
    17  
    18  # Build script
    19  cat > "${DCRDEX_DATA_DIR}/build" <<EOF
    20  #!/usr/bin/env bash
    21  cd ${HARNESS_DIR}/../../../server/cmd/dcrdex/
    22  go build -o ${DCRDEX_DATA_DIR}/dcrdex -ldflags \
    23      "-X 'decred.org/dcrdex/dex.testLockTimeTaker=1m' \
    24      -X 'decred.org/dcrdex/dex.testLockTimeMaker=2m'"
    25  EOF
    26  chmod +x "${DCRDEX_DATA_DIR}/build"
    27  
    28  cat > "${DCRDEX_DATA_DIR}/build-lock" <<EOF
    29  #!/usr/bin/env bash
    30  cd ${HARNESS_DIR}/../../../server/cmd/dcrdex/
    31  go build -o ${DCRDEX_DATA_DIR}/dcrdex -ldflags \
    32      "-X 'decred.org/dcrdex/dex.testLockTimeTaker=\${1:-3m}' \
    33      -X 'decred.org/dcrdex/dex.testLockTimeMaker=\${2:-6m}'"
    34  EOF
    35  chmod +x "${DCRDEX_DATA_DIR}/build-lock"
    36  
    37  "${DCRDEX_DATA_DIR}/build"
    38  
    39  cd "${DCRDEX_DATA_DIR}"
    40  
    41  # Drop and re-create the test db.
    42  TEST_DB=dcrdex_simnet_test
    43  sudo -u postgres -H psql -c "DROP DATABASE IF EXISTS ${TEST_DB}" \
    44  -c "CREATE DATABASE ${TEST_DB} OWNER dcrdex"
    45  
    46  # Write dcrdex.conf. The regfeexpub comes from the alpha>server_fees account.
    47  cat << EOF >> ./dcrdex.conf
    48  pgdbname=${TEST_DB}
    49  simnet=1
    50  rpclisten=127.0.0.1:17273
    51  debuglevel=trace
    52  loglocal=true
    53  signingkeypass=keypass
    54  adminsrvon=1
    55  adminsrvpass=adminpass
    56  adminsrvaddr=127.0.0.1:16542
    57  bcasttimeout=1m
    58  # freecancels=1
    59  maxepochcancels=128
    60  httpprof=1
    61  noderelayaddr=127.0.0.1:17539
    62  EOF
    63  
    64  # Set the postgres user pass if provided.
    65  if [ -n "${PG_PASS}" ]; then
    66  echo pgpass="${PG_PASS}" >> ./dcrdex.conf
    67  fi
    68  
    69  # Write rpc.cert and rpc.key.
    70  cat > "./rpc.cert" <<EOF
    71  -----BEGIN CERTIFICATE-----
    72  MIICpTCCAgagAwIBAgIQZMfxMkSi24xMr4CClCODrzAKBggqhkjOPQQDBDBJMSIw
    73  IAYDVQQKExlkY3JkZXggYXV0b2dlbmVyYXRlZCBjZXJ0MSMwIQYDVQQDExp1YnVu
    74  dHUtcy0xdmNwdS0yZ2ItbG9uMS0wMTAeFw0yMDA2MDgxMjM4MjNaFw0zMDA2MDcx
    75  MjM4MjNaMEkxIjAgBgNVBAoTGWRjcmRleCBhdXRvZ2VuZXJhdGVkIGNlcnQxIzAh
    76  BgNVBAMTGnVidW50dS1zLTF2Y3B1LTJnYi1sb24xLTAxMIGbMBAGByqGSM49AgEG
    77  BSuBBAAjA4GGAAQApXJpVD7si8yxoITESq+xaXWtEpsCWU7X+8isRDj1cFfH53K6
    78  /XNvn3G+Yq0L22Q8pMozGukA7KuCQAAL0xnuo10AecWBN0Zo2BLHvpwKkmAs71C+
    79  5BITJksqFxvjwyMKbo3L/5x8S/JmAWrZoepBLfQ7HcoPqLAcg0XoIgJjOyFZgc+j
    80  gYwwgYkwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB/wQFMAMBAf8wZgYDVR0RBF8w
    81  XYIadWJ1bnR1LXMtMXZjcHUtMmdiLWxvbjEtMDGCCWxvY2FsaG9zdIcEfwAAAYcQ
    82  AAAAAAAAAAAAAAAAAAAAAYcEsj5QQYcEChAABYcQ/oAAAAAAAAAYPqf//vUPXDAK
    83  BggqhkjOPQQDBAOBjAAwgYgCQgFMEhyTXnT8phDJAnzLbYRktg7rTAbTuQRDp1PE
    84  jf6b2Df4DkSX7JPXvVi3NeBru+mnrOkHBUMqZd0m036aC4q/ZAJCASa+olu4Isx7
    85  8JE3XB6kGr+s48eIFPtmq1D0gOvRr3yMHrhJe3XDNqvppcHihG0qNb0gyaiX18Cv
    86  vF8Ti1x2vTkD
    87  -----END CERTIFICATE-----
    88  EOF
    89  cat > "./rpc.key" <<EOF
    90  -----BEGIN EC PRIVATE KEY-----
    91  MIHcAgEBBEIADTDRCsp8om9OhJa+m46FZ5IhgLAno1Rp6B0i2lqESL5x9vV/upiV
    92  TbNzCeFqEY5/Ujra9f8ZovqMlrIQmNOaZFmgBwYFK4EEACOhgYkDgYYABAClcmlU
    93  PuyLzLGghMRKr7Fpda0SmwJZTtf7yKxEOPVwV8fncrr9c2+fcb5irQvbZDykyjMa
    94  6QDsq4JAAAvTGe6jXQB5xYE3RmjYEse+nAqSYCzvUL7kEhMmSyoXG+PDIwpujcv/
    95  nHxL8mYBatmh6kEt9Dsdyg+osByDRegiAmM7IVmBzw==
    96  -----END EC PRIVATE KEY-----
    97  EOF
    98  
    99  # DEX admin script
   100  cat > "${DCRDEX_DATA_DIR}/dexadm" <<EOF
   101  #!/usr/bin/env bash
   102  if [[ "\$#" -eq "2" ]]; then
   103      curl --cacert ${DCRDEX_DATA_DIR}/rpc.cert --basic -u u:adminpass --header "Content-Type: text/plain" --data-binary "\$2" https://127.0.0.1:16542/api/\$1
   104  else
   105      curl --cacert ${DCRDEX_DATA_DIR}/rpc.cert --basic -u u:adminpass https://127.0.0.1:16542/api/\$1
   106  fi
   107  EOF
   108  chmod +x "${DCRDEX_DATA_DIR}/dexadm"
   109  
   110  SESSION="dcrdex-harness"
   111  
   112  export SHELL=$(which bash)
   113  
   114  # Shutdown script
   115  cat > "${DCRDEX_DATA_DIR}/quit" <<EOF
   116  #!/usr/bin/env bash
   117  tmux send-keys -t $SESSION:0 C-c
   118  if [ -n "${NODERELAY}" ] ; then
   119    tmux send-keys -t $SESSION:1 C-c
   120    tmux wait-for donenoderelay
   121  fi
   122  tmux wait-for donedex
   123  tmux kill-session -t $SESSION
   124  EOF
   125  chmod +x "${DCRDEX_DATA_DIR}/quit"
   126  
   127  cat > "${DCRDEX_DATA_DIR}/run" <<EOF
   128  #!/usr/bin/env bash
   129  ${HARNESS_DIR}/genmarkets.sh
   130  ${DCRDEX_DATA_DIR}/dcrdex --appdata=$(pwd) \$*; tmux wait-for -S donedex
   131  EOF
   132  chmod +x "${DCRDEX_DATA_DIR}/run"
   133  
   134  echo "Starting dcrdex"
   135  tmux new-session -d -s $SESSION $SHELL
   136  tmux rename-window -t $SESSION:0 'dcrdex'
   137  
   138  if [ -n "${NODERELAY}" ]; then
   139      tmux send-keys -t $SESSION:0 "export NODERELAY=1" C-m
   140  
   141      # These match the values in genmarkets.sh
   142      BTC_NODERELAY_ID="btc_a21afba3"
   143      DCR_NODERELAY_ID="dcr_a21afba3"
   144  
   145      SOURCENODE_DIR=$(realpath "${HARNESS_DIR}/../../../server/noderelay/cmd/sourcenode/")
   146      cd ${SOURCENODE_DIR}
   147      go build -o ${DCRDEX_DATA_DIR}/sourcenode
   148      cd "${DCRDEX_DATA_DIR}"
   149  
   150      RPC_PORT="20556"
   151      RELAYFILE="${DCRDEX_DATA_DIR}/data/simnet/noderelay/relay-files/${BTC_NODERELAY_ID}.relayfile"
   152  
   153      tmux new-window -t $SESSION:1 -n 'sourcenode_btc' $SHELL
   154      # dcrdex needs to write the relayfiles.
   155      tmux send-keys -t $SESSION:1 "sleep 4" C-m
   156      tmux send-keys -t $SESSION:1 "./sourcenode --port ${RPC_PORT} --relayfile ${RELAYFILE}; tmux wait-for -S donenoderelay" C-m
   157  
   158      # Decred
   159      RPC_PORT="19561"
   160      RELAYFILE="${DCRDEX_DATA_DIR}/data/simnet/noderelay/relay-files/${DCR_NODERELAY_ID}.relayfile"
   161      DCRD_CERT="${TEST_ROOT}/dcr/alpha/rpc.cert"
   162  
   163      tmux new-window -t $SESSION:2 -n 'sourcenode_dcr' $SHELL
   164      tmux send-keys -t $SESSION:2 "sleep 4" C-m
   165      tmux send-keys -t $SESSION:2 "./sourcenode --port ${RPC_PORT} --relayfile ${RELAYFILE} --localcert ${DCRD_CERT}; tmux wait-for -S donenoderelay" C-m
   166  fi
   167  
   168  tmux send-keys -t $SESSION:0 "${DCRDEX_DATA_DIR}/run" C-m
   169  tmux select-window -t $SESSION:0
   170  tmux attach-session -t $SESSION