AutolabJS/AutolabJS

View on GitHub
tests/test_modules/bats/website_load.bats

Summary

Maintainability
Test Coverage
#!node_modules/bats/libexec/bats
############
# Authors: Ankshit Jain, Kashyap Gajera, Prasad Talasila
# Purpose: Check the loading of all webpages of AutolabJS
# Date: 01-Feb-2018
# Previous Versions: 26-March-2017
###########

# Setup and teardown functions.
setup() {
  mkdir "$BATS_TMPDIR/$TESTDIR"
}

teardown() {
  rm -rf "${BATS_TMPDIR:?}/${TESTDIR:?}"
}

@test "Load index.html page from main server" {
  curl -s --ipv4 -k https://127.0.0.1:9000 -o "$BATS_TMPDIR/$TESTDIR/index.html"
  cmp "$BATS_TMPDIR/$TESTDIR/index.html" "data/$TESTDIR/index.html"
  result=$?
  [ "$result" -eq 0 ]
}

@test "Load admin.html page from main server" {
  curl -s --ipv4 -k https://127.0.0.1:9000/admin -o "$BATS_TMPDIR/$TESTDIR/admin.html"
  cmp "$BATS_TMPDIR/$TESTDIR/admin.html" "data/$TESTDIR/admin.html"
  result=$?
  [ "$result" -eq 0 ]
}

@test "Load AutolabJS status page" {
  curl -s --ipv4 -k https://127.0.0.1:9000/status -o "$BATS_TMPDIR/$TESTDIR/status.txt"
  cp "$INSTALL_DIR/deploy/configs/load_balancer/nodes_data_conf.json" "$BATS_TMPDIR/$TESTDIR/nodes_data_conf.json"
  result=$(bash helper_scripts/"$TESTDIR"/status_check.sh)
  expectedResult=$(( $NUMBER_OF_EXECUTION_NODES + 1 ))
  [ "$result" -eq $expectedResult ]
}

@test "Load AutolabJS specific client side js files" {
  # check for userLogic.js
  curl -s --ipv4 -k https://127.0.0.1:9000/js/userlogic.js -o "$BATS_TMPDIR/$TESTDIR/userlogic.js"
  cmp "$BATS_TMPDIR/$TESTDIR/userlogic.js" "data/$TESTDIR/js/userlogic.js"
  result=$?
  [ "$result" -eq 0 ]

  # check for adminLogic.js
  curl -s --ipv4 -k https://127.0.0.1:9000/js/adminLogic.js -o "$BATS_TMPDIR/$TESTDIR/adminLogic.js"
  cmp "$BATS_TMPDIR/$TESTDIR/adminLogic.js" "data/$TESTDIR/js/adminLogic.js"
  result=$?
  [ "$result" -eq 0 ]
}

@test "Load third-party js libraries" {
  # check for jquery.min.js, socket.io.js, materialize.min.js, Filesaver.js
  cp -f "data/$TESTDIR/js/package.json" "$BATS_TMPDIR/$TESTDIR/package.json"

  # get a fresh copy of all the files to be tested from npm
  npm --quiet install --prefix "$BATS_TMPDIR/$TESTDIR" 1>/dev/null

  # copy only the necessary files to the required directories
  mkdir -p "$BATS_TMPDIR/$TESTDIR/js"
  cp -f "$BATS_TMPDIR/$TESTDIR/node_modules/jquery/dist/jquery.min.js" "$BATS_TMPDIR/$TESTDIR/js/"
  cp -f "$BATS_TMPDIR/$TESTDIR/node_modules/file-saver/FileSaver.min.js" "$BATS_TMPDIR/$TESTDIR/js/"
  cp -f "$BATS_TMPDIR/$TESTDIR/node_modules/materialize-css/dist/js/materialize.min.js" "$BATS_TMPDIR/$TESTDIR/js/"
  cp -f "$BATS_TMPDIR/$TESTDIR/node_modules/socket.io-client/socket.io.js" "$BATS_TMPDIR/$TESTDIR/js/"
  rm -rf "$BATS_TMPDIR/$TESTDIR/node_modules"

  # check for jquery.min.js
  curl -s --ipv4 -k https://127.0.0.1:9000/js/jquery.min.js -o "$BATS_TMPDIR/$TESTDIR/jquery.min.js"
  cmp "$BATS_TMPDIR/$TESTDIR/jquery.min.js" "$BATS_TMPDIR/$TESTDIR/js/jquery.min.js"
  result=$?
  [ "$result" -eq 0 ]

  # check for materialize.min.js
  curl -s --ipv4 -k https://127.0.0.1:9000/js/materialize.min.js -o "$BATS_TMPDIR/$TESTDIR/materialize.min.js"
  cmp "$BATS_TMPDIR/$TESTDIR/materialize.min.js" "$BATS_TMPDIR/$TESTDIR/js/materialize.min.js"
  result=$?
  [ "$result" -eq 0 ]

  # check for FileSaver.js
  curl -s --ipv4 -k https://127.0.0.1:9000/js/FileSaver.min.js -o "$BATS_TMPDIR/$TESTDIR/FileSaver.min.js"
  cmp "$BATS_TMPDIR/$TESTDIR/FileSaver.min.js" "$BATS_TMPDIR/$TESTDIR/js/FileSaver.min.js"
  result=$?
  [ "$result" -eq 0 ]

  # check for socket.io.js
  curl -s --ipv4 -k https://127.0.0.1:9000/socket.io/socket.io.js -o "$BATS_TMPDIR/$TESTDIR/socket.io.js"
  cmp "$BATS_TMPDIR/$TESTDIR/socket.io.js" "$BATS_TMPDIR/$TESTDIR/js/socket.io.js"
  result=$?
  [ "$result" -eq 0 ]
}

