#!/bin/sh
#
# Automated integration testing for the Named Data Networking Forwarding Daemon.
# Part of the Named Data Networking project <http://named-data.net>
#
# --
#
# Copyright (c) 2014-2015,  Regents of the University of California,
#                           Arizona Board of Regents,
#                           Colorado State University,
#                           University Pierre & Marie Curie, Sorbonne University,
#                           Washington University in St. Louis,
#                           Beijing Institute of Technology,
#                           The University of Memphis.
#
# This file is part of NFD (Named Data Networking Forwarding Daemon).
# See AUTHORS.md for complete list of NFD authors and contributors.
#
# NFD is free software: you can redistribute it and/or modify it under the terms
# of the GNU General Public License as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
#
# Author: Eric Newberry <enewberry@email.arizona.edu>

mkdir -p logs/A logs/B logs/C logs/D
mkdir -p temp
ssh-keygen -t ecdsa -f temp/sshkey -q -N ""

vagrant up router

vagrant up template
vagrant ssh template -c "sudo apt-get clean"
vagrant package --output nfd-integ.box template
vagrant box remove nfd-integ
vagrant box add --name nfd-integ nfd-integ.box

vagrant up A
vagrant up B
vagrant up C
vagrant up D

vagrant ssh A -c "cd integration-tests && ./run_tests.py test_all 2>&1 | tee run.log"
vagrant ssh A -c "integration-tests/collect-logs.sh A"
vagrant ssh B -c "integration-tests/collect-logs.sh B"
vagrant ssh C -c "integration-tests/collect-logs.sh C"
vagrant ssh D -c "integration-tests/collect-logs.sh D"

vagrant destroy -f

vagrant box remove nfd-integ
rm -Rf temp
rm -f nfd-integ.box
