Initial commit for the affinity router test framework
added license junk.

Change-Id: I6faad2ca93b0a7bb5108a1ffe42ff82f30451ae9
diff --git a/tests/afrouter/templates/main.go b/tests/afrouter/templates/main.go
new file mode 100644
index 0000000..5c094d9
--- /dev/null
+++ b/tests/afrouter/templates/main.go
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// The template for the tester.
+// This template is filled in by the
+// test driver based on the configuration.
+
+package main
+
+import (
+	"os"
+	"time"
+	"os/exec"
+	"strings"
+	"context"
+	"github.com/opencord/voltha-go/common/log"
+)
+
+var resFile *os.File
+
+func startSut(cmdStr string) (context.CancelFunc, error) {
+	var err error = nil
+
+	cmdAry := strings.Fields(cmdStr)
+	log.Infof("Running the affinity router: %s",cmdStr)
+	//ctx, cncl := context.WithCancel(context.Background())
+	ctx, cncl := context.WithCancel(context.Background())
+	cmd := exec.CommandContext(ctx, cmdAry[0], cmdAry[1:]...)
+	cmd.Stdin = os.Stdin
+	cmd.Stdout = os.Stdout
+	cmd.Stderr = os.Stderr
+	if err = cmd.Start(); err != nil {
+		log.Errorf("Failed to run the affinity router: %s %v", cmdStr,err)
+	}
+	time.Sleep(1 * time.Second) // Give the command time to get started
+	return cncl, err
+}
+
+func cleanUp(cncl context.CancelFunc) {
+	cncl()
+	// Give the child processes time to terminate
+	time.Sleep(1 * time.Second)
+}
+
+func main() {
+	var err error
+
+	// Setup logging
+	if _, err = log.SetDefaultLogger(log.JSON, 0, nil); err != nil {
+		log.With(log.Fields{"error": err}).Fatal("Cannot setup logging")
+	}
+
+	defer log.CleanUp()
+
+	// Open the results file to write the results to
+	if resFile, err = os.OpenFile(os.Args[1], os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644); err != nil {
+		log.Errorf("Could not append to the results file")
+	}
+
+	defer resFile.Close()
+
+	// Initialize the servers
+	if err := serverInit(); err != nil {
+		log.Errorf("Error initializing server: %v", err)
+		return
+	}
+
+	// Start the sofware under test
+	cnclFunc, err := startSut("./{{.Command}}");
+	defer cleanUp(cnclFunc)
+	if  err != nil {
+		return
+	}
+
+	// Initialize the clients
+	if err := clientInit(); err != nil {
+		log.Errorf("Error initializing client: %v", err)
+		return
+	}
+
+	log.Infof("The servers are: %v",servers)
+
+	// Run all the test cases now
+	log.Infof("Executing tests")
+	resFile.Write([]byte("Executing tests\n"))
+	runTests()
+
+}