This is an automated email from the ASF dual-hosted git repository.

zrhoffman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 95db4e8  TP: Update GHA to run new TP tests (#5663)
95db4e8 is described below

commit 95db4e8ef65c22f6af17aa6f63733ef80322a02f
Author: Steve Hamrick <[email protected]>
AuthorDate: Thu Mar 25 11:04:10 2021 -0600

    TP: Update GHA to run new TP tests (#5663)
    
    * Add TP integration tests
    
    * Cleanup, remove debug, and cache
    
    * Wrong path
    
    * Whitespace
    
    * More whitespace
    
    * Supress docker logs
---
 .../.eslintrc                                      |   0
 .../README.md                                      |   4 +-
 .../action.yml                                     |   4 +-
 .../cdn.json                                       |   2 +-
 .../config.js                                      |   0
 .../database.json                                  |   0
 .../dbconf.yml                                     |   0
 .../dist/tp-integration-tests.js}                  |   1 -
 .../entrypoint.sh                                  | 133 ++---
 .../package-lock.json                              |   0
 .../package.json                                   |   2 +-
 .../riak.json                                      |   0
 .../tp-integration-tests.ts}                       |   0
 .../tsconfig.json                                  |   0
 .../{tp.e2e.tests.yml => tp.integration.tests.yml} |  22 +-
 README.md                                          |   2 +-
 traffic_portal/test/integration/CommonUtils/API.ts |  15 +-
 .../integration/Data/PhysLocations/Cleanup.json    |   2 +-
 .../test/integration/Data/PhysLocations/Setup.json |  28 +-
 .../integration/Data/Prerequisites/user.setup.json |  56 ++-
 .../Data/ServerServerCapabilities/Cleanup.json     |  51 +-
 .../Data/ServerServerCapabilities/Setup.json       | 249 +++++++++-
 .../test/integration/Data/Servers/Cleanup.json     |  51 +-
 .../test/integration/Data/Servers/Setup.json       | 241 ++++++++--
 .../test/integration/Data/Servers/TestCases.json   |  42 +-
 .../test/integration/PageObjects/BasePage.po.ts    |   2 +-
 .../test/integration/PageObjects/ServersPage.po.ts |  28 +-
 traffic_portal/test/integration/README.md          |  30 ++
 traffic_portal/test/integration/config.json        |  39 ++
 traffic_portal/test/integration/config.ts          |  55 +--
 traffic_portal/test/integration/package-lock.json  | 534 ++++++++++-----------
 traffic_portal/test/integration/package.json       |   6 +-
 traffic_portal/test/integration/tsconfig.json      |   3 +-
 33 files changed, 1117 insertions(+), 485 deletions(-)

diff --git a/.github/actions/tp-e2e-tests/.eslintrc 
b/.github/actions/tp-integration-tests/.eslintrc
similarity index 100%
rename from .github/actions/tp-e2e-tests/.eslintrc
rename to .github/actions/tp-integration-tests/.eslintrc
diff --git a/.github/actions/tp-e2e-tests/README.md 
b/.github/actions/tp-integration-tests/README.md
similarity index 96%
rename from .github/actions/tp-e2e-tests/README.md
rename to .github/actions/tp-integration-tests/README.md
index 37fa968..7230578 100644
--- a/.github/actions/tp-e2e-tests/README.md
+++ b/.github/actions/tp-integration-tests/README.md
@@ -17,8 +17,8 @@
   under the License.
 -->
 
-# tp-e2e-tests javascript action
-this action runs the traffic portal e2e tests
+# tp-integration-tests javascript action
+this action runs the traffic portal integration tests
 - requires an smtp service (see `smtp_address` input)
 - provides a riak server at address `trafficvault.infra.ciab.test`
 
diff --git a/.github/actions/tp-e2e-tests/action.yml 
b/.github/actions/tp-integration-tests/action.yml
similarity index 93%
rename from .github/actions/tp-e2e-tests/action.yml
rename to .github/actions/tp-integration-tests/action.yml
index ae4e8a4..1405172 100644
--- a/.github/actions/tp-e2e-tests/action.yml
+++ b/.github/actions/tp-integration-tests/action.yml
@@ -16,7 +16,7 @@
 # under the License.
 
 name: 'tp-integration-tests'
-description: 'Runs Traffic Portal E2E tests'
+description: 'Runs Traffic Portal Integration tests'
 inputs:
   smtp_address:
     description: 'Address of an SMTP server to use for the Traffic Ops API 
tests'
@@ -33,4 +33,4 @@ inputs:
     required: false
 runs:
   using: 'node12'
-  main: 'dist/tp-e2e-tests.js'
+  main: 'dist/tp-integration-tests.js'
diff --git a/.github/actions/tp-e2e-tests/cdn.json 
b/.github/actions/tp-integration-tests/cdn.json
similarity index 97%
rename from .github/actions/tp-e2e-tests/cdn.json
rename to .github/actions/tp-integration-tests/cdn.json
index 9e9f6ba..0e1c25c 100644
--- a/.github/actions/tp-e2e-tests/cdn.json
+++ b/.github/actions/tp-integration-tests/cdn.json
@@ -15,7 +15,7 @@
                "port": "6443",
                "log_location_error": "error.log",
                "log_location_warning": "warning.log",
-               "log_location_info": null,
+               "log_location_info": "info.log",
                "log_location_debug": null,
                "log_location_event": "event.log",
                "max_db_connections": 20,
