github.com/metacurrency/holochain@v0.1.0-alpha-26.0.20200915073418-5c83169c9b5b/bin/holochain.app.testScenario (about)

     1  #!/usr/bin/env bash
     2  echo "HC: $0"
     3  
     4  holochainBinDir="$GOPATH/src/github.com/holochain/holochain-proto/bin"
     5  
     6  scenarioName=$1
     7  
     8  #set the HOLOCHAIN_SYSTEM_BIN variable
     9  . $holochainBinDir/holochain.system.checkInstalled || { echo "HC: cannot find holochain bin directory. exiting" && exit 1 ; }
    10  #set the HOLOCHAIN_APPNAME and HOLOCHAIN_APPDIR variables
    11  . $holochainBinDir/holochain.app.findAppDir ||  exit 1
    12  
    13  
    14  export dockerBaseRun=" -e LOCAL_USER_ID=`id -u $USER` "
    15  export LOCAL_USER_ID=`id -u $USER`
    16  
    17  . $HOLOCHAIN_SYSTEM_BIN/app/createRuntime || exit 1
    18  
    19  #creates a single script for each role in the testScenario, which is run by the respective container
    20  $HOLOCHAIN_SYSTEM_BIN/app/testScenario.createClusterScripts $scenarioName || exit 1
    21  
    22  #begin log for this session
    23  logFile=$HOLOCHAIN_APPLOGDIR/testScenario.$scenarioName.log
    24  printf "########################################################################\n########################################################################\n########################################################################\n" | tee -a $logFile
    25  echo "HC: testScenario $scenarioName started `date`" | tee -a $HOLOCHAIN_APPLOGDIR/cluster.log >> $logFile
    26  
    27  set -x
    28  
    29  ####docker stuff
    30  mkdir -p "$HOLOCHAIN_APPDIR/runtime/docker" > /dev/null
    31  #cp the Dockerfile in preparation for dependency injection
    32  cp $HOLOCHAIN_SYSTEM_BIN/../docker/app.docker/Dockerfile.BASE $HOLOCHAIN_APPDIR/runtime/docker/Dockerfile.BASE
    33  #build the image to use as the base for the bs instance and hc instances
    34  
    35  holochainImageTag="holochain.app.testing.$HOLOCHAIN_APP_MACHINENAME"
    36  docker image inspect Holochain/holochain-proto/core.docker.forapptests || { printf "HC: no current docker image for testing app.\n\n  run: $ holochain.system.buildImageForAppTests" && exit 1 ; }
    37  docker build --no-cache=true -f $HOLOCHAIN_APPDIR/runtime/docker/Dockerfile.BASE -t $holochainImageTag $HOLOCHAIN_APPDIR
    38  
    39  
    40  #TODO COMMENT AND MAKE WORK
    41  #CONSTANTS
    42  systemAppDockerDir="$HOLOCHAIN_SYSTEM_BIN/../docker/app.docker"
    43  appAppDockerDir="$HOLOCHAIN_APPDIR/runtime/docker"
    44  
    45  #appScriptDir="$HOLOCHAIN_APPDIR/runtime/Scripts"
    46  
    47  #configureThis
    48  systemDockerCompose="$systemAppDockerDir/docker-compose.with.bs.syncedHCMultiNode.yml"
    49  #constants
    50  appDockerCompose="$HOLOCHAIN_APPDIR/__tmp__.holochain.2134837348734.docker-compose.runCluster.yml"
    51  rm $appDockerCompose &> /dev/null
    52  ln $systemDockerCompose $appDockerCompose
    53  
    54  #these depend on what your systemDockerCompose file requires
    55  dockerfiles="app.seedService app.bsService app.syncedHCMultiNode app.syncedHCMultiNode.releaseSyncService app.externalStartEvent"
    56  for dockerFileName in $dockerfiles
    57  do
    58    cp "$systemAppDockerDir/Dockerfile.$dockerFileName" "$appAppDockerDir/Dockerfile.$dockerFileName"
    59  done
    60  sed -i'' s/{{FROM_DOCKERIMAGETAG}}/$holochainImageTag/g $appAppDockerDir/Dockerfile.app.*
    61  
    62  #give access to the scripts .. maybe, might not work ( symlinks )
    63  ln -s $HOLOCHAIN_SYSTEM_BIN/../docker/app.docker $HOLOCHAIN_APPDIR/runtime/Scripts
    64  
    65  #add own flowcontrol over docker start order
    66  mkdir -p $HOLOCHAIN_APPDIR/runtime/cluster/sync &> /dev/null
    67  touch $HOLOCHAIN_APPDIR/runtime/cluster/sync/externalStartEvent || { echo "HC: Could not add start event" && exit 1 ; }
    68  
    69  echo "$HOLOCHAIN_SYSTEM_BIN/app/runCluster $scenarioName $systemDockerCompose $logFile"
    70  $HOLOCHAIN_SYSTEM_BIN/app/runCluster $scenarioName $logFile
    71  
    72  rm $appDockerCompose &
    73  rm -r $HOLOCHAIN_APPDIR/runtime &
    74  
    75  set +x
    76  
    77  #otherwise bash prompt gets injured
    78  sleep 1