@test "Load third-party css files" {
  # check for css/*.css files
  cp -f "data/$TESTDIR/js/package.json" "$BATS_TMPDIR/$TESTDIR/package.json"

  # get a fresh copy of all the files to be tested from npm
  npm --quiet install --prefix "$BATS_TMPDIR/$TESTDIR" 1>/dev/null

  # copy only the necessary files to the required directories
  mkdir -p "$BATS_TMPDIR/$TESTDIR/css"
  cp -f "$BATS_TMPDIR/$TESTDIR/node_modules/materialize-css/dist/css/materialize.min.css" "$BATS_TMPDIR/$TESTDIR/css/"
  rm -rf "$BATS_TMPDIR/$TESTDIR/node_modules"

  # check for icon.css
  curl -s --ipv4 -k https://127.0.0.1:9000/css/icon.css -o "$BATS_TMPDIR/$TESTDIR/icon.css"
  cmp "$BATS_TMPDIR/$TESTDIR/icon.css" "data/$TESTDIR/css/icon.css"
  result=$?
  [ "$result" -eq 0 ]

  # check for style.css
  curl -s --ipv4 -k https://127.0.0.1:9000/css/style.css -o "$BATS_TMPDIR/$TESTDIR/style.css"
  cmp "$BATS_TMPDIR/$TESTDIR/style.css" "data/$TESTDIR/css/style.css"
  result=$?
  [ "$result" -eq 0 ]

  # check for materialize.min.css
  curl -s --ipv4 -k https://127.0.0.1:9000/css/materialize.min.css -o "$BATS_TMPDIR/$TESTDIR/materialize.min.css"
  cmp "$BATS_TMPDIR/$TESTDIR/materialize.min.css" "$BATS_TMPDIR/$TESTDIR/css/materialize.min.css"
  result=$?
  [ "$result" -eq 0 ]
}

# for the following tests, links are extracted from index.html
# see http://stackoverflow.com/questions/9561020/how-do-i-use-the-python-scrapy-module-to-list-all-the-urls-from-my-website

@test "Check all hyperlinks" {
  # check for live status of all http(s) href URLs on the page.

  # for the autograder home page
  mkdir -p "$BATS_TMPDIR/hyperlinks"
  curl -s --ipv4 -k https://127.0.0.1:9000 -o "$BATS_TMPDIR/$TESTDIR/index.html"
  cmp "$BATS_TMPDIR/$TESTDIR/index.html" "data/$TESTDIR/index.html"
  result=$?
  [ "$result" -eq 0 ]

  # for the repository home page on Github
  curl -fsS --head --request GET https://github.com/AutolabJS/AutolabJS
  result=$?
  [ "$result" -eq 0 ]

  # for the repository wiki page on Github
  curl -fsS --head --request GET https://github.com/AutolabJS/AutolabJS/wiki
  result=$?
  [ "$result" -eq 0 ]

  # for the making a submission page on Github
  curl -fsS --head --request GET https://github.com/AutolabJS/AutolabJS/wiki/v0.5.0-Making-a-Submission
  result=$?
  [ "$result" -eq 0 ]

  # for the post lab evaluation page on Github
  curl -fsS --head --request GET https://github.com/AutolabJS/AutolabJS/wiki/v0.5.0-Post-lab-self-evaluation
  result=$?
  [ "$result" -eq 0 ]
}