diff --git a/.github/actions/tp-e2e-tests/config.js 
b/.github/actions/tp-integration-tests/config.js
similarity index 100%
rename from .github/actions/tp-e2e-tests/config.js
rename to .github/actions/tp-integration-tests/config.js
diff --git a/.github/actions/tp-e2e-tests/database.json 
b/.github/actions/tp-integration-tests/database.json
similarity index 100%
rename from .github/actions/tp-e2e-tests/database.json
rename to .github/actions/tp-integration-tests/database.json
diff --git a/.github/actions/tp-e2e-tests/dbconf.yml 
b/.github/actions/tp-integration-tests/dbconf.yml
similarity index 100%
rename from .github/actions/tp-e2e-tests/dbconf.yml
rename to .github/actions/tp-integration-tests/dbconf.yml
diff --git a/.github/actions/tp-e2e-tests/dist/tp-e2e-tests.js 
b/.github/actions/tp-integration-tests/dist/tp-integration-tests.js
similarity index 98%
rename from .github/actions/tp-e2e-tests/dist/tp-e2e-tests.js
rename to .github/actions/tp-integration-tests/dist/tp-integration-tests.js
index dbcb123..d865545 100644
--- a/.github/actions/tp-e2e-tests/dist/tp-e2e-tests.js
+++ b/.github/actions/tp-integration-tests/dist/tp-integration-tests.js
@@ -26,7 +26,6 @@ function runProcess(...commandArguments) {
     if (output.status === 0) {
         return;
     }
-    console.log(output);
     console.error("Child process \"", ...commandArguments, "\" exited with 
status code", output.status, "!");
     process.exit((_a = output.status) !== null && _a !== void 0 ? _a : 1);
 }
diff --git a/.github/actions/tp-e2e-tests/entrypoint.sh 
b/.github/actions/tp-integration-tests/entrypoint.sh
similarity index 66%
rename from .github/actions/tp-e2e-tests/entrypoint.sh
rename to .github/actions/tp-integration-tests/entrypoint.sh
index 65becee..b21a750 100755
--- a/.github/actions/tp-e2e-tests/entrypoint.sh
+++ b/.github/actions/tp-integration-tests/entrypoint.sh
@@ -17,24 +17,28 @@
 # under the License.
 set -o errexit -o nounset -o pipefail
 
-fqdn="http://localhost:4444/wd/hub/status";
-if ! curl -Lvsk "${fqdn}" >/dev/null 2>&1; then
-  echo "Selenium not started on ${fqdn}"
+hub_fqdn="http://localhost:4444/wd/hub/status";
+to_fqdn="https://localhost:6443";
+tp_fqdn="https://172.18.0.1:8443";
+
+if ! curl -Lvsk "${hub_fqdn}" >/dev/null 2>&1; then
+  echo "Selenium not started on ${hub_fqdn}"
   exit 1
 fi
 
-DIVISION="adivision"
-REGION="aregion"
-PHYS="aloc"
-COORD="acoord"
-CDN="zcdn"
-CG="acg"
 export PGUSER="traffic_ops"
 export PGPASSWORD="twelve"
 export PGHOST="localhost"
 export PGDATABASE="traffic_ops"
 export PGPORT="5432"
 
+# For TV Setup
+DIVISION="adivision"
+REGION="aregion"
+PHYS="aloc"
+COORD="acoord"
+CDN="zcdn"
+CG="acg"
 <<QUERY psql
 INSERT INTO tm_user (username, role, tenant_id, local_passwd)
   VALUES ('admin', 1, 1,
@@ -46,7 +50,6 @@ INSERT INTO phys_location(name, short_name, region, address, 
city, state, zip)
   VALUES('${PHYS}', '${PHYS}', 1, 'some place idk', 'Denver', 'CO', '88888');
 INSERT INTO coordinate(name) VALUES('${COORD}');
 INSERT INTO cdn(name, domain_name) VALUES('${CDN}', 'infra.ciab.test');
-
 WITH TYPE AS (SELECT id FROM type WHERE name = 'TC_LOC')
 INSERT INTO cachegroup(name, short_name, type, coordinate)
 SELECT '${CG}', '${CG}', TYPE.id, 1
@@ -124,8 +127,7 @@ start_traffic_vault() {
                sed -i '/to-access\.sh\|^to-enroll/d' 
/etc/riak/{prestart.d,poststart.d}/*
        BASH_LINES
 
-       DOCKER_BUILDKIT=1 docker build "$ciab_dir" -f 
"${ciab_dir}/traffic_vault/Dockerfile" -t "$trafficvault" 2>&1 |
-               color_and_prefix "$gray_bg" "building Traffic Vault";
+       DOCKER_BUILDKIT=1 docker build "$ciab_dir" -f 
"${ciab_dir}/traffic_vault/Dockerfile" -t "$trafficvault" >/dev/null
        echo 'Starting Traffic Vault...';
        docker run \
                --detach \
@@ -141,15 +143,14 @@ start_traffic_vault &
 
 sudo apt-get install -y --no-install-recommends gettext \
        ruby ruby-dev libc-dev curl \
-       chromium-chromedriver postgresql-client \
        gcc musl-dev
 
 sudo gem update --system && sudo gem install sass compass
-sudo npm i -g protractor@^7.0.0 forever bower grunt selenium-webdriver
+sudo npm i -g forever bower grunt
 
-CONTAINER=$(docker ps | grep "selenium/node-chrome" | awk '{print $1}')
-CHROME_VER=$(docker exec "$CONTAINER" google-chrome --version | sed -E 's/.* 
([0-9.]+).*/\1/')
-sudo webdriver-manager update --gecko false --versions.chrome 
"LATEST_RELEASE_$CHROME_VER"
+CHROME_CONTAINER=$(docker ps | grep "selenium/node-chrome" | awk '{print $1}')
+HUB_CONTAINER=$(docker ps | grep "selenium/hub" | awk '{print $1}')
+CHROME_VER=$(docker exec "$CHROME_CONTAINER" google-chrome --version | sed -E 
's/.* ([0-9.]+).*/\1/')
 
 GOROOT=/usr/local/go
 export PATH="${PATH}:${GOROOT}/bin"
@@ -157,6 +158,7 @@ download_go
 export GOPATH="${HOME}/go"
 readonly ORG_DIR="$GOPATH/src/github.com/apache"
 readonly REPO_DIR="${ORG_DIR}/trafficcontrol"
+resources="$(dirname "$0")"
 if [[ ! -e "$REPO_DIR" ]]; then
        mkdir -p "$ORG_DIR"
        cd
@@ -164,59 +166,76 @@ if [[ ! -e "$REPO_DIR" ]]; then
        ln -s "$REPO_DIR" "${GITHUB_WORKSPACE}"
 fi
 
-cd "${REPO_DIR}/traffic_ops/traffic_ops_golang"
+to_build() {
+  cd "${REPO_DIR}/traffic_ops/traffic_ops_golang"
+  go mod vendor -v
+  go build .
 
-go mod vendor -v > /dev/null
-go build . > /dev/null
- 
+  openssl req -new -x509 -nodes -newkey rsa:4096 -out localhost.crt -keyout 
localhost.key -subj "/CN=tptests";
 
-openssl req -new -x509 -nodes -newkey rsa:4096 -out localhost.crt -keyout 
localhost.key -subj "/CN=tptests";
+  envsubst <"${resources}/cdn.json" >cdn.conf
+  cp "${resources}/database.json" database.conf
 
-resources="$(dirname "$0")"
-envsubst <"${resources}/cdn.json" >cdn.conf
-cp "${resources}/database.json" database.conf
+  export $(<"${ciab_dir}/variables.env" sed '/^#/d') # defines 
TV_ADMIN_USER/PASSWORD
+  envsubst <"${resources}/riak.json" >riak.conf
+  truncate --size=0 warning.log error.log event.log info.log
 
-export $(<"${ciab_dir}/variables.env" sed '/^#/d') # defines 
TV_ADMIN_USER/PASSWORD
-envsubst <"${resources}/riak.json" >riak.conf
+  ./traffic_ops_golang --cfg ./cdn.conf --dbcfg ./database.conf -riakcfg 
riak.conf &
+  tail -f warning.log 2>&1 | color_and_prefix "${yellow_bg}" 'Traffic Ops 
WARN' &
+  tail -f error.log 2>&1 | color_and_prefix "${red_bg}" 'Traffic Ops ERR' &
+  tail -f event.log 2>&1 | color_and_prefix "${gray_bg}" 'Traffic Ops EVT' &
+}
 
-truncate --size=0 warning.log error.log event.log # Removes output from 
previous API versions and makes sure files exist
-./traffic_ops_golang --cfg ./cdn.conf --dbcfg ./database.conf -riakcfg 
riak.conf &
-tail -f warning.log 2>&1 | color_and_prefix "${yellow_bg}" 'Traffic Ops' &
-tail -f error.log 2>&1 | color_and_prefix "${red_bg}" 'Traffic Ops' &
-tail -f event.log 2>&1 | color_and_prefix "${gray_bg}" 'Traffic Ops' &
+tp_build() {
+  cd "${REPO_DIR}/traffic_portal"
+  npm ci
+  bower install
+  grunt dist
 
-cd "../../traffic_portal"
-npm ci
-bower install
-grunt dist
+  cp "${resources}/config.js" ./conf/
+  touch tp.log access.log out.log err.log
+  sudo forever --minUptime 5000 --spinSleepTime 2000 -f -o out.log start 
server.js &
+  tail -f err.log 2>&1 | color_and_prefix "${red_bg}" "Node Err" &
+}
+
+(to_build) &
+(tp_build) &
 
-cp "${resources}/config.js" ./conf/
-touch tp.log access.log
-sudo forever --minUptime 5000 --spinSleepTime 2000 -l ./tp.log start server.js 
&
+onFail() {
+       docker logs "$trafficvault"  > Reports/traffic_vault.log
+  mv tp.log Reports/forever.log
+  mv access.log Reports/tp-access.log
+  mv out.log Reports/node.log
+  docker logs $CHROME_CONTAINER > Reports/chrome.log
+  docker logs $HUB_CONTAINER > Reports/hub.log
+  echo "Detailed logs produced info Reports artifact"
+  exit 1
+}
 
-fqdn="https://localhost:8443";
-while ! curl -Lvsk "${fqdn}/api/3.0/ping" >/dev/null 2>&1; do
-  echo "waiting for TP/TO server to start on '${fqdn}'"
-  sleep 10
-done
 
+cd "${REPO_DIR}/traffic_portal/test/integration"
+npm ci
+PATH=$(pwd)/node_modules/.bin/:$PATH
+
+webdriver-manager update --gecko false --versions.chrome 
"LATEST_RELEASE_$CHROME_VER"
 
-cd "test/end_to_end"
 jq " .capabilities.chromeOptions.args = [
-    \"--disable-extensions\",
-    \"--disable-gpu\",
     \"--headless\",
     \"--no-sandbox\",
+    \"--disable-gpu\",
     \"--ignore-certificate-errors\"
-  ] | .baseUrl = \"${fqdn}\" | del(.seleniumAddress)" \
-  conf.json > conf.json.tmp && mv conf.json.tmp conf.json
+  ] | .params.apiUrl = \"${tp_fqdn}/api/4.0\" | .params.baseUrl =\"${tp_fqdn}\"
+  | .capabilities[\"goog:chromeOptions\"].w3c = false | 
.capabilities.chromeOptions.w3c = false" \
+  config.json > config.json.tmp && mv config.json.tmp config.json
 
-onFail() {
-       docker logs "$trafficvault" 2>&1 |
-               color_and_prefix "$gray_bg" 'Traffic Vault';
-  cat tp.log | color_and_prefix "${gray_bg}" 'Forever'
-  cat access.log | color_and_prefix "${gray_bg}" 'Traffic Portal'
-  exit 1
-}
+tsc
+
+# Wait for tp/to build
+timeout 5m bash <<TMOUT
+  while ! curl -Lvsk "${tp_fqdn}/api/4.0/ping" >/dev/null 2>&1; do
+    echo "waiting for TP/TO server to start on '${tp_fqdn}'"
+    sleep 10
+  done
+TMOUT
 
-sudo protractor ./conf.js || onFail
+protractor ./GeneratedCode/config.js --params.baseUrl="${tp_fqdn}" 
--params.apiUrl="${to_fqdn}/api/4.0" || onFail
diff --git a/.github/actions/tp-e2e-tests/package-lock.json 
b/.github/actions/tp-integration-tests/package-lock.json
similarity index 100%
rename from .github/actions/tp-e2e-tests/package-lock.json
rename to .github/actions/tp-integration-tests/package-lock.json
diff --git a/.github/actions/tp-e2e-tests/package.json 
b/.github/actions/tp-integration-tests/package.json
similarity index 90%
rename from .github/actions/tp-e2e-tests/package.json
rename to .github/actions/tp-integration-tests/package.json
index bc27ff1..e2e5cf0 100644
--- a/.github/actions/tp-e2e-tests/package.json
+++ b/.github/actions/tp-integration-tests/package.json
@@ -1,6 +1,6 @@
 {
        "author": "Apache Traffic Control",
-       "description": "Runs Traffic Ops Go client/API integration tests",
+       "description": "Runs Traffic Portal Integration tests",
        "license": "Apache-2.0",
        "main": "dist/to-integration-tests.js",
        "name": "to-integration-tests",
diff --git a/.github/actions/tp-e2e-tests/riak.json 
b/.github/actions/tp-integration-tests/riak.json
similarity index 100%
rename from .github/actions/tp-e2e-tests/riak.json
rename to .github/actions/tp-integration-tests/riak.json
diff --git a/.github/actions/tp-e2e-tests/tp-e2e-tests.ts 
b/.github/actions/tp-integration-tests/tp-integration-tests.ts
similarity index 100%
rename from .github/actions/tp-e2e-tests/tp-e2e-tests.ts
rename to .github/actions/tp-integration-tests/tp-integration-tests.ts
diff --git a/.github/actions/tp-e2e-tests/tsconfig.json 
b/.github/actions/tp-integration-tests/tsconfig.json
similarity index 100%
rename from .github/actions/tp-e2e-tests/tsconfig.json
rename to .github/actions/tp-integration-tests/tsconfig.json
diff --git a/.github/workflows/tp.e2e.tests.yml 
b/.github/workflows/tp.integration.tests.yml
similarity index 85%
rename from .github/workflows/tp.e2e.tests.yml
rename to .github/workflows/tp.integration.tests.yml
index 380a78f..c72d82f 100644
--- a/.github/workflows/tp.e2e.tests.yml
+++ b/.github/workflows/tp.integration.tests.yml
@@ -15,7 +15,7 @@
 # specific language governing permissions and limitations
 # under the License.
 
-name: TP E2E Tests
+name: TP Integration Tests
 
 env:
   # alpine:3.13
@@ -25,8 +25,8 @@ on:
   push:
     paths:
       - .github/actions/todb-init/**
-      - .github/actions/tp-e2e-tests/**
-      - .github/workflows/tp.e2e.tests.yml
+      - .github/actions/tp-integration-tests/**
+      - .github/workflows/tp.integration.tests.yml
       - GO_VERSION
       - infrastructure/cdn-in-a-box/traffic_vault/**
       - traffic_ops/*client/**.go
@@ -37,8 +37,8 @@ on:
   pull_request:
     paths:
       - .github/actions/todb-init/**
-      - .github/actions/tp-e2e-tests/**
-      - .github/workflows/tp.e2e.tests.yml
+      - .github/actions/tp-integration-tests/**
+      - .github/workflows/tp.integration.tests.yml
       - GO_VERSION
       - infrastructure/cdn-in-a-box/traffic_vault/**
       - traffic_ops/*client/**.go
@@ -48,7 +48,7 @@ on:
     types: [ opened, reopened, ready_for_review, synchronize ]
 
 jobs:
-  E2E_tests:
+  TP_Integration_tests:
     if: github.event.pull_request.draft == false
     runs-on: ubuntu-latest
     services:
@@ -101,16 +101,22 @@ jobs:
         uses: actions/cache@v2
         with:
           path: ~/.npm
-          key: ${{ runner.os }}-node-modules-${{ 
hashFiles('traffic_portal/package-lock.json traffic_portal/bower.json') }}
+          key: ${{ runner.os }}-node-modules-${{ 
hashFiles('traffic_portal/package-lock.json 
traffic_portal/test/integration/package-lock.json traffic_portal/bower.json') }}
           restore-keys: |
             ${{ runner.os }}-node-modules-
       - name: Initialize Traffic Ops Database
         id: todb
         uses: ./.github/actions/todb-init
       - name: Run TP
-        uses: ./.github/actions/tp-e2e-tests
+        uses: ./.github/actions/tp-integration-tests
         with:
           smtp_address: 172.17.0.1
+      - name: Upload Report
+        uses: actions/upload-artifact@v2
+        if: always()
+        with:
+          name: ${{ github.job }}
+          path: ${{ github.workspace 
}}/traffic_portal/test/integration/Reports/
       - name: Save Alpine Docker image
         run: .github/actions/save-alpine-tar/entrypoint.sh save ${{ 
env.ALPINE_VERSION }}
 
diff --git a/README.md b/README.md
index 49fd5a2..b433ccd 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
 ![Traffic Ops Integration 
Tests](https://github.com/apache/trafficcontrol/workflows/Traffic%20Ops%20Go%20client/API%20integration%20tests/badge.svg)
 ![Go Unit 
Tests](https://github.com/apache/trafficcontrol/workflows/Go%20Unit%20Tests/badge.svg)
 ![Go 
Formatting](https://github.com/apache/trafficcontrol/workflows/Go%20Format/badge.svg)
-![TP E2E 
Tests](https://github.com/apache/trafficcontrol/workflows/TP%20E2E%20Tests/badge.svg)
+![TP Integration 
Tests](https://github.com/apache/trafficcontrol/workflows/TP%20Integration%20Tests/badge.svg)
 [![Documentation 
Status](https://readthedocs.org/projects/traffic-control-cdn/badge/?version=latest)](http://traffic-control-cdn.readthedocs.io/en/latest/?badge=latest)
 
 # Apache Traffic Control
diff --git a/traffic_portal/test/integration/CommonUtils/API.ts 
b/traffic_portal/test/integration/CommonUtils/API.ts
index d83ea16..e241045 100644
--- a/traffic_portal/test/integration/CommonUtils/API.ts
+++ b/traffic_portal/test/integration/CommonUtils/API.ts
@@ -63,7 +63,7 @@ export class API {
             if(data.hasOwnProperty('getRequest')){
                 let response = await this.GetId(data);
                 if (response != null) {
-                    throw new Error('Failed to get id:\nResponse Status: ' + 
response.statusText + '\nResponse Data: ' + response.data) 
+                    throw new Error('Failed to get id:\nResponse Status: ' + 
response.statusText + '\nResponse Data: ' + response.data)
                 }
             }
 
@@ -76,7 +76,7 @@ export class API {
                         data: data
                     });
                     break;
-                case "get": 
+                case "get":
                     response = await axios({
                         method: method,
                         url: config.params.apiUrl + route,
@@ -103,6 +103,8 @@ export class API {
             if (response.status == 200 || response.status == 201) {
                 return null
             } else {
+                console.log("Reponse Data: " , response.data);
+                console.log("Response: " , response);
                 throw new Error('Request Failed:\nResponse Status: ' + 
response.statusText + '\nResponse Data: ' + response.data);
             }
         } catch (error) {
@@ -119,7 +121,7 @@ export class API {
                     url: config.params.apiUrl + data.getRequest[i].route + 
query,
                     headers: { Cookie: this.cookie},
                });
-               
+
                if (response.status == 200) {
                     if(data.getRequest[i].hasOwnProperty('isArray')){
                         data[data.getRequest[i].replace] = [await 
response.data.response[0].id];
@@ -198,11 +200,14 @@ export class API {
                     for(var j = 0; j < data.Prerequisites[i].Data.length; j++){
                         let output = await 
this.SendRequest(data.Prerequisites[i].Route, data.Prerequisites[i].Method, 
data.Prerequisites[i].Data[j]);
                         if (output != null) {
-                            throw new Error(output)
+                            console.error(`UseAPI failed on Action 
${data.Prerequisites[i].Action} with index ${i}, and Data index ${j}`);
+                            throw new Error(output);
                         }
                     }
                 }
                 return null
+            } else if (response.status == undefined) {
+                throw new Error(`Error requesting ${config.params.apiUrl}: 
${response}`);
             } else {
                 throw new Error('Login failed:\nResponse Status: ' + 
response.statusText + '\nResponse Data: ' + response.data)
             }
@@ -210,4 +215,4 @@ export class API {
             return error;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/traffic_portal/test/integration/Data/PhysLocations/Cleanup.json 
b/traffic_portal/test/integration/Data/PhysLocations/Cleanup.json
index ce67479..00a7e5d 100644
--- a/traffic_portal/test/integration/Data/PhysLocations/Cleanup.json
+++ b/traffic_portal/test/integration/Data/PhysLocations/Cleanup.json
@@ -68,4 +68,4 @@
             ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/traffic_portal/test/integration/Data/PhysLocations/Setup.json 
b/traffic_portal/test/integration/Data/PhysLocations/Setup.json
index 30b62b6..3dfc05b 100644
--- a/traffic_portal/test/integration/Data/PhysLocations/Setup.json
+++ b/traffic_portal/test/integration/Data/PhysLocations/Setup.json
@@ -77,8 +77,8 @@
             "Method": "post",
             "Data": [
                 {
-                    "cachegroupId": 8,
-                    "cdnId": 2,
+                    "cachegroupId": 0,
+                    "cdnId": 0,
                     "domainName": "test.net",
                     "hostName": "PhysTest",
                     "httpsPort": 443,
@@ -113,8 +113,8 @@
                     "mgmtIpGateway": "",
                     "mgmtIpNetmask": "",
                     "offlineReason": "",
-                    "physLocationId": 2,
-                    "profileId": 9,
+                    "physLocationId": 0,
+                    "profileId": 0,
                     "routerHostName": "",
                     "routerPortName": "",
                     "statusId": 3,
@@ -127,10 +127,28 @@
                             "queryKey": "name",
                             "queryValue": "TPPhysLocation2",
                             "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
                         }
                     ]
                 }
             ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/traffic_portal/test/integration/Data/Prerequisites/user.setup.json 
b/traffic_portal/test/integration/Data/Prerequisites/user.setup.json
index 0be947b..ebf0141 100644
--- a/traffic_portal/test/integration/Data/Prerequisites/user.setup.json
+++ b/traffic_portal/test/integration/Data/Prerequisites/user.setup.json
@@ -253,6 +253,60 @@
                     ]
                 }
             ]
+        },
+        {
+            "Action": "CreateCDN",
+            "Route": "/cdns",
+            "Method": "post",
+            "Data": [
+                {
+                    "name": "dummycdn",
+                    "domainName": "cdnp3",
+                    "dnssecEnabled": false
+                }
+            ]
+        },
+        {
+            "Action": "CreateCacheGroups",
+            "Route": "/cachegroups",
+            "Method": "post",
+            "Data": [
+                {
+                    "name": "testCG",
+                    "shortName": "tCG",
+                    "latitude": 0,
+                    "longitude": 0,
+                    "fallbackToClosest": true,
+                    "localizationMethods": [
+                        "DEEP_CZ",
+                        "CZ",
+                        "GEO"
+                    ],
+                    "typeId": 23
+                }
+            ]
+        },
+        {
+            "Action": "CreateProfile",
+            "Route": "/profiles",
+            "Method": "post",
+            "Data": [
+                {
+                    "name": "testProfile",
+                    "description": "A test profile for API examples",
+                    "cdn": 0,
+                    "type": "ATS_PROFILE",
+                    "routingDisabled": false,
+                    "getRequest": [
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdn"
+                        }
+                    ]
+                }
+            ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git 
a/traffic_portal/test/integration/Data/ServerServerCapabilities/Cleanup.json 
b/traffic_portal/test/integration/Data/ServerServerCapabilities/Cleanup.json
index 297ea90..8b12903 100644
--- a/traffic_portal/test/integration/Data/ServerServerCapabilities/Cleanup.json
+++ b/traffic_portal/test/integration/Data/ServerServerCapabilities/Cleanup.json
@@ -74,6 +74,55 @@
             ]
         },
         {
+            "Action": "DeletePhysLocations",
+            "Route" : "/phys_locations",
+            "Method" : "delete",
+            "Data": [
+                {
+                    "route": "/phys_locations/",
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "route"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "Action": "DeleteRegions",
+            "Route" : "/regions",
+            "Method" : "delete",
+            "Data": [
+                {
+                    "route": "/regions?name=PhysTest"
+                },
+                {
+                    "route": "/regions?name=PhysTest2"
+                }
+            ]
+        },
+        {
+            "Action": "DeleteDivisions",
+            "Route" : "/divisions",
+            "Method" : "delete",
+            "Data": [
+                {
+                    "route": "/divisions/",
+                    "getRequest": [
+                        {
+                            "route": "/divisions",
+                            "queryKey": "name",
+                            "queryValue": "PhysTest",
+                            "replace": "route"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
             "Action": "DeleteServerCapabilities",
             "Route" : "/server_capabilities",
             "Method" : "delete",
@@ -87,4 +136,4 @@
             ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git 
a/traffic_portal/test/integration/Data/ServerServerCapabilities/Setup.json 
b/traffic_portal/test/integration/Data/ServerServerCapabilities/Setup.json
index 37767c9..d8f24b6 100644
--- a/traffic_portal/test/integration/Data/ServerServerCapabilities/Setup.json
+++ b/traffic_portal/test/integration/Data/ServerServerCapabilities/Setup.json
@@ -1,13 +1,84 @@
 {
     "Prerequisites": [
         {
+            "Action": "CreateDivisions",
+            "Route": "/divisions",
+            "Method": "post",
+            "Data": [
+                {
+                    "name": "PhysTest"
+                }
+            ]
+        },
+        {
+            "Action": "CreateRegions",
+            "Route": "/regions",
+            "Method": "post",
+            "Data": [
+                {
+                    "name": "PhysTest",
+                    "division": "4",
+                    "divisionName": "PhysTest",
+                    "getRequest": [
+                        {
+                            "route": "/divisions",
+                            "queryKey": "name",
+                            "queryValue": "PhysTest",
+                            "replace": "division"
+                        }
+                    ]
+                },
+                {
+                    "name": "PhysTest2",
+                    "division": "4",
+                    "divisionName": "PhysTest",
+                    "getRequest": [
+                        {
+                            "route": "/divisions",
+                            "queryKey": "name",
+                            "queryValue": "PhysTest",
+                            "replace": "division"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "Action": "CreatePhysLocation",
+            "Route": "/phys_locations",
+            "Method": "post",
+            "Data": [
+                {
+                    "address": "Buckingham Palace",
+                    "city": "London",
+                    "comments": "Buckingham Palace",
+                    "email": "[email protected]",
+                    "name": "TPPhysLocation2",
+                    "phone": "0-843-816-6276",
+                    "poc": "Her Majesty The Queen Elizabeth Alexandra Mary 
Windsor II",
+                    "regionId": 3,
+                    "shortName": "tpphys2",
+                    "state": "NA",
+                    "zip": "99999",
+                    "getRequest": [
+                        {
+                            "route": "/regions",
+                            "queryKey": "name",
+                            "queryValue": "PhysTest",
+                            "replace": "regionId"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
             "Action": "CreateServers",
             "Route": "/servers",
             "Method": "post",
             "Data": [
                 {
-                    "cachegroupId": 8,
-                    "cdnId": 2,
+                    "cachegroupId": 0,
+                    "cdnId": 0,
                     "domainName": "test.net",
                     "hostName": "testserver1",
                     "httpsPort": 443,
@@ -42,14 +113,40 @@
                     "mgmtIpGateway": "",
                     "mgmtIpNetmask": "",
                     "offlineReason": "",
-                    "physLocationId": 2,
-                    "profileId": 9,
+                    "physLocationId": 0,
+                    "profileId": 0,
                     "routerHostName": "",
                     "routerPortName": "",
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 12,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 },
                 {
                     "cachegroupId": 8,
@@ -95,7 +192,33 @@
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 12,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 },
                 {
                     "cachegroupId": 8,
@@ -141,7 +264,33 @@
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 13,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 },
                 {
                     "cachegroupId": 8,
@@ -187,7 +336,33 @@
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 12,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 },
                 {
                     "cachegroupId": 8,
@@ -233,7 +408,33 @@
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 12,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 },
                 {
                     "cachegroupId": 8,
@@ -279,7 +480,33 @@
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 13,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 }
             ]
         },
@@ -303,4 +530,4 @@
             ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/traffic_portal/test/integration/Data/Servers/Cleanup.json 
b/traffic_portal/test/integration/Data/Servers/Cleanup.json
index dc55646..cfe7917 100644
--- a/traffic_portal/test/integration/Data/Servers/Cleanup.json
+++ b/traffic_portal/test/integration/Data/Servers/Cleanup.json
@@ -112,6 +112,55 @@
             ]
         },
         {
+            "Action": "DeletePhysLocations",
+            "Route" : "/phys_locations",
+            "Method" : "delete",
+            "Data": [
+                {
+                    "route": "/phys_locations/",
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "route"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "Action": "DeleteRegions",
+            "Route" : "/regions",
+            "Method" : "delete",
+            "Data": [
+                {
+                    "route": "/regions?name=PhysTest"
+                },
+                {
+                    "route": "/regions?name=PhysTest2"
+                }
+            ]
+        },
+        {
+            "Action": "DeleteDivisions",
+            "Route" : "/divisions",
+            "Method" : "delete",
+            "Data": [
+                {
+                    "route": "/divisions/",
+                    "getRequest": [
+                        {
+                            "route": "/divisions",
+                            "queryKey": "name",
+                            "queryValue": "PhysTest",
+                            "replace": "route"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
             "Action": "DeleteCDN",
             "Route" : "/cdns",
             "Method" : "delete",
@@ -131,4 +180,4 @@
             ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/traffic_portal/test/integration/Data/Servers/Setup.json 
b/traffic_portal/test/integration/Data/Servers/Setup.json
index a0128dc..6aff792 100644
--- a/traffic_portal/test/integration/Data/Servers/Setup.json
+++ b/traffic_portal/test/integration/Data/Servers/Setup.json
@@ -1,13 +1,84 @@
 {
     "Prerequisites": [
         {
+            "Action": "CreateDivisions",
+            "Route": "/divisions",
+            "Method": "post",
+            "Data": [
+                {
+                    "name": "PhysTest"
+                }
+            ]
+        },
+        {
+            "Action": "CreateRegions",
+            "Route": "/regions",
+            "Method": "post",
+            "Data": [
+                {
+                    "name": "PhysTest",
+                    "division": "4",
+                    "divisionName": "PhysTest",
+                    "getRequest": [
+                        {
+                            "route": "/divisions",
+                            "queryKey": "name",
+                            "queryValue": "PhysTest",
+                            "replace": "division"
+                        }
+                    ]
+                },
+                {
+                    "name": "PhysTest2",
+                    "division": "4",
+                    "divisionName": "PhysTest",
+                    "getRequest": [
+                        {
+                            "route": "/divisions",
+                            "queryKey": "name",
+                            "queryValue": "PhysTest",
+                            "replace": "division"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
+            "Action": "CreatePhysLocation",
+            "Route": "/phys_locations",
+            "Method": "post",
+            "Data": [
+                {
+                    "address": "Buckingham Palace",
+                    "city": "London",
+                    "comments": "Buckingham Palace",
+                    "email": "[email protected]",
+                    "name": "TPPhysLocation2",
+                    "phone": "0-843-816-6276",
+                    "poc": "Her Majesty The Queen Elizabeth Alexandra Mary 
Windsor II",
+                    "regionId": 3,
+                    "shortName": "tpphys2",
+                    "state": "NA",
+                    "zip": "99999",
+                    "getRequest": [
+                        {
+                            "route": "/regions",
+                            "queryKey": "name",
+                            "queryValue": "PhysTest",
+                            "replace": "regionId"
+                        }
+                    ]
+                }
+            ]
+        },
+        {
             "Action": "CreateServers",
             "Route": "/servers",
             "Method": "post",
             "Data": [
                 {
-                    "cachegroupId": 8,
-                    "cdnId": 2,
+                    "cachegroupId": 0,
+                    "cdnId": 0,
                     "domainName": "test.net",
                     "hostName": "servertestremove2",
                     "httpsPort": 443,
@@ -42,18 +113,44 @@
                     "mgmtIpGateway": "",
                     "mgmtIpNetmask": "",
                     "offlineReason": "",
-                    "physLocationId": 2,
-                    "profileId": 9,
+                    "physLocationId": 0,
+                    "profileId": 0,
                     "routerHostName": "",
                     "routerPortName": "",
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 12,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 },
                 {
-                    "cachegroupId": 8,
-                    "cdnId": 2,
+                    "cachegroupId": 0,
+                    "cdnId": 0,
                     "domainName": "test.net",
                     "hostName": "servertestremoveop2",
                     "httpsPort": 443,
@@ -88,18 +185,44 @@
                     "mgmtIpGateway": "",
                     "mgmtIpNetmask": "",
                     "offlineReason": "",
-                    "physLocationId": 2,
-                    "profileId": 9,
+                    "physLocationId": 0,
+                    "profileId": 0,
                     "routerHostName": "",
                     "routerPortName": "",
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 12,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 },
                 {
-                    "cachegroupId": 8,
-                    "cdnId": 2,
+                    "cachegroupId": 0,
+                    "cdnId": 0,
                     "domainName": "test.net",
                     "hostName": "servertestremove3",
                     "httpsPort": 443,
@@ -134,18 +257,44 @@
                     "mgmtIpGateway": "",
                     "mgmtIpNetmask": "",
                     "offlineReason": "",
-                    "physLocationId": 2,
-                    "profileId": 9,
+                    "physLocationId": 0,
+                    "profileId": 0,
                     "routerHostName": "",
                     "routerPortName": "",
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 11,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 },
                 {
-                    "cachegroupId": 8,
-                    "cdnId": 2,
+                    "cachegroupId": 0,
+                    "cdnId": 0,
                     "domainName": "test.net",
                     "hostName": "servertestremoveop3",
                     "httpsPort": 443,
@@ -180,14 +329,40 @@
                     "mgmtIpGateway": "",
                     "mgmtIpNetmask": "",
                     "offlineReason": "",
-                    "physLocationId": 2,
-                    "profileId": 9,
+                    "physLocationId": 0,
+                    "profileId": 0,
                     "routerHostName": "",
                     "routerPortName": "",
                     "statusId": 3,
                     "tcpPort": 80,
                     "typeId": 11,
-                    "updPending": false
+                    "updPending": false,
+                    "getRequest": [
+                        {
+                            "route": "/phys_locations",
+                            "queryKey": "name",
+                            "queryValue": "TPPhysLocation2",
+                            "replace": "physLocationId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
+                        },
+                        {
+                            "route": "/cachegroups",
+                            "queryKey": "name",
+                            "queryValue": "testCG",
+                            "replace": "cachegroupId"
+                        },
+                        {
+                            "route": "/profiles",
+                            "queryKey": "name",
+                            "queryValue": "testProfile",
+                            "replace": "profileId"
+                        }
+                    ]
                 }
             ]
         },
@@ -210,7 +385,7 @@
             "Method": "post",
             "Data": [
                 {
-                    "serverId": 1,
+                    "serverId": 0,
                     "serverCapability": "servertestcap1",
                     "getRequest": [
                         {
@@ -222,7 +397,7 @@
                     ]
                 },
                 {
-                    "serverId": 1,
+                    "serverId": 0,
                     "serverCapability": "servertestcapop1",
                     "getRequest": [
                         {
@@ -242,7 +417,7 @@
             "Data": [
                 {
                     "active": true,
-                    "cdnId": 2,
+                    "cdnId": 0,
                     "displayName": "servertestds1",
                     "dscp": 0,
                     "geoLimit": 0,
@@ -258,7 +433,7 @@
                     "qstringIgnore": 0,
                     "rangeRequestHandling": 0,
                     "regionalGeoBlocking": false,
-                    "tenantId": 6,
+                    "tenantId": 0,
                     "typeId": 1,
                     "xmlId": "servertds1",
                     "getRequest": [
@@ -267,12 +442,18 @@
                             "queryKey": "name",
                             "queryValue": "tenantSame",
                             "replace": "tenantId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
                         }
                     ]
                 },
                 {
                     "active": true,
-                    "cdnId": 2,
+                    "cdnId": 0,
                     "displayName": "servertestdsop1",
                     "dscp": 0,
                     "geoLimit": 0,
@@ -288,7 +469,7 @@
                     "qstringIgnore": 0,
                     "rangeRequestHandling": 0,
                     "regionalGeoBlocking": false,
-                    "tenantId": 6,
+                    "tenantId": 0,
                     "typeId": 1,
                     "xmlId": "servertdsop1",
                     "getRequest": [
@@ -297,6 +478,12 @@
                             "queryKey": "name",
                             "queryValue": "tenantSame",
                             "replace": "tenantId"
+                        },
+                        {
+                            "route": "/cdns",
+                            "queryKey": "name",
+                            "queryValue": "dummycdn",
+                            "replace": "cdnId"
                         }
                     ]
                 }
@@ -385,4 +572,4 @@
             ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/traffic_portal/test/integration/Data/Servers/TestCases.json 
b/traffic_portal/test/integration/Data/Servers/TestCases.json
index 94847c8..383e294 100644
--- a/traffic_portal/test/integration/Data/Servers/TestCases.json
+++ b/traffic_portal/test/integration/Data/Servers/TestCases.json
@@ -14,11 +14,11 @@
                     "Status": "ONLINE",
                     "Hostname": "servertestcreate1",
                     "Domainname": "test.com",
-                    "CDN": "CDN-in-a-Box",
-                    "CacheGroup": "CDN_in_a_Box_Edge",
+                    "CDN": "dummycdn",
+                    "CacheGroup": "testCG",
                     "Type": "EDGE",
-                    "Profile": "ATS_EDGE_TIER_CACHE",
-                    "PhysLocation": "CDN_in_a_Box",
+                    "Profile": "testProfile",
+                    "PhysLocation": "TPPhysLocation2",
                     "InterfaceName": "test",
                     "validationMessage": "Server created"
                 },
@@ -27,11 +27,11 @@
                     "Status": "ONLINE",
                     "Hostname": "servertestcreate2",
                     "Domainname": "test.com",
-                    "CDN": "CDN-in-a-Box",
-                    "CacheGroup": "CDN_in_a_Box_Edge",
+                    "CDN": "dummycdn",
+                    "CacheGroup": "testCG",
                     "Type": "EDGE",
-                    "Profile": "ATS_EDGE_TIER_CACHE",
-                    "PhysLocation": "CDN_in_a_Box",
+                    "Profile": "testProfile",
+                    "PhysLocation": "TPPhysLocation2",
                     "InterfaceName": "test",
                     "validationMessage": "Server created"
                 }
@@ -80,11 +80,11 @@
                     "Status": "ONLINE",
                     "Hostname": "servertcreatero",
                     "Domainname": "test.com",
-                    "CDN": "CDN-in-a-Box",
-                    "CacheGroup": "CDN_in_a_Box_Edge",
+                    "CDN": "dummycdn",
+                    "CacheGroup": "testCG",
                     "Type": "EDGE",
-                    "Profile": "ATS_EDGE_TIER_CACHE",
-                    "PhysLocation": "CDN_in_a_Box",
+                    "Profile": "testProfile",
+                    "PhysLocation": "TPPhysLocation2",
                     "InterfaceName": "test",
                     "validationMessage": "Forbidden."
                 }
@@ -120,11 +120,11 @@
                     "Status": "ONLINE",
                     "Hostname": "servertestcreateop1",
                     "Domainname": "test.com",
-                    "CDN": "CDN-in-a-Box",
-                    "CacheGroup": "CDN_in_a_Box_Edge",
+                    "CDN": "dummycdn",
+                    "CacheGroup": "testCG",
                     "Type": "EDGE",
-                    "Profile": "ATS_EDGE_TIER_CACHE",
-                    "PhysLocation": "CDN_in_a_Box",
+                    "Profile": "testProfile",
+                    "PhysLocation": "TPPhysLocation2",
                     "InterfaceName": "test",
                     "validationMessage": "Server created"
                 },
@@ -133,11 +133,11 @@
                     "Status": "ONLINE",
                     "Hostname": "servertestcreateop2",
                     "Domainname": "test.com",
-                    "CDN": "CDN-in-a-Box",
-                    "CacheGroup": "CDN_in_a_Box_Edge",
+                    "CDN": "dummycdn",
+                    "CacheGroup": "testCG",
                     "Type": "EDGE",
-                    "Profile": "ATS_EDGE_TIER_CACHE",
-                    "PhysLocation": "CDN_in_a_Box",
+                    "Profile": "testProfile",
+                    "PhysLocation": "TPPhysLocation2",
                     "InterfaceName": "test",
                     "validationMessage": "Server created"
                 }
@@ -173,4 +173,4 @@
             ]
         }
     ]
-}
\ No newline at end of file
+}
diff --git a/traffic_portal/test/integration/PageObjects/BasePage.po.ts 
b/traffic_portal/test/integration/PageObjects/BasePage.po.ts
index fd27d2d..8983a1a 100644
--- a/traffic_portal/test/integration/PageObjects/BasePage.po.ts
+++ b/traffic_portal/test/integration/PageObjects/BasePage.po.ts
@@ -104,4 +104,4 @@ export class BasePage {
   GetPopupTitle(){
     return this.lblPopupPageTitle.getText();
   }
-}
\ No newline at end of file
+}
diff --git a/traffic_portal/test/integration/PageObjects/ServersPage.po.ts 
b/traffic_portal/test/integration/PageObjects/ServersPage.po.ts
index 617d240..00f3599 100644
--- a/traffic_portal/test/integration/PageObjects/ServersPage.po.ts
+++ b/traffic_portal/test/integration/PageObjects/ServersPage.po.ts
@@ -122,13 +122,13 @@ export class ServersPage extends BasePage {
   IsServersItemPresent(serversName: string) {
     return element(by.xpath("//table[@id='serversTable']//tr/td[text()='" + 
"']")).isPresent()
   }
-  
+
   async ClickAddServer() {
     await this.btnCreateServer.click()
   }
-  
+
   async CreateServer(server){
-    let result = false; 
+    let result = false;
     let basePage = new BasePage();
     let networkIp = Math.round(Math.random() * 100).toString()+ "." + 
Math.round(Math.random() * 100).toString() + "." + Math.round(Math.random() * 
100).toString() +
     "." + Math.round(Math.random() * 100).toString();
@@ -138,14 +138,16 @@ export class ServersPage extends BasePage {
     await this.txtStatus.sendKeys(server.Status);
     await this.txtHostname.sendKeys(server.Hostname+this.randomize);
     await this.txtDomainName.sendKeys(server.Domainname);
-    await this.txtCDN.sendKeys(server.CDN);
-    await this.txtCacheGroup.sendKeys(server.CacheGroup);
+    await this.txtCDN.sendKeys("ALL");
+    await this.txtCDN.sendKeys(server.CDN + this.randomize);
+    await this.txtCacheGroup.sendKeys(server.CacheGroup + this.randomize);
     await this.txtType.sendKeys(server.Type);
-    await this.txtProfile.sendKeys(server.Profile);
+    await this.txtProfile.sendKeys(server.Profile + this.randomize);
     await this.txtPhysLocation.sendKeys(server.PhysLocation);
     await this.txtInterfaceName.sendKeys(server.InterfaceName);
     await 
element(by.id(""+server.InterfaceName+"-")).sendKeys(ipv6.toString());
-    await basePage.ClickCreate();
+    if (!await basePage.ClickCreate())
+        result = false;
     await basePage.GetOutputMessage().then(function(value){
       if(server.validationMessage == value){
         result = true;
@@ -153,8 +155,8 @@ export class ServersPage extends BasePage {
         result = false;
       }
     })
-  await this.OpenServerPage();
-  return result;
+    await this.OpenServerPage();
+    return result;
   }
 
   async SearchServer(nameServer:string){
@@ -165,7 +167,7 @@ export class ServersPage extends BasePage {
     await 
browser.actions().mouseMove(element(by.xpath("//span[text()='"+name+"']"))).perform();
     await 
browser.actions().doubleClick(element(by.xpath("//span[text()='"+name+"']"))).perform();
   }
-  
+
   async SearchDeliveryServiceFromServerPage(name:string){
     let result = false;
     await this.txtDSSearch.clear();
@@ -178,7 +180,7 @@ export class ServersPage extends BasePage {
     }
     return result;
   }
- 
+
   async 
AddDeliveryServiceToServer(deliveryServiceName:string,outputMessage:string){
     let result = false;
     let basePage = new BasePage();
@@ -242,7 +244,7 @@ export class ServersPage extends BasePage {
     await this.OpenServerPage();
     return result;
    }
-   
+
    async SearchServerServerCapabilities(name:string){
     let result = false;
     await this.searchFilter.clear();
@@ -261,7 +263,7 @@ export class ServersPage extends BasePage {
     return result;
    }
 
- 
+
    async 
RemoveServerCapabilitiesFromServer(serverCapabilities:string,outputMessage:string){
     let result = false;
     let basePage = new BasePage();
diff --git a/traffic_portal/test/integration/README.md 
b/traffic_portal/test/integration/README.md
new file mode 100644
index 0000000..846dc1e
--- /dev/null
+++ b/traffic_portal/test/integration/README.md
@@ -0,0 +1,30 @@
+# Traffic Portal Test Automation
+
+**Test Development Environment Setup**
+
+* Install [Node](http://nodejs.org) (v6.x.x or later): `brew install node`
+* Follow setup steps described to install protractor: 
[here](http://www.protractortest.org/#/tutorial#setup)
+* Now install packages manager: `npm install`
+* Now install protractor: `npm i protractor`
+* Now install typescript: `npm install [email protected] -g`
+* Now install selenium standalone: `sudo webdriver-manager update`
+* In a separate command line window, run: `sudo webdriver-manager start` and 
keep it running.
+* Run CDN-in-a-Box in a separate command line window and make sure all the 
components and features display.
+
+**How To Run Tests**
+
+Run this command below from integration directory. This command will compile 
and convert the typescript files into javascript files. The generated js files 
are available in integration/GeneratedCode directory.
+```
+tsc
+```
+After that, run this command below to run the protractor test from the 
environment user input.
+```
+protractor ./GeneratedCode/config.js --params.baseUrl='https://localhost:443'
+```
+**Command Line Parameters**
+
+| Flag                            | Description                                
                                                          |
+| ------------------------------- | 
:--------------------------------------------------------------------------------------------------:
 |
+| params.baseUrl                  | Environment test run on. Tests are written 
for cdn-in-a-box only. Do not run on other environment                          
         |
+| capabilities.shardTestFiles     | Input `true` or `false` to turn on or off 
parallelization. If the value is false, maxInstances will always count as 1. 
The default value in the config file = false                            |
+| capabilities.maxInstances       | Input number of chrome instances that your 
machine can handle. Test will fail if local machine cannot handle a lot of 
chrome instances. The default value = 1    |
diff --git a/traffic_portal/test/integration/config.json 
b/traffic_portal/test/integration/config.json
new file mode 100644
index 0000000..e133013
--- /dev/null
+++ b/traffic_portal/test/integration/config.json
@@ -0,0 +1,39 @@
+{
+  "seleniumAddress": "http://localhost:4444/wd/hub";,
+  "allScriptsTimeout": 200000,
+  "capabilities": {
+    "browserName": "chrome",
+    "shardTestFiles": false,
+    "maxInstances": 1,
+    "marionette": true,
+    "acceptInsecureCerts": true,
+    "acceptSslCerts": true,
+    "chromeOptions": {
+      "args": ["--headless", "--no-sandbox", "--window-size=1920,1080"],
+      "prefs": {
+        "download": {
+          "prompt_for_download": false
+        }
+      }
+    }
+  },
+  "specs": [
+    "specs/*.spec.js"
+  ],
+  "framework": "jasmine",
+  "getPageTimeout": 60000,
+  "jasmineNodeOpts": {
+    "showColors": true,
+    "defaultTimeoutInterval": 1000000,
+    "random": false,
+    "stopSpecOnExpectationFailure": true
+  },
+  "params": {
+    "apiUrl": " https://localhost:443/api/4.0";,
+    "baseUrl": "https://localhost:443/";,
+    "login": {
+      "username": "admin",
+      "password": "twelve12"
+    }
+  }
+}
diff --git a/traffic_portal/test/integration/config.ts 
b/traffic_portal/test/integration/config.ts
index 27e407b..c04a2c5 100644
--- a/traffic_portal/test/integration/config.ts
+++ b/traffic_portal/test/integration/config.ts
@@ -18,6 +18,7 @@
  */
 import { API } from './CommonUtils/API';
 import { Config, browser } from 'protractor'
+import * as conf from "./config.json"
 
 let path = require('path');
 let downloadsPath = path.resolve('Downloads');
@@ -27,52 +28,10 @@ let twoNumberRandomize = Math.floor(Math.random() * 101);
 exports.twoNumberRandomize = twoNumberRandomize;
 exports.randomize = randomize;
 
-export let config: Config = {
-  // The address of a running selenium server.
-  seleniumAddress: 'http://localhost:4444/wd/hub',
-  allScriptsTimeout: 200000,
-  // Capabilities to be passed to the webdriver instance.
-  capabilities: {
-    browserName: 'chrome',
-    //Parallelization Configuration (shardTestFiles and maxInstances)
-    shardTestFiles: false,
-    maxInstances: 1,
-    marionette: true,
-    acceptInsecureCerts: true,
-    acceptSslCerts: true,
-    chromeOptions: {
-      //Run protractor headlessly. Comment it out if user want to see the 
process.
-      args: ["--headless", "--no-sandbox", "--window-size=1920,1080"],
-      prefs: {
-        download: {
-          'prompt_for_download': false,
-          'default_directory': downloadsPath
-        }
-      }
-    }
-  },
-  specs: [
-    "specs/*.spec.js",
-  ],
-  // Options to be passed to Jasmine-node.
-  jasmineNodeOpts: {
-    showColors: true, // Use colors in the command line report.
-    defaultTimeoutInterval: 1000000,
-    random: false,
-    stopSpecOnExpectationFailure: true,
-  },
-
-  params: {
-    apiUrl: ' https://localhost:443/api/3.0',
-    baseUrl: 'https://localhost:443/',
-    login: {
-      username: 'admin',
-      password: 'twelve12'
-    }
-  },
-
-  onPrepare: async function () {
-    browser.waitForAngularEnabled(true);
+export let config: Config = conf;
+config.capabilities.chromeOptions.prefs.download.default_directory = 
downloadsPath;
+config.onPrepare = async function () {
+    await browser.waitForAngularEnabled(true);
 
     var fs = require('fs-extra');
 
@@ -103,6 +62,4 @@ export let config: Config = {
     } catch (error) {
       throw error
     }
-  },
-  
-};
+}
diff --git a/traffic_portal/test/integration/package-lock.json 
b/traffic_portal/test/integration/package-lock.json
index 1648c02..78359a2 100644
--- a/traffic_portal/test/integration/package-lock.json
+++ b/traffic_portal/test/integration/package-lock.json
@@ -11,12 +11,19 @@
       "requires": {
         "@types/minimatch": "*",
         "@types/node": "*"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "14.14.35",
+          "resolved": 
"https://registry.npmjs.org/@types/node/-/node-14.14.35.tgz";,
+          "integrity": 
"sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag=="
+        }
       }
     },
     "@types/jasmine": {
-      "version": "3.4.6",
-      "resolved": 
"https://registry.npmjs.org/@types/jasmine/-/jasmine-3.4.6.tgz";,
-      "integrity": 
"sha512-hpQHs+lmZ0uuCrGyqypdI1Ho7jRFolOBT6OkNdZPFziLSSEKvWu+VxWU6bGdNEA/hoV4jV8pdDeNx8EWlmfNAw==",
+      "version": "3.6.7",
+      "resolved": 
"https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.7.tgz";,
+      "integrity": 
"sha512-8dtfiykrpe4Ysn6ONj0tOjmpDIh1vWxPk80eutSeWmyaJvAZXZ84219fS4gLrvz05eidhp7BP17WVQBaXHSyXQ==",
       "dev": true
     },
     "@types/minimatch": {
@@ -25,9 +32,10 @@
       "integrity": 
"sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
     },
     "@types/node": {
-      "version": "12.12.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.0.tgz";,
-      "integrity": 
"sha512-6N8Sa5AaENRtJnpKXZgvc119PKxT1Lk9VPy4kfT8JF23tIe1qDfaGkBR2DRKJFIA7NptMz+fps//C6aLi1Uoug=="
+      "version": "12.20.6",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.6.tgz";,
+      "integrity": 
"sha512-sRVq8d+ApGslmkE9e3i+D3gFGk7aZHAT+G4cIpIEdLJYPsWiSPwcAnJEjddLQQDqV3Ra2jOclX/Sv6YrvGYiWA==",
+      "dev": true
     },
     "@types/q": {
       "version": "0.0.32",
@@ -62,11 +70,11 @@
       }
     },
     "ajv": {
-      "version": "6.10.2",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz";,
-      "integrity": 
"sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz";,
+      "integrity": 
"sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "requires": {
-        "fast-deep-equal": "^2.0.1",
+        "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
         "json-schema-traverse": "^0.4.1",
         "uri-js": "^4.2.2"
@@ -124,9 +132,9 @@
       "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
     },
     "aws4": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz";,
