Updates to the affinity router test framework as
well as bug fixes to the affinity router found by
the test framework.

Change-Id: I90e6baa9e9ee11bd8034498b8651e9e14512e528
diff --git a/tests/afrouter/suites/test3.tmpl.json b/tests/afrouter/suites/test3.tmpl.json
new file mode 100644
index 0000000..b3118ff
--- /dev/null
+++ b/tests/afrouter/suites/test3.tmpl.json
@@ -0,0 +1,235 @@
+{
+	"environment":{
+		"cmdLine":"afrouter -config arouter_test.json -logLevel 1",
+		"protoFiles": [
+			{
+				"importPath":"github.com/opencord/voltha-go/protos/",
+				"service":"VolthaService",
+				"package":"voltha"
+			},
+			{
+				"importPath":"github.com/opencord/voltha-go/protos/",
+				"service":"Configuration",
+				"package":"afrouter"
+			}
+		],
+		"imports": [
+			"github.com/golang/protobuf/ptypes/empty",
+			"github.com/opencord/voltha-go/protos/openflow_13"
+		],
+		"protoDesc":"voltha.pb",
+		"protoSubst": [
+			{
+				"from":"google.protobuf.Empty",
+				"to":"empty.Empty"
+			}
+		],
+		"clients": {
+			"imports": [
+				 "github.com/golang/protobuf/ptypes/empty",
+				 "github.com/opencord/voltha-go/protos/openflow_13"
+			],
+			"endpoints": [
+				{
+					"name":"client",
+					"port":"5000"
+				},
+				{
+					"name":"stats",
+					"port":"55554"
+				}
+			]
+		},
+		"servers": {
+			"imports": [
+				 "github.com/golang/protobuf/ptypes/empty",
+				 "github.com/opencord/voltha-go/protos/openflow_13"
+			],
+			"endpoints": [
+			{
+				"name":"core11",
+				"port":"5011"
+			},
+			{
+				"name":"core12",
+				"port":"5012"
+			},
+			{
+				"name":"core21",
+				"port":"5021"
+			},
+			{
+				"name":"core22",
+				"port":"5022"
+			},
+			{
+				"name":"core31",
+				"port":"5031"
+			},
+			{
+				"name":"core32",
+				"port":"5032"
+			},
+			{
+				"name":"roCore1",
+				"port":"5001"
+			},
+			{
+				"name":"roCore2",
+				"port":"5002"
+			},
+			{
+				"name":"roCore3",
+				"port":"5003"
+			}
+			]
+		}
+	},
+	"tests":[
+		{{range $k,$v := .RoTests}}
+		{
+			"name":"{{$v.Name}}",
+			"send": {
+				"client":"client",
+				"method":"{{$v.Method}}",
+				"param":"{{$v.Param}}",
+				"expect":"{{$v.Expect}}",
+				"_meta":""
+			},
+			"servers": [
+				{
+					"name":"core{{$v.Core}}1",
+					"meta": [
+						{
+							"key":"voltha_serial_number",
+							"value":"{{$v.SerNo}}"
+						}
+					]
+				},
+				{
+					"name":"core{{$v.Core}}2",
+					"meta": [
+						{
+							"key":"voltha_serial_number",
+							"value":"{{$v.SerNo}}"
+						}
+					]
+				}
+			]
+		},
+		{{end}}
+		{{range $k,$v := .RwTests}}
+		{
+			"name":"{{$v.Name}}",
+			"send": {
+				"client":"client",
+				"method":"{{$v.Method}}",
+				"param":"{{$v.Param}}",
+				"expect":"{{$v.Expect}}",
+				"_meta":""
+			},
+			"servers": [
+				{
+					"name":"core{{$v.Core}}1",
+					"meta": [
+						{
+							"key":"voltha_serial_number",
+							"value":"{{$v.SerNo}}"
+						}
+					]
+				},
+				{
+					"name":"core{{$v.Core}}2",
+					"meta": [
+						{
+							"key":"voltha_serial_number",
+							"value":"{{$v.SerNo}}"
+						}
+					]
+				}
+			]
+		},
+		{{end}}
+		{{range $k,$v := .CtlTests}}
+		{
+			"name":"{{$v.Name}}",
+			"send": {
+				"client":"client",
+				"method":"{{$v.Method}}",
+				"param":"{{$v.Param}}",
+				"expect":"{{$v.Expect}}",
+				"_meta":""
+			},
+			"servers": [
+				{
+					"name":"core{{$v.Core}}1",
+					"meta": [
+						{
+							"key":"voltha_serial_number",
+							"value":"{{$v.SerNo}}"
+						}
+					]
+				},
+				{
+					"name":"core{{$v.Core}}2",
+					"meta": [
+						{
+							"key":"voltha_serial_number",
+							"value":"{{$v.SerNo}}"
+						}
+					]
+				}
+			]
+		},
+		{{end}}
+		{
+			"name":"Test Subscribe",
+			"send": {
+				"client":"client",
+				"method":"Subscribe",
+				"param":"{OfagentId:\"Agent007\"}",
+				"meta": [
+					{
+						"key":"voltha_backend_name",
+						"value":""
+					}
+				],
+				"expect":"{OfagentId:\"Agent007\",VolthaId:\"core11\"}",
+				"expectMeta": [
+					{
+						"key":"voltha_backend_name",
+						"value":"vcore1"
+					}
+				]
+			},
+			"servers": [
+				{
+					"name":"core11",
+					"meta": [
+						{
+							"key":"voltha_serial_number",
+							"value":"44"
+						},
+						{
+							"key":"voltha_backend_name",
+							"value":""
+						}
+					]
+				}
+			]
+		},
+		{
+			"_COMMENT":"If this test case fails, there could be a goroutine leak",
+			"name":"Get goroutine count",
+			"send": {
+				"client":"stats",
+				"method":"GetGoroutineCount",
+				"param":"{}",
+				"meta": [ ],
+				"expect":"{Count:39}",
+				"expectMeta": [ ]
+			},
+			"servers": [ ]
+		}
+	]
+}