From d40abebdeed3bea88e954b02feb51f698c9c0083 Mon Sep 17 00:00:00 2001
From: Manuel Kieweg <mail@manuelkieweg.de>
Date: Thu, 18 Feb 2021 14:57:00 +0000
Subject: [PATCH] GNMI Transport and PND tests complete

---
 nucleus/gnmi_transport_test.go         |  33 ++++----
 nucleus/principalNetworkDomain_test.go | 109 ++++++++++++++-----------
 2 files changed, 82 insertions(+), 60 deletions(-)

diff --git a/nucleus/gnmi_transport_test.go b/nucleus/gnmi_transport_test.go
index dd9e73e7b..ba05a018a 100644
--- a/nucleus/gnmi_transport_test.go
+++ b/nucleus/gnmi_transport_test.go
@@ -35,13 +35,6 @@ func testSetupGnmi() {
 		Encoding: gpb.Encoding_PROTO,
 	}
 
-	transport = &Gnmi{
-		SetNode:  nil,
-		RespChan: make(chan *gpb.SubscribeResponse),
-		config:   gnmiConfig,
-		client:   &mocks.GNMIClient{},
-	}
-
 	startGnmiTarget = make(chan string)
 	stopGnmiTarget = make(chan bool)
 	go targetRunner()
@@ -56,13 +49,22 @@ func targetRunner() {
 	}
 }
 