-      "integrity": 
"sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz";,
+      "integrity": 
"sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
     },
     "axios": {
       "version": "0.19.2",
@@ -195,12 +203,11 @@
       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
     },
     "cfb": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.3.tgz";,
-      "integrity": 
"sha512-joXBW0nMuwV9no7UTMiyVJnQL6XIU3ThXVjFUDHgl9MpILPOomyfaGqC290VELZ48bbQKZXnQ81UT5HouTxHsw==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.0.tgz";,
+      "integrity": 
"sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ==",
       "requires": {
         "adler-32": "~1.2.0",
-        "commander": "^2.16.0",
         "crc-32": "~1.2.0",
         "printj": "~1.1.2"
       }
@@ -227,67 +234,6 @@
         "mkdirp": "^0.5.1",
         "request": "^2.88.0",
         "tcp-port-used": "^1.0.1"
-      },
-      "dependencies": {
-        "del": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz";,
-          "integrity": 
"sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
-          "requires": {
-            "@types/glob": "^7.1.1",
-            "globby": "^6.1.0",
-            "is-path-cwd": "^2.0.0",
-            "is-path-in-cwd": "^2.0.0",
-            "p-map": "^2.0.0",
-            "pify": "^4.0.1",
-            "rimraf": "^2.6.3"
-          }
-        },
-        "globby": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz";,
-          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-          "requires": {
-            "array-union": "^1.0.1",
-            "glob": "^7.0.3",
-            "object-assign": "^4.0.1",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          },
-          "dependencies": {
-            "pify": {
-              "version": "2.3.0",
-              "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";,
-              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
-            }
-          }
-        },
-        "is-path-cwd": {
-          "version": "2.2.0",
-          "resolved": 
"https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz";,
-          "integrity": 
"sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ=="
-        },
-        "is-path-in-cwd": {
-          "version": "2.1.0",
-          "resolved": 
"https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz";,
-          "integrity": 
"sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
-          "requires": {
-            "is-path-inside": "^2.1.0"
-          }
-        },
-        "is-path-inside": {
-          "version": "2.1.0",
-          "resolved": 
"https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz";,
-          "integrity": 
"sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
-          "requires": {
-            "path-is-inside": "^1.0.2"
-          }
-        },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz";,
-          "integrity": 
"sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-        }
       }
     },
     "circular-json": {
@@ -415,11 +361,11 @@
       }
     },
     "debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz";,
