Skip to content
Snippets Groups Projects
principalNetworkDomain_test.go 27.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • Manuel Kieweg's avatar
    Manuel Kieweg committed
    		want []uuid.UUID
    	}{
    		{
    			name: "default",
    
    			want: []uuid.UUID{pending.cuid},
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		},
    	}
    	for _, tt := range tests {
    		t.Run(tt.name, func(t *testing.T) {
    			pnd := newPnd()
    
    			pnd.changes = store
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    			if got := pnd.PendingChanges(); !reflect.DeepEqual(got, tt.want) {
    				t.Errorf("pndImplementation.PendingChanges() = %v, want %v", got, tt.want)
    			}
    		})
    	}
    }
    
    func Test_pndImplementation_CommittedChanges(t *testing.T) {
    
    	testName := t.Name()
    	callback := func(first ygot.GoStruct, second ygot.GoStruct) error {
    		log.Infof("callback in test %v", testName)
    		return nil
    	}
    
    
    	store := store.NewChangeStore()
    
    	committed := NewChange(did, &openconfig.Device{}, &openconfig.Device{}, callback)
    	if err := committed.Commit(); err != nil {
    		t.Error(err)
    		return
    	}
    	if err := store.Add(committed); err != nil {
    		t.Error(err)
    		return
    	}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	tests := []struct {
    		name string
    		want []uuid.UUID
    	}{
    		{
    			name: "default",
    
    			want: []uuid.UUID{committed.cuid},
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		},
    	}
    	for _, tt := range tests {
    		t.Run(tt.name, func(t *testing.T) {
    			pnd := newPnd()
    
    			pnd.changes = store
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    			if got := pnd.CommittedChanges(); !reflect.DeepEqual(got, tt.want) {
    				t.Errorf("pndImplementation.CommittedChanges() = %v, want %v", got, tt.want)
    			}
    		})
    	}
    }
    
    func Test_pndImplementation_ConfirmedChanges(t *testing.T) {
    
    	testName := t.Name()
    	callback := func(first ygot.GoStruct, second ygot.GoStruct) error {
    		log.Infof("callback in test %v", testName)
    		return nil
    	}
    
    	store := store.NewChangeStore()
    
    	confirmed := NewChange(did, &openconfig.Device{}, &openconfig.Device{}, callback)
    	if err := confirmed.Commit(); err != nil {
    		t.Error(err)
    		return
    	}
    	if err := confirmed.Confirm(); err != nil {
    		t.Error(err)
    		return
    	}
    	if err := store.Add(confirmed); err != nil {
    		t.Error(err)
    		return
    	}
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    	tests := []struct {
    		name string
    		want []uuid.UUID
    	}{
    		{
    			name: "default",
    
    			want: []uuid.UUID{confirmed.cuid},
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    		},
    	}
    	for _, tt := range tests {
    		t.Run(tt.name, func(t *testing.T) {
    			pnd := newPnd()
    
    			pnd.changes = store
    
    Manuel Kieweg's avatar
    Manuel Kieweg committed
    			if got := pnd.ConfirmedChanges(); !reflect.DeepEqual(got, tt.want) {
    				t.Errorf("pndImplementation.ConfirmedChanges() = %v, want %v", got, tt.want)
    			}
    		})
    	}
    }
    
    func Test_pndImplementation_saveGoStructsToFile(t *testing.T) {
    	type genericGoStructClientArg struct {
    		fn    string
    		rtrn  []interface{}
    		times int
    	}
    	// Create a new mock for GenericGoStructClient. With
    	// genericGoStructClientArg it is possible to set the Return values of the
    	// mocks methods.
    	newGenericGoStructClient := func(args ...genericGoStructClientArg) *mocks.GenericGoStructClient {
    		ggsc := &mocks.GenericGoStructClient{}
    		for _, arg := range args {
    			ggsc.On(arg.fn).Return(arg.rtrn...).Times(arg.times)
    		}
    		ggsc.On("CloseSend").Return(nil)
    		return ggsc
    	}
    
    	type args struct {
    		id     uuid.UUID
    		client GenericGrpcClient
    	}
    	tests := []struct {
    		name    string
    		args    args
    		wantErr bool
    	}{
    		{
    			name: "default",
    			args: args{
    				id: uuid.New(),
    				client: newGenericGoStructClient(
    					[]genericGoStructClientArg{
    						{
    							fn: "Recv",
    							rtrn: []interface{}{
    								&csbi.Payload{Chunk: []byte("test")},
    								nil,
    							},
    							times: 3,
    						},
    						{
    							fn: "Recv",
    							rtrn: []interface{}{
    								&csbi.Payload{Chunk: nil},
    								io.EOF,
    							},
    							times: 1,
    						},
    					}...),
    			},
    			wantErr: false,
    		},
    		{
    			name: "unexpected EOF error",
    			args: args{
    				id: uuid.New(),
    				client: newGenericGoStructClient(
    					[]genericGoStructClientArg{
    						{
    							fn: "Recv",
    							rtrn: []interface{}{
    								&csbi.Payload{Chunk: nil},
    								io.ErrUnexpectedEOF,
    							},
    							times: 1,
    						},
    						{
    							fn: "CloseSend",
    							rtrn: []interface{}{
    								nil,
    							},
    							times: 1,
    						},
    					}...),
    			},
    			wantErr: true,
    		},
    	}
    	for _, tt := range tests {
    		t.Run(tt.name, func(t *testing.T) {
    			_, err := saveGenericClientStreamToFile(tt.args.client, "gostructs.go", tt.args.id)
    			if (err != nil) != tt.wantErr {
    				t.Errorf("saveGoStructsToFile() error = %v, wantErr %v", err, tt.wantErr)
    			}
    		})
    	}
    }