cs-freshness-test: Add test case for ContentStore and Data freshness
Refs: #1383
Change-Id: I69bf06dbb42b39ea8929bbd87a08d6f2723caeb7
diff --git a/test_cs_freshness/NDNTrafficClient.conf b/test_cs_freshness/NDNTrafficClient.conf
new file mode 100644
index 0000000..8b5e7b4
--- /dev/null
+++ b/test_cs_freshness/NDNTrafficClient.conf
@@ -0,0 +1,6 @@
+##########
+TrafficPercentage=100
+Name=ndn:/test-caching/A
+ExpectedContent=AAAAAAAA
+MustBeFresh=1
+##########
diff --git a/test_cs_freshness/NDNTrafficServer.conf b/test_cs_freshness/NDNTrafficServer.conf
new file mode 100644
index 0000000..f902ebb
--- /dev/null
+++ b/test_cs_freshness/NDNTrafficServer.conf
@@ -0,0 +1,5 @@
+##########
+Name=ndn:/test-caching
+Content=AAAAAAAA
+FreshnessPeriod=2800
+##########
diff --git a/test_cs_freshness/README.md b/test_cs_freshness/README.md
new file mode 100644
index 0000000..23ed4c2
--- /dev/null
+++ b/test_cs_freshness/README.md
@@ -0,0 +1,14 @@
+Topology: Single host.
+
+Steps:
+
+1. Start NFD.
+2. Start ndn-traffic-server to serve `ndn:/test-caching`, FreshnessPeriod=2800ms
+3. Invoke ndn-tlv-peek to send Interest `ndn:/test-caching/A`, MustBeFresh=yes. Fail if this Interest is unanswered.
+4. Pause 1000ms.
+5. Invoke ndn-tlv-peek to send Interest `ndn:/test-caching/A`, MustBeFresh=yes. Fail if this Interest is unanswered.
+6. Kill ndn-traffic-server. Check "total Interests received" equals 1.
+7. Pause 2000ms.
+8. Invoke ndn-tlv-peek to send Interest `ndn:/test-caching/A`, MustBeFresh=yes. Fail if this Interest is answered.
+9. Invoke ndn-tlv-peek to send Interest `ndn:/test-caching/A` without MustBeFresh. Fail if this Interest is unanswered.
+
diff --git a/test_cs_freshness/__init__.py b/test_cs_freshness/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test_cs_freshness/__init__.py
diff --git a/test_cs_freshness/cs-freshness-test.sh b/test_cs_freshness/cs-freshness-test.sh
new file mode 100755
index 0000000..f1be323
--- /dev/null
+++ b/test_cs_freshness/cs-freshness-test.sh
@@ -0,0 +1,70 @@
+#!/usr/bin/env bash
+mkdir -p logs
+
+clean_up() {
+ r=$(killall ndn-traffic-server 2>&1)
+ r=$(sudo killall nfd 2>&1)
+}
+
+# Start NFD.
+sudo nfd > logs/nfd.log 2>&1 &
+sleep 1
+
+# Start ndn-traffic-server to serve `ndn:/test-caching`, FreshnessPeriod=2800ms
+ndn-traffic-server NDNTrafficServer.conf > logs/server.log 2>&1 &
+sleep 1
+
+# Invoke ndn-tlv-peek to send Interest `ndn:/test-caching/A`, MustBeFresh=yes. Fail if this Interest is unanswered.
+output=$(ndn-tlv-peek -fp ndn:/test-caching/A)
+if [[ $output != 'AAAAAAAA' ]]
+then
+ echo "FAIL: Expected data for first interest: 'AAAAAAAA', Actual: '$output'"
+ clean_up
+ exit 1
+fi
+
+# Pause 1000ms.
+sleep 1
+
+# Invoke ndn-tlv-peek to send Interest `ndn:/test-caching/A`, MustBeFresh=yes. Fail if this Interest is unanswered.
+output=$(ndn-tlv-peek -fp ndn:/test-caching/A)
+if [[ $output != 'AAAAAAAA' ]]
+then
+ echo "FAIL: Expected data for second interest: 'AAAAAAAA', Actual: '$output'"
+ clean_up
+ exit 2
+fi
+
+# Kill ndn-traffic-server. Check "total Interests received" equals 1.
+killall ndn-traffic-server
+sleep 5
+output=$(grep 'Total Interests Received' logs/server.log | head -1 | cut -d = -f2 | cut -d' ' -f2)
+if [[ $output != '1' ]]
+then
+ echo "FAIL: Expected ndn-traffic-server receives 1 interest. Actual: $output"
+ clean_up
+ exit 3
+fi
+
+# Invoke ndn-tlv-peek to send Interest `ndn:/test-caching/A`, MustBeFresh=yes. Fail if this Interest is answered.
+output=$(ndn-tlv-peek -fp ndn:/test-caching/A)
+if [[ ! -z $output ]]
+then
+ echo "FAIL: Expected no data received for third interest. Actual data received: '$output'"
+ clean_up
+ exit 4
+fi
+sleep 1
+
+# Invoke ndn-tlv-peek to send Interest `ndn:/test-caching/A` without MustBeFresh. Fail if this Interest is unanswered.
+output=$(ndn-tlv-peek -p ndn:/test-caching/A)
+if [[ $output != 'AAAAAAAA' ]]
+then
+ echo "FAIL: Expected data for fourth interest: 'AAAAAAAA', Actual: '$output'"
+ clean_up
+ exit 5
+fi
+
+# clean up
+clean_up
+echo "ContentStore and freshness test scenario PASSED"
diff --git a/test_cs_freshness/test_cs_freshness.py b/test_cs_freshness/test_cs_freshness.py
new file mode 100644
index 0000000..f935f7a
--- /dev/null
+++ b/test_cs_freshness/test_cs_freshness.py
@@ -0,0 +1,36 @@
+#!/usr/bin/python2
+# -*- Mode:python; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+#
+# Copyright (C) 2014 University of Arizona
+# Author: Yi Huang <ltr120@email.arizona.edu>
+# See COPYING for copyright and distribution information.
+#
+
+import os
+import unittest
+import subprocess
+
+class test_cs_freshness(unittest.TestCase):
+ """Test case for testing ContentStore and Freshness"""
+
+ def setUp(self):
+ print "\nTesting ContentStore and Freshness"
+ print "**********************************"
+ os.chdir("test_cs_freshness")
+
+ def tearDown(self):
+ print "**********************************"
+ os.chdir("..")
+
+ def test_cs_freshness(self):
+ ret = subprocess.call(["./cs-freshness-test.sh"], shell=True)
+ print "Test script return value:", ret
+ errormsg = {
+ 1 : "No data received for first interest",
+ 2 : "No data received for second interest",
+ 3 : "ndn-traffic-server should receive exact 1 interest",
+ 4 : "Data received for third interest (expected no data received)",
+ 5 : "No data received for fourth interest",
+ }
+ if (ret != 0):
+ self.fail(errormsg[ret])