-      "integrity": 
"sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz";,
+      "integrity": 
"sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
       "requires": {
-        "ms": "^2.1.1"
+        "ms": "2.0.0"
       }
     },
     "decamelize": {
@@ -433,17 +379,17 @@
       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
     },
     "del": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz";,
-      "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz";,
+      "integrity": 
"sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==",
       "requires": {
-        "globby": "^5.0.0",
-        "is-path-cwd": "^1.0.0",
-        "is-path-in-cwd": "^1.0.0",
-        "object-assign": "^4.0.1",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0",
-        "rimraf": "^2.2.8"
+        "@types/glob": "^7.1.1",
+        "globby": "^6.1.0",
+        "is-path-cwd": "^2.0.0",
+        "is-path-in-cwd": "^2.0.0",
+        "p-map": "^2.0.0",
+        "pify": "^4.0.1",
+        "rimraf": "^2.6.3"
       }
     },
     "delayed-stream": {
@@ -541,19 +487,6 @@
           "requires": {
             "ms": "2.0.0"
           }
-        },
-        "mkdirp": {
-          "version": "0.5.5",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";,
-          "integrity": 
"sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
-          "requires": {
-            "minimist": "^1.2.5"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";,
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
         }
       }
     },
@@ -563,14 +496,14 @@
       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
     },
     "fast-deep-equal": {
-      "version": "2.0.1",
-      "resolved": 
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz";,
-      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+      "version": "3.1.3",
+      "resolved": 
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";,
+      "integrity": 
"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
     },
     "fast-json-stable-stringify": {
-      "version": "2.0.0",
-      "resolved": 
"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";,
-      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+      "version": "2.1.0",
+      "resolved": 
"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz";,
+      "integrity": 
"sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
     },
     "fd-slicer": {
       "version": "1.1.0",
@@ -599,21 +532,6 @@
       "integrity": 
"sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
       "requires": {
         "debug": "=3.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz";,
-          "integrity": 
"sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";,
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-        }
       }
     },
     "forever-agent": {
@@ -701,16 +619,22 @@
       }
     },
     "globby": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz";,
