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

Change-Id: I6faad2ca93b0a7bb5108a1ffe42ff82f30451ae9
diff --git a/tests/afrouter/templates/server.go b/tests/afrouter/templates/server.go
new file mode 100644
index 0000000..8461d38
--- /dev/null
+++ b/tests/afrouter/templates/server.go
@@ -0,0 +1,150 @@
+/*
+ * 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 (
+	"fmt"
+	"net"
+	"errors"
+	"encoding/json"
+	"google.golang.org/grpc"
+	"golang.org/x/net/context"
+	"google.golang.org/grpc/metadata"
+	"github.com/opencord/voltha-go/common/log"
+	// Values generated by the go template
+	{{range .Imports}}
+	"{{.}}"
+	{{end}}
+	{{range .ProtoImports}}
+	{{.Short}} "{{.Package}}"
+	{{end}}
+	// End go template values
+)
+
+// The channels to get fed the expected results by the test driver.
+//var {{.Name}}Meta <-chan string
+////var {{.Name}}Payload <-chan string
+
+{{if .Ct}}{{else}}
+type reply struct {
+	repl interface{}
+}
+type incoming struct {
+	meta metadata.MD
+	payload string
+}
+type  serverCtl struct {
+	replyData chan * reply
+	incmg chan * incoming
+}
+{{end}}
+
+type {{.Name}}TestServer struct {
+	control *serverCtl
+	srv *grpc.Server
+}
+
+/*
+func init() {
+	{{if .Ct}}{{else}}
+	if _, err := log.SetDefaultLogger(log.JSON, 0, nil); err != nil {
+		log.With(log.Fields{"error": err}).Fatal("Cannot setup logging")
+	}
+	{{end}}
+	{{.Name}}ListenAndServe()
+}
+*/
+
+
+func {{.Name}}ListenAndServe() error {
+	var s {{.Name}}TestServer
+
+	s.control = &serverCtl{replyData:make(chan *reply,1), incmg:make(chan *incoming,1)}
+	servers["{{.Name}}"] = s.control
+
+	log.Debugf("Starting server %s on port %d", "{{.Name}}", {{.Port}})
+	// THe test head always uses localhost 127.0.0.1
+	addr := fmt.Sprintf("127.0.0.1:%d", {{.Port}})
+
+	// Create the gRPC server
+	s.srv = grpc.NewServer()
+
+{{range .ProtoImports}}
+	// Register the handler object
+	{{.Short}}.Register{{.Service}}Server(s.srv, s)
+{{end}}
+
+	// Create the channel to listen on
+	lis, err := net.Listen("tcp", addr)
+	if err != nil {
+		log.Errorf("could not listen on %s: %s", addr, err)
+		return err
+	}
+
+	// Serve and Listen
+	go func() {
+		if err = s.srv.Serve(lis); err != nil {
+			log.Errorf("grpc serve error: %s", err)
+			return
+		}
+	}()
+
+	return err
+}
+
+{{range .Methods}}
+{{if .Ss}}
+func (ts {{$.Name}}TestServer) {{.Name}}(in *{{.Param}}, srvr {{.Pkg}}.{{.Svc}}_{{.Name}}Server) error {
+	return nil
+}
+{{else if .Cs}}
+func (ts {{$.Name}}TestServer) {{.Name}}({{.Pkg}}.{{.Svc}}_{{.Name}}Server) error {
+	return nil
+}
+{{else}}
+func  (ts {{$.Name}}TestServer) {{.Name}}(ctx context.Context, in *{{.Param}}) (*{{.Rtrn}}, error) {
+	var r * incoming = &incoming{}
+	// Read the metadata
+	if md,ok := metadata.FromIncomingContext(ctx); ok == false {
+		log.Error("Getting matadata during call to {{.Name}}")
+	} else {
+		r.meta = md.Copy()
+	}
+	// Read the data sent to the function
+	if parm,err := json.Marshal(in); err != nil {
+		log.Error("Marshalling the {{.Param}} for {{.Name}}")
+	} else {
+		r.payload = string(parm)
+	}
+	// Send the server information back to the test framework
+	ts.control.incmg <- r
+	// Read the value that needs to be returned from the channel
+	d := <-ts.control.replyData
+	switch r := d.repl.(type) {
+		case *{{.Rtrn}}:
+			return r, nil
+		default:
+			return nil, errors.New("Mismatched type in call to {{.Name}}")
+	}
+	return &{{.Rtrn}}{},nil
+}
+{{end}}
+{{end}}
+