-var transport *Gnmi
+func mockTransport() Gnmi {
+	return Gnmi{
+		SetNode:  nil,
+		RespChan: make(chan *gpb.SubscribeResponse),
+		config:   gnmiConfig,
+		client:   &mocks.GNMIClient{},
+	}
+}
+
 var gnmiConfig *gnmi.Config
 var startGnmiTarget chan string
 var stopGnmiTarget chan bool
 var mockContext = mock.MatchedBy(func(ctx context.Context) bool { return true })
 
 func TestGnmi_Capabilities(t *testing.T) {
+	transport := mockTransport()
 	capabilityResponse := &gpb.CapabilityResponse{
 		SupportedModels:    nil,
 		SupportedEncodings: []gpb.Encoding{gpb.Encoding_PROTO, gpb.Encoding_JSON_IETF, gpb.Encoding_JSON},
@@ -93,7 +95,7 @@ func TestGnmi_Capabilities(t *testing.T) {
 	}{
 		{
 			name:   "mock",
-			fields: fields{transport: transport},
+			fields: fields{transport: &transport},
 			args: args{
 				endpoint:    gnmiConfig.Addr,
 				runEndpoint: false,
@@ -151,6 +153,7 @@ func TestGnmi_Close(t *testing.T) {
 }
 
 func TestGnmi_Get(t *testing.T) {
+	transport := mockTransport()
 	getRequest := &gpb.GetRequest{
 		Prefix:    nil,
 		Path:      nil,
@@ -201,14 +204,14 @@ func TestGnmi_Get(t *testing.T) {
 		},
 		{
 			name:    "mock",
-			fields:  fields{transport: transport},
+			fields:  fields{transport: &transport},
 			args:    args{},
 			want:    getResponse,
 			wantErr: false,
 		},
 		{
 			name:   "endpoint",
-			fields: fields{transport: transport},
+			fields: fields{transport: &transport},
 			args: args{
 				runEndpoint: true,
 			},
@@ -237,6 +240,7 @@ func TestGnmi_Get(t *testing.T) {
 }
 
 func TestGnmi_GetConfig(t *testing.T) {
+	transport := mockTransport()
 	type fields struct {
 		transport *Gnmi
 	}
@@ -247,7 +251,7 @@ func TestGnmi_GetConfig(t *testing.T) {
 	}{
 		{
 			name:   "default",
-			fields: fields{transport: transport},
+			fields: fields{transport: &transport},
 			want:   gnmiConfig,
 		},
 	}
@@ -455,6 +459,7 @@ func TestGnmi_get(t *testing.T) {
 }
 
 func TestGnmi_getWithRequest(t *testing.T) {
+	transport := mockTransport()
 	reqFullNode := &gpb.GetRequest{}
 	reqInterfacesWildcard := &gpb.GetRequest{}
 	respFullNode := &gpb.GetResponse{}
@@ -504,7 +509,7 @@ func TestGnmi_getWithRequest(t *testing.T) {
 	}{
 		{
 			name:   "getFullNode",
-			fields: fields{transport: transport},
+			fields: fields{transport: &transport},
 			args: args{
 				request: reqFullNode,
 			},
@@ -513,7 +518,7 @@ func TestGnmi_getWithRequest(t *testing.T) {
 		},
 		{
 			name:   "getInterfacesWildcard",
-			fields: fields{transport: transport},
+			fields: fields{transport: &transport},
 			args: args{
 				request: reqInterfacesWildcard,
 			},
diff --git a/nucleus/principalNetworkDomain_test.go b/nucleus/principalNetworkDomain_test.go
index 784ccab6c..18dbf2dde 100644
--- a/nucleus/principalNetworkDomain_test.go
+++ b/nucleus/principalNetworkDomain_test.go
@@ -22,33 +22,36 @@ func testSetupPnd() {
 	if err != nil {
 		log.Fatal(err)
 	}
+}
 
-	defaultPnd = &pndImplementation{
-		name:        "default",
-		description: "default test pnd",
-		sbi:         map[string]SouthboundInterface{"default": &OpenConfig{}},
-		devices:     map[uuid.UUID]*Device{},
-	}
-
-	deviceWithMockTransport = &Device{
+func mockDevice() Device {
+	return Device{
 		GoStruct: nil,
 		SBI:      &OpenConfig{},
 		Config: DeviceConfig{
 			Uuid:     mdid,
-			Address:  "",
-			Username: "",
-			Password: "",
+			Address:  "mock://localhost",
+			Username: "mock",
+			Password: "mock",
 		},
 		Transport: &mocks.Transport{},
 	}
 }
 
-var defaultPnd *pndImplementation
+func freshPnd() pndImplementation {
+	return pndImplementation{
+		name:        "default",
+		description: "default test pnd",
+		sbi:         map[string]SouthboundInterface{"default": &OpenConfig{}},
+		devices:     map[uuid.UUID]*Device{},
+	}
+}
+
 var did uuid.UUID
 var mdid uuid.UUID
-var deviceWithMockTransport *Device
 
 func TestNewPND(t *testing.T) {
+	pnd := freshPnd()
 	type args struct {
 		name        string
 		description string
@@ -66,7 +69,7 @@ func TestNewPND(t *testing.T) {
 				description: "default test pnd",
 				sbi:         &OpenConfig{},
 			},
-			want: defaultPnd,
+			want: &pnd,
 		},
 	}
 	for _, tt := range tests {
@@ -115,16 +118,17 @@ func Test_pndImplementation_AddDevice(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if err := defaultPnd.AddDevice(tt.args.device); (err != nil) != tt.wantErr {
+			pnd := freshPnd()
+			if err := pnd.AddDevice(tt.args.device); (err != nil) != tt.wantErr {
 				t.Errorf("AddDevice() error = %v, wantErr %v", err, tt.wantErr)
 			}
-			_, ok := defaultPnd.devices[did]
+			_, ok := pnd.devices[did]
 			if !ok {
 				t.Errorf("AddDevice() Device %v not in device store %v",
-					tt.args.device, defaultPnd.devices)
+					tt.args.device, pnd.devices)
 			}
+			delete(pnd.devices, did)
 		})
-		delete(defaultPnd.devices, did)
 	}
 }
 
@@ -141,16 +145,17 @@ func Test_pndImplementation_AddSbi(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if err := defaultPnd.AddSbi(tt.args.sbi); (err != nil) != tt.wantErr {
+			pnd := freshPnd()
+			if err := pnd.AddSbi(tt.args.sbi); (err != nil) != tt.wantErr {
 				t.Errorf("AddSbi() error = %v, wantErr %v", err, tt.wantErr)
 			}
-			_, ok := defaultPnd.GetSBIs()[tt.args.sbi.SbiIdentifier()]
+			_, ok := pnd.GetSBIs()[tt.args.sbi.SbiIdentifier()]
 			if !ok {
 				t.Errorf("AddSbi() SBI %v not in device store %v",
-					tt.args.sbi, defaultPnd.GetSBIs())
+					tt.args.sbi, pnd.GetSBIs())
 			}
+			delete(pnd.sbi, tt.args.sbi.SbiIdentifier())
 		})
-		delete(defaultPnd.sbi, tt.args.sbi.SbiIdentifier())
 	}
 }
 
@@ -175,12 +180,13 @@ func Test_pndImplementation_ContainsDevice(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			defaultPnd.devices[tt.args.uuid] = tt.args.device
-			if got := defaultPnd.ContainsDevice(tt.args.uuid); got != tt.want {
+			pnd := freshPnd()
+			pnd.devices[did] = tt.args.device
+			if got := pnd.ContainsDevice(tt.args.uuid); got != tt.want {
 				t.Errorf("ContainsDevice() = %v, want %v", got, tt.want)
 			}
+			delete(pnd.devices, did)
 		})
-		delete(defaultPnd.devices, did)
 	}
 }
 
@@ -222,7 +228,8 @@ func Test_pndImplementation_GetDescription(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if got := defaultPnd.GetDescription(); got != tt.want {
+			pnd := freshPnd()
+			if got := pnd.GetDescription(); got != tt.want {
 				t.Errorf("GetDescription() = %v, want %v", got, tt.want)
 			}
 		})
@@ -238,7 +245,8 @@ func Test_pndImplementation_GetName(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if got := defaultPnd.GetName(); got != tt.want {
+			pnd := freshPnd()
+			if got := pnd.GetName(); got != tt.want {
 				t.Errorf("GetName() = %v, want %v", got, tt.want)
 			}
 		})
@@ -246,15 +254,16 @@ func Test_pndImplementation_GetName(t *testing.T) {
 }
 
 func Test_pndImplementation_GetSBIs(t *testing.T) {
+	pnd := freshPnd()
 	tests := []struct {
 		name string
 		want map[string]SouthboundInterface
 	}{
-		{name: "default", want: defaultPnd.sbi},
+		{name: "default", want: pnd.sbi},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if got := defaultPnd.GetSBIs(); !reflect.DeepEqual(got, tt.want) {
+			if got := pnd.GetSBIs(); !reflect.DeepEqual(got, tt.want) {
 				t.Errorf("GetSBIs() = %v, want %v", got, tt.want)
 			}
 		})
@@ -275,6 +284,7 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			pnd := freshPnd()
 			d := &Device{
 				GoStruct: &openconfig.Device{},
 				SBI:      nil,
@@ -286,8 +296,8 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) {
 				},
 				Transport: nil,
 			}
-			_ = defaultPnd.addDevice(d)
-			got, err := defaultPnd.MarshalDevice(tt.args.uuid)
+			_ = pnd.addDevice(d)
+			got, err := pnd.MarshalDevice(tt.args.uuid)
 			if (err != nil) != tt.wantErr {
 				t.Errorf("MarshalDevice() error = %v, wantErr %v", err, tt.wantErr)
 				return
@@ -295,6 +305,7 @@ func Test_pndImplementation_MarshalDevice(t *testing.T) {
 			if got != tt.want {
 				t.Errorf("MarshalDevice() got = %v, want %v", got, tt.want)
 			}
+			delete(pnd.devices, did)
 		})
 	}
 }
@@ -312,14 +323,15 @@ func Test_pndImplementation_RemoveDevice(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			pnd := freshPnd()
 			d := &Device{Config: DeviceConfig{Uuid: did}}
-			_ = defaultPnd.addDevice(d)
-			if err := defaultPnd.RemoveDevice(tt.args.uuid); (err != nil) != tt.wantErr {
+			_ = pnd.addDevice(d)
+			if err := pnd.RemoveDevice(tt.args.uuid); (err != nil) != tt.wantErr {
 				t.Errorf("RemoveDevice() error = %v, wantErr %v", err, tt.wantErr)
 			}
-			_, ok := defaultPnd.devices[did]
+			_, ok := pnd.devices[did]
 			if ok {
-				t.Errorf("RemoveDevice() device %v still in device store %v", d, defaultPnd.devices)
+				t.Errorf("RemoveDevice() device %v still in device store %v", d, pnd.devices)
 			}
 		})
 	}
@@ -338,13 +350,14 @@ func Test_pndImplementation_RemoveSbi(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			_ = defaultPnd.addSbi(&OpenConfig{})
-			if err := defaultPnd.RemoveSbi(tt.args.sbiIdentifier); (err != nil) != tt.wantErr {
+			pnd := freshPnd()
+			_ = pnd.addSbi(&OpenConfig{})
+			if err := pnd.RemoveSbi(tt.args.sbiIdentifier); (err != nil) != tt.wantErr {
 				t.Errorf("RemoveSbi() error = %v, wantErr %v", err, tt.wantErr)
 			}
-			sbi, ok := defaultPnd.sbi[tt.args.sbiIdentifier]
+			sbi, ok := pnd.sbi[tt.args.sbiIdentifier]
 			if ok {
-				t.Errorf("RemoveDevice() SBI %v still in SBI store %v", sbi, defaultPnd.sbi)
+				t.Errorf("RemoveDevice() SBI %v still in SBI store %v", sbi, pnd.sbi)
 			}
 		})
 	}
@@ -382,16 +395,18 @@ func Test_pndImplementation_Request(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			deviceWithMockTransport := mockDevice()
+			pnd := freshPnd()
 			tr := deviceWithMockTransport.Transport.(*mocks.Transport)
 			tr.On("Get", mockContext, mock.Anything).Return(mock.Anything, tt.args.rErr)
 			tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr)
-			_ = defaultPnd.addDevice(deviceWithMockTransport)
-			if err := defaultPnd.Request(tt.args.uuid, tt.args.path); (err != nil) != tt.wantErr {
+			_ = pnd.addDevice(&deviceWithMockTransport)
+			if err := pnd.Request(tt.args.uuid, tt.args.path); (err != nil) != tt.wantErr {
 				t.Errorf("Request() error = %v, wantErr %v", err, tt.wantErr)
 			}
+			delete(pnd.devices, mdid)
 		})
 	}
-	delete(defaultPnd.devices, mdid)
 }
 
 func Test_pndImplementation_RequestAll(t *testing.T) {
@@ -417,7 +432,7 @@ func Test_pndImplementation_RequestAll(t *testing.T) {
 		{
 			name: "error",
 			args: args{
-				uuid: uuid.UUID{},
+				uuid: did,
 				path: "",
 				rErr: errors.New("deliberate test fail"),
 			},
@@ -426,14 +441,16 @@ func Test_pndImplementation_RequestAll(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			deviceWithMockTransport := mockDevice()
+			pnd := freshPnd()
 			tr := deviceWithMockTransport.Transport.(*mocks.Transport)
 			tr.On("Get", mockContext, mock.Anything).Return(mock.Anything, tt.args.rErr)
 			tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(tt.args.rErr)
-			_ = defaultPnd.addDevice(deviceWithMockTransport)
-			if err := defaultPnd.RequestAll(tt.args.path); (err != nil) != tt.wantErr {
+			_ = pnd.addDevice(&deviceWithMockTransport)
+			if err := pnd.RequestAll(tt.args.path); (err != nil) != tt.wantErr {
 				t.Errorf("RequestAll() error = %v, wantErr %v", err, tt.wantErr)
 			}
+			delete(pnd.devices, mdid)
 		})
-		delete(defaultPnd.devices, mdid)
 	}
 }
-- 
GitLab