-      "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz";,
+      "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
       "requires": {
         "array-union": "^1.0.1",
-        "arrify": "^1.0.0",
         "glob": "^7.0.3",
         "object-assign": "^4.0.1",
         "pify": "^2.0.0",
         "pinkie-promise": "^2.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";,
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+        }
       }
     },
     "graceful-fs": {
@@ -724,11 +648,11 @@
       "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
     },
     "har-validator": {
-      "version": "5.1.3",
-      "resolved": 
"https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz";,
-      "integrity": 
"sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "version": "5.1.5",
+      "resolved": 
"https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz";,
+      "integrity": 
"sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
       "requires": {
-        "ajv": "^6.5.5",
+        "ajv": "^6.12.3",
         "har-schema": "^2.0.0"
       }
     },
@@ -794,9 +718,9 @@
       "integrity": 
"sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA=="
     },
     "ip-regex": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz";,
-      "integrity": 
"sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz";,
+      "integrity": 
"sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q=="
     },
     "is-fullwidth-code-point": {
       "version": "2.0.0",
@@ -819,24 +743,24 @@
       "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA="
     },
     "is-path-cwd": {
-      "version": "1.0.0",
-      "resolved": 
"https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz";,
-      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
+      "version": "2.2.0",
+      "resolved": 
"https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz";,
+      "integrity": 
"sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ=="
     },
     "is-path-in-cwd": {
-      "version": "1.0.1",
-      "resolved": 
"https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz";,
-      "integrity": 
"sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+      "version": "2.1.0",
+      "resolved": 
"https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz";,
+      "integrity": 
"sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==",
       "requires": {
-        "is-path-inside": "^1.0.0"
+        "is-path-inside": "^2.1.0"
       }
     },
     "is-path-inside": {
-      "version": "1.0.1",
-      "resolved": 
"https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz";,
-      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+      "version": "2.1.0",
+      "resolved": 
"https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz";,
+      "integrity": 
"sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
       "requires": {
-        "path-is-inside": "^1.0.1"
+        "path-is-inside": "^1.0.2"
       }
     },
     "is-stream": {
@@ -888,27 +812,36 @@
       "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
     },
     "jasmine": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.5.0.tgz";,
