vgc UTs part 4

Change-Id: I0e78854fefb8f0ad270a84bc88982f859a0d5995
diff --git a/internal/pkg/controller/addflows_test.go b/internal/pkg/controller/addflows_test.go
index d1e86ec..aee998f 100644
--- a/internal/pkg/controller/addflows_test.go
+++ b/internal/pkg/controller/addflows_test.go
@@ -16,8 +16,13 @@
 package controller
 
 import (
+	"context"
+	"reflect"
 	"testing"
 	"voltha-go-controller/internal/pkg/of"
+	"voltha-go-controller/internal/test/mocks"
+
+	"github.com/golang/mock/gomock"
 )
 
 func Test_isFlowOperSuccess(t *testing.T) {
@@ -47,3 +52,181 @@
 		})
 	}
 }
+
+func TestAddFlowsTask_Start(t *testing.T) {
+	type args struct {
+		ctx    context.Context
+		taskID uint8
+	}
+	tests := []struct {
+		name    string
+		args    args
+		wantErr bool
+	}{
+		{
+			name: "AddFlowsTask_Start",
+			args: args{
+				ctx:    context.Background(),
+				taskID: 0,
+			},
+			wantErr: false,
+		},
+		{
+			name: "DeleteFlowsTask_Start",
+			args: args{
+				ctx:    context.Background(),
+				taskID: 0,
+			},
+			wantErr: false,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			switch tt.name {
+			case "AddFlowsTask_Start":
+				subFlows := map[uint64]*of.VoltSubFlow{}
+				vltSubFlow := &of.VoltSubFlow{
+					Priority: 100,
+					Cookie:   103112802816,
+					State:    of.FlowAddSuccess,
+					Match: of.Match{
+						InPort:     1573376,
+						MatchVlan:  4096,
+						L4Protocol: 255,
+					},
+					Action: of.Action{
+						Metadata:    279189651712,
+						GoToTableID: 1,
+						MeterID:     1,
+						SetVlan:     4097,
+						Pcp:         8,
+						Output:      4,
+					},
+				}
+				subFlows[0] = vltSubFlow
+				portsByID := map[uint32]*DevicePort{}
+				portsByID[256] = &DevicePort{
+					Name: "SDX6320031",
+					ID:   256,
+				}
+				device := &Device{
+					flows:     subFlows,
+					PortsByID: portsByID,
+				}
+				flow := &of.VoltFlow{
+					SubFlows: subFlows,
+					PortName: "SDX6320031-1",
+					PortID:   256,
+					Command:  0,
+				}
+				aft := &AddFlowsTask{
+					flow:   flow,
+					device: device,
+				}
+				dbintf := mocks.NewMockDBIntf(gomock.NewController(t))
+				db = dbintf
+				dbintf.EXPECT().PutFlow(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
+				if err := aft.Start(tt.args.ctx, tt.args.taskID); (err != nil) != tt.wantErr {
+					t.Errorf("AddFlowsTask.Start() error = %v, wantErr %v", err, tt.wantErr)
+				}
+			case "DeleteFlowsTask_Start":
+				subFlows := map[uint64]*of.VoltSubFlow{}
+				vltSubFlow := &of.VoltSubFlow{
+					Priority: 100,
+					Cookie:   103112802816,
+					State:    of.FlowAddSuccess,
+					Match: of.Match{
+						InPort:     1573376,
+						MatchVlan:  4096,
+						L4Protocol: 255,
+					},
+					Action: of.Action{
+						Metadata:    279189651712,
+						GoToTableID: 1,
+						MeterID:     1,
+						SetVlan:     4097,
+						Pcp:         8,
+						Output:      4,
+					},
+				}
+				subFlows[0] = vltSubFlow
+				portsByID := map[uint32]*DevicePort{}
+				portsByID[256] = &DevicePort{
+					Name: "SDX6320031",
+					ID:   256,
+				}
+				device := &Device{
+					flows:     subFlows,
+					PortsByID: portsByID,
+				}
+				flow := &of.VoltFlow{
+					SubFlows: subFlows,
+					PortName: "SDX6320031-1",
+					PortID:   256,
+					Command:  1,
+				}
+				aft := &AddFlowsTask{
+					flow:   flow,
+					device: device,
+				}
+				appMock := mocks.NewMockApp(gomock.NewController(t))
+				NewController(ctx, appMock)
+				appMock.EXPECT().ProcessFlowModResultIndication(gomock.Any(), gomock.Any()).AnyTimes()
+				dbintf := mocks.NewMockDBIntf(gomock.NewController(t))
+				db = dbintf
+				dbintf.EXPECT().DelFlow(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes()
+				if err := aft.Start(tt.args.ctx, tt.args.taskID); (err != nil) != tt.wantErr {
+					t.Errorf("AddFlowsTask.Start() error = %v, wantErr %v", err, tt.wantErr)
+				}
+			}
+		})
+	}
+}
+
+func TestNewAddFlowsTask(t *testing.T) {
+	type args struct {
+		ctx    context.Context
+		flow   *of.VoltFlow
+		device *Device
+	}
+	flow := &of.VoltFlow{
+		PortName: "SDX6320031-1",
+		PortID:   256,
+		Command:  0,
+	}
+	portsByID := map[uint32]*DevicePort{}
+	portsByID[256] = &DevicePort{
+		Name: "SDX6320031",
+		ID:   256,
+	}
+	device := &Device{
+		PortsByID: portsByID,
+	}
+
+	tests := []struct {
+		name string
+		args args
+		want *AddFlowsTask
+	}{
+		{
+			name: "NewAddFlowsTask",
+			args: args{
+				ctx:    context.Background(),
+				flow:   flow,
+				device: device,
+			},
+			want: &AddFlowsTask{
+				ctx:    context.Background(),
+				flow:   flow,
+				device: device,
+			},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			if got := NewAddFlowsTask(tt.args.ctx, tt.args.flow, tt.args.device); reflect.DeepEqual(got, tt.want) {
+				t.Errorf("NewAddFlowsTask() = %v, want %v", got, tt.want)
+			}
+		})
+	}
+}