-      "integrity": 
"sha512-DYypSryORqzsGoMazemIHUfMkXM7I7easFaxAvNM3Mr6Xz3Fy36TupTrAOxZWN8MVKEU5xECv22J4tUQf3uBzQ==",
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.7.0.tgz";,
+      "integrity": 
"sha512-wlzGQ+cIFzMEsI+wDqmOwvnjTvolLFwlcpYLCqSPPH0prOQaW3P+IzMhHYn934l1imNvw07oCyX+vGUv3wmtSQ==",
       "dev": true,
       "requires": {
-        "glob": "^7.1.4",
-        "jasmine-core": "~3.5.0"
+        "glob": "^7.1.6",
+        "jasmine-core": "~3.7.0"
       },
       "dependencies": {
-        "jasmine-core": {
-          "version": "3.5.0",
-          "resolved": 
"https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.5.0.tgz";,
-          "integrity": 
"sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA==",
-          "dev": true
+        "glob": {
+          "version": "7.1.6",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz";,
+          "integrity": 
"sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
         }
       }
     },
     "jasmine-core": {
-      "version": "2.8.0",
-      "resolved": 
"https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz";,
-      "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4="
+      "version": "3.7.1",
+      "resolved": 
"https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz";,
+      "integrity": 
"sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==",
+      "dev": true
     },
     "jasmine-data-provider": {
       "version": "2.2.0",
@@ -917,12 +850,12 @@
       "dev": true
     },
     "jasmine-reporters": {
-      "version": "2.3.2",
-      "resolved": 
"https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-2.3.2.tgz";,
-      "integrity": 
"sha512-u/7AT9SkuZsUfFBLLzbErohTGNsEUCKaQbsVYnLFW1gEuL2DzmBL4n8v90uZsqIqlWvWUgian8J6yOt5Fyk/+A==",
+      "version": "2.4.0",
+      "resolved": 
"https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-2.4.0.tgz";,
+      "integrity": 
"sha512-jxONSrBLN1vz/8zCx5YNWQSS8iyDAlXQ5yk1LuqITe4C6iXCDx5u6Q0jfNtkKhL4qLZPe69fL+AWvXFt9/x38w==",
       "requires": {
         "mkdirp": "^0.5.1",
-        "xmldom": "^0.1.22"
+        "xmldom": "^0.5.0"
       }
     },
     "jasmine2-protractor-utils": {
@@ -994,9 +927,9 @@
       }
     },
     "jszip": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz";,
-      "integrity": 
"sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==",
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz";,
+      "integrity": 
"sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==",
       "requires": {
         "lie": "~3.3.0",
         "pako": "~1.0.2",
@@ -1045,11 +978,6 @@
         "path-exists": "^3.0.0"
       }
     },
-    "lodash": {
-      "version": "4.17.15",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz";,
-      "integrity": 
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
-    },
     "map-age-cleaner": {
       "version": "0.1.3",
       "resolved": 
"https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz";,
@@ -1074,16 +1002,16 @@
       }
     },
     "mime-db": {
-      "version": "1.40.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz";,
-      "integrity": 
"sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
+      "version": "1.46.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz";,
+      "integrity": 
"sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ=="
     },
     "mime-types": {
-      "version": "2.1.24",
-      "resolved": 
"https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz";,
-      "integrity": 
"sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+      "version": "2.1.29",
+      "resolved": 
"https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz";,
+      "integrity": 
"sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
       "requires": {
-        "mime-db": "1.40.0"
+        "mime-db": "1.46.0"
       }
     },
     "mimic-fn": {
@@ -1105,24 +1033,17 @@
       "integrity": 
"sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
     },
     "mkdirp": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";,
-      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz";,
+      "integrity": 
"sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
       "requires": {
-        "minimist": "0.0.8"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "0.0.8",
-          "resolved": 
"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";,
-          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
-        }
+        "minimist": "^1.2.5"
       }
     },
     "ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";,
-      "integrity": 
"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz";,
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
     },
     "nice-try": {
       "version": "1.0.5",
@@ -1130,9 +1051,9 @@
       "integrity": 
"sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
     },
     "node": {
-      "version": "12.13.0",
-      "resolved": "https://registry.npmjs.org/node/-/node-12.13.0.tgz";,
-      "integrity": 
"sha512-quDNTkbEEXCuDQNXX0B3faD17s1ggJ7MpdhqQKiOnvy0jooaDHSJ079pP+MfOzRkujcJgEHNIA0/G2imOGZImg==",
+      "version": "12.21.0",
+      "resolved": "https://registry.npmjs.org/node/-/node-12.21.0.tgz";,
+      "integrity": 
"sha512-yJvxtDNX/bQA2XQjRyoxiPK8mbWnMIDFLAeRnteWTUA+KKISMxWbeM5JioO4FzZSxBe7qEmoZXrWa8w5OfMauw==",
       "requires": {
         "node-bin-setup": "^1.0.0"
       }
@@ -1238,9 +1159,9 @@
       }
     },
     "pako": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz";,
-      "integrity": 
"sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz";,
+      "integrity": 
"sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
     },
     "path": {
       "version": "0.12.7",
@@ -1282,9 +1203,9 @@
       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
     },
     "pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";,
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz";,
+      "integrity": 
"sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
     },
     "pinkie": {
       "version": "2.0.4",
@@ -1336,6 +1257,54 @@
         "yargs": "^12.0.5"
       },
       "dependencies": {
+        "del": {
+          "version": "2.2.2",
+          "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz";,
+          "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+          "requires": {
+            "globby": "^5.0.0",
+            "is-path-cwd": "^1.0.0",
+            "is-path-in-cwd": "^1.0.0",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0",
+            "rimraf": "^2.2.8"
+          }
+        },
+        "globby": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz";,
+          "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+          "requires": {
+            "array-union": "^1.0.1",
+            "arrify": "^1.0.0",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "is-path-cwd": {
+          "version": "1.0.0",
+          "resolved": 
"https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz";,
+          "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0="
+        },
+        "is-path-in-cwd": {
+          "version": "1.0.1",
+          "resolved": 
"https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz";,
+          "integrity": 
"sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+          "requires": {
+            "is-path-inside": "^1.0.0"
+          }
+        },
+        "is-path-inside": {
+          "version": "1.0.1",
+          "resolved": 
"https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz";,
+          "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+          "requires": {
+            "path-is-inside": "^1.0.1"
+          }
+        },
         "jasmine": {
           "version": "2.8.0",
           "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz";,
@@ -1346,6 +1315,21 @@
             "jasmine-core": "~2.8.0"
           }
         },
+        "jasmine-core": {
+          "version": "2.8.0",
+          "resolved": 
"https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz";,
+          "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4="
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz";,
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+        },
+        "q": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz";,
+          "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4="
+        },
         "selenium-webdriver": {
           "version": "3.6.0",
           "resolved": 
"https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz";,
@@ -1435,13 +1419,18 @@
             "jsonfile": "^2.1.0",
             "klaw": "^1.0.0"
           }
+        },
+        "lodash": {
+          "version": "4.17.21",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz";,
+          "integrity": 
"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
         }
       }
     },
     "psl": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz";,
-      "integrity": 
"sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw=="
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz";,
+      "integrity": 
"sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
     },
     "pump": {
       "version": "3.0.0",
@@ -1458,9 +1447,9 @@
       "integrity": 
"sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
     },
     "q": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz";,
-      "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4="
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz";,
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
     },
     "qs": {
       "version": "6.5.2",
@@ -1497,9 +1486,9 @@
       }
     },
     "readable-stream": {
-      "version": "2.3.6",
-      "resolved": 
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";,
-      "integrity": 
"sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+      "version": "2.3.7",
+      "resolved": 
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz";,
+      "integrity": 
"sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
       "requires": {
         "core-util-is": "~1.0.0",
         "inherits": "~2.0.3",
@@ -1516,9 +1505,9 @@
       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
     },
     "request": {
-      "version": "2.88.0",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz";,
-      "integrity": 
"sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+      "version": "2.88.2",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz";,
+      "integrity": 
"sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
       "requires": {
         "aws-sign2": "~0.7.0",
         "aws4": "^1.8.0",
@@ -1527,7 +1516,7 @@
         "extend": "~3.0.2",
         "forever-agent": "~0.6.1",
         "form-data": "~2.3.2",
-        "har-validator": "~5.1.0",
+        "har-validator": "~5.1.3",
         "http-signature": "~1.2.0",
         "is-typedarray": "~1.0.0",
         "isstream": "~0.1.2",
@@ -1537,7 +1526,7 @@
         "performance-now": "^2.1.0",
         "qs": "~6.5.2",
         "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.4.3",
+        "tough-cookie": "~2.5.0",
         "tunnel-agent": "^0.6.0",
         "uuid": "^3.3.2"
       }
@@ -1584,33 +1573,32 @@
       "integrity": 
"sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
     },
     "selenium-webdriver": {
-      "version": "4.0.0-alpha.8",
-      "resolved": 
"https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.8.tgz";,
-      "integrity": 
"sha512-yPSaiWySZTEbxuuWQMDqdXh3H3N4Aiw/bSUjpkKMPWWCysfPqUncrq6FewBqdxWD1wQKzy5yWaQMGsgTY/0rCQ==",
+      "version": "4.0.0-beta.2",
+      "resolved": 
"https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.2.tgz";,
+      "integrity": 
"sha512-uuNl3T1JjhrXCO4UAAy+iIIgZ/PqgYNiYvy+yfWCY+x2vHH9y7tIdD9a/q1rwbf/5jD/ENwYlVuNj46uIngknA==",
       "requires": {
         "jszip": "^3.5.0",
         "rimraf": "^2.7.1",
-        "tmp": "^0.1.0",
+        "tmp": "^0.2.1",
         "ws": "^7.3.1"
       },
       "dependencies": {
-        "jszip": {
-          "version": "3.5.0",
-          "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz";,
-          "integrity": 
"sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==",
-          "requires": {
-            "lie": "~3.3.0",
-            "pako": "~1.0.2",
-            "readable-stream": "~2.3.6",
-            "set-immediate-shim": "~1.0.1"
-          }
-        },
         "tmp": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz";,
-          "integrity": 
"sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==",
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz";,
+          "integrity": 
"sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
           "requires": {
-            "rimraf": "^2.6.3"
+            "rimraf": "^3.0.0"
+          },
+          "dependencies": {
+            "rimraf": {
+              "version": "3.0.2",
+              "resolved": 
"https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz";,
+              "integrity": 
"sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+              "requires": {
+                "glob": "^7.1.3"
+              }
+            }
           }
         }
       }
@@ -1662,9 +1650,9 @@
       }
     },
     "ssf": {
-      "version": "0.10.2",
-      "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.2.tgz";,
-      "integrity": 
"sha512-rDhAPm9WyIsY8eZEKyE8Qsotb3j/wBdvMWBUsOhJdfhKGLfQidRjiBUV0y/MkyCLiXQ38FG6LWW/VYUtqlIDZQ==",
+      "version": "0.10.3",
+      "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz";,
+      "integrity": 
"sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==",
       "requires": {
         "frac": "~1.1.2"
       }
@@ -1751,6 +1739,11 @@
           "requires": {
             "ms": "2.1.2"
           }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";,
+          "integrity": 
"sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
         }
       }
     },
@@ -1774,19 +1767,12 @@
       }
     },
     "tough-cookie": {
-      "version": "2.4.3",
-      "resolved": 
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz";,
-      "integrity": 
"sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+      "version": "2.5.0",
+      "resolved": 
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz";,
+      "integrity": 
"sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
       "requires": {
-        "psl": "^1.1.24",
-        "punycode": "^1.4.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": 
"https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";,
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
-        }
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
       }
     },
     "tunnel-agent": {
@@ -1808,9 +1794,9 @@
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
     },
     "typescript": {
-      "version": "3.6.4",
-      "resolved": 
"https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz";,
-      "integrity": 
"sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==",
+      "version": "3.9.9",
+      "resolved": 
"https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz";,
+      "integrity": 
"sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
       "dev": true
     },
     "universalify": {
@@ -1819,9 +1805,9 @@
       "integrity": 
"sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
     },
     "uri-js": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";,
-      "integrity": 
"sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz";,
+      "integrity": 
"sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
       "requires": {
         "punycode": "^2.1.0"
       }
@@ -1847,9 +1833,9 @@
       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
     },
     "uuid": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz";,
-      "integrity": 
"sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz";,
+      "integrity": 
"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
     },
     "verror": {
       "version": "1.10.0",
@@ -1896,6 +1882,11 @@
       "resolved": 
"https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz";,
       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
     },
+    "wmf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz";,
+      "integrity": 
"sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
+    },
     "wrap-ansi": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz";,
@@ -1931,22 +1922,23 @@
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
     "ws": {
-      "version": "7.4.2",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz";,
-      "integrity": 
"sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA=="
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz";,
+      "integrity": 
"sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw=="
     },
     "xlsx": {
-      "version": "0.15.1",
-      "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.15.1.tgz";,
-      "integrity": 
"sha512-z+o4+QPMc32EPboLCzJAz94o0Zyy+8jrmWTsVpfzwknFln9qDO6/HN1KrGGVC4//sGA7dh4R3HA4fhbGIKCDOA==",
+      "version": "0.15.6",
+      "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.15.6.tgz";,
+      "integrity": 
"sha512-7vD9eutyLs65iDjNFimVN+gk/oDkfkCgpQUjdE82QgzJCrBHC4bGPH7fzKVyy0UPp3gyFVQTQEFJaWaAvZCShQ==",
       "requires": {
         "adler-32": "~1.2.0",
-        "cfb": "^1.1.3",
+        "cfb": "^1.1.4",
         "codepage": "~1.14.0",
         "commander": "~2.17.1",
         "crc-32": "~1.2.0",
         "exit-on-epipe": "~1.0.1",
-        "ssf": "~0.10.2"
+        "ssf": "~0.10.3",
+        "wmf": "~1.0.1"
       }
     },
     "xml2js": {
@@ -1979,9 +1971,9 @@
       }
     },
     "xmldom": {
-      "version": "0.1.31",
-      "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz";,
-      "integrity": 
"sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.5.0.tgz";,
+      "integrity": 
"sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA=="
     },
     "y18n": {
       "version": "4.0.1",
diff --git a/traffic_portal/test/integration/package.json 
b/traffic_portal/test/integration/package.json
index 2fec15e..8801125 100644
--- a/traffic_portal/test/integration/package.json
+++ b/traffic_portal/test/integration/package.json
@@ -27,12 +27,10 @@
     "jasmine-data-provider": "^2.2.0",
     "typescript": "^3.6.4"
   },
-  "scripts": {
-    "test": "protractor config.ts"
-  },
+  "scripts": {},
   "repository": {
     "type": "git",
-    "url": "https://github.comcast.com/cdn/cdn-tests";
+    "url": "https://github.com/apache/trafficcontrol";
   },
   "author": "Lavanya, Dandy",
   "license": "ISC"
diff --git a/traffic_portal/test/integration/tsconfig.json 
b/traffic_portal/test/integration/tsconfig.json
index 9d46941..eac68a9 100644
--- a/traffic_portal/test/integration/tsconfig.json
+++ b/traffic_portal/test/integration/tsconfig.json
@@ -6,7 +6,8 @@
     "inlineSourceMap": true,
     "declaration": false,
     "noImplicitAny": false,
-    "outDir": "GeneratedCode"
+    "outDir": "GeneratedCode",
+    "resolveJsonModule": true
   },
   "exclude": [
     "node_modules"

Reply via email to