Skip to content
Snippets Groups Projects
Commit a3600632 authored by Manuel Kieweg's avatar Manuel Kieweg
Browse files

pnd commit confirm test

parent fd912243
No related branches found
No related tags found
9 merge requests!246Develop,!245Develop into Master,!244Master into develop2 into master,!219Draft: Testing,!214Test pipelines,!195DO NOT MERGE 2,!194DO NOT MERGE! just for testing,!147Commit-Confirm Mechanic for PND,!138Develop
......@@ -9,17 +9,17 @@ require (
github.com/google/gnxi v0.0.0-20201221102247-c26672548161
github.com/google/uuid v1.1.2
github.com/neo4j/neo4j-go-driver v1.8.3
github.com/openconfig/gnmi v0.0.0-20200617225440-d2b4e6a45802
github.com/openconfig/goyang v0.2.3
github.com/openconfig/ygot v0.10.4
github.com/sirupsen/logrus v1.8.0
github.com/spf13/cobra v1.1.1
github.com/openconfig/gnmi v0.0.0-20210428141518-ae4d850000ab
github.com/openconfig/goyang v0.2.4
github.com/openconfig/ygot v0.10.5
github.com/sirupsen/logrus v1.8.1
github.com/spf13/cobra v1.1.3
github.com/spf13/viper v1.7.1
github.com/stretchr/testify v1.6.1
golang.org/x/net v0.0.0-20201216054612-986b41b23924
google.golang.org/grpc v1.34.0
github.com/stretchr/testify v1.7.0
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781
google.golang.org/grpc v1.37.0
google.golang.org/protobuf v1.26.0
k8s.io/api v0.20.5
k8s.io/apimachinery v0.20.5
k8s.io/client-go v0.20.5
k8s.io/api v0.21.0
k8s.io/apimachinery v0.21.0
k8s.io/client-go v0.21.0
)
This diff is collapsed.
......@@ -14,18 +14,18 @@ func testSetupHTTP() {
sbi = &OpenConfig{id: defaultSbiID}
sbi.Schema()
var err error
pnd, err = NewPND("test", "test pnd", defaultPndID, sbi)
httpTestPND, err = NewPND("test", "test pnd", defaultPndID, sbi)
if err != nil {
log.Fatal(err)
}
d = mockDevice()
tr := d.Transport.(*mocks.Transport)
httpTestDevice = mockDevice()
tr := httpTestDevice.Transport.(*mocks.Transport)
mockError := errors.New("mock error")
tr.On("Get", mockContext, "/system/config/hostname").Return(mock.Anything, nil)
tr.On("Get", mockContext, "error").Return(mock.Anything, mockError)
tr.On("Set", mockContext, mock.Anything).Return(mock.Anything, nil)
tr.On("ProcessResponse", mock.Anything, mock.Anything, mock.Anything).Return(nil)
if err := pnd.AddDevice(&d); err != nil {
if err := httpTestPND.AddDevice(&httpTestDevice); err != nil {
log.Fatal(err)
}
args = "&uuid=" + mdid.String() + "&pnd=" + defaultPndID.String() + "&sbi=" + defaultSbiID.String()
......@@ -33,7 +33,7 @@ func testSetupHTTP() {
if err := c.sbic.add(sbi); err != nil {
log.Fatal(err)
}
if err := c.pndc.add(pnd); err != nil {
if err := c.pndc.add(httpTestPND); err != nil {
log.Fatal(err)
}
}
......@@ -198,9 +198,9 @@ func Test_httpApi(t *testing.T) {
t.Errorf("httpApi() got: %v, want %v", got.StatusCode, tt.want.StatusCode)
}
if tt.name == "add-device" {
for k := range pnd.(*pndImplementation).devices.store {
for k := range httpTestPND.(*pndImplementation).devices.store {
if k != mdid {
if err := pnd.RemoveDevice(k); err != nil {
if err := httpTestPND.RemoveDevice(k); err != nil {
t.Error(err)
return
}
......
......@@ -28,10 +28,10 @@ var altIid uuid.UUID
var cuid uuid.UUID
var sbi SouthboundInterface
var pnd PrincipalNetworkDomain
var httpTestPND PrincipalNetworkDomain
var gnmiMessages map[string]pb.Message
var gnmiConfig *gnmi.Config
var d Device
var httpTestDevice Device
var startGnmiTarget chan string
var stopGnmiTarget chan bool
......
......@@ -88,7 +88,9 @@ func (pnd *pndImplementation) Commit(u uuid.UUID) error {
for {
select {
case err := <-pnd.errChans[u]:
handleRollbackError(change.ID(), err)
if err != nil {
handleRollbackError(change.ID(), err)
}
case <-change.Done:
}
}
......@@ -110,7 +112,6 @@ func (pnd *pndImplementation) Confirm(u uuid.UUID) error {
if err := pnd.confirmedChanges.add(change); err != nil {
return err
}
close(pnd.errChans[u])
return pnd.committedChanges.delete(u)
}
......@@ -280,7 +281,7 @@ func (pnd *pndImplementation) ChangeOND(uuid uuid.UUID, operation interface{}, p
return err
}
if len(value) > 1 {
if operation != TransportDelete && len(value) != 1 {
return &ErrInvalidParameters{
f: pnd.ChangeOND,
r: value,
......
......@@ -5,6 +5,7 @@ import (
"code.fbi.h-da.de/cocsn/yang-models/generated/openconfig"
"errors"
"github.com/google/uuid"
"github.com/openconfig/ygot/ygot"
"github.com/stretchr/testify/mock"
"reflect"
"testing"
......@@ -603,6 +604,26 @@ func Test_pndImplementation_ChangeOND(t *testing.T) {
},
wantErr: true,
},
{
name: "invalid arg count - update, no args",
fields: fields{},
args: args{
uuid: mdid,
operation: TransportUpdate,
path: "/system/config/hostname",
},
wantErr: true,
},
{
name: "invalid arg count - replace, no args",
fields: fields{},
args: args{
uuid: mdid,
operation: TransportUpdate,
path: "/system/config/hostname",
},
wantErr: true,
},
{
name: "device not found",
fields: fields{},
......@@ -633,3 +654,92 @@ func Test_pndImplementation_ChangeOND(t *testing.T) {
})
}
}
func Test_pndImplementation_GetDevice(t *testing.T) {
p := newPnd()
d, err := NewDevice(sbi, &GnmiTransportOptions{})
if err != nil {
t.Error(err)
return
}
if err = p.addDevice(d); err != nil {
t.Error(err)
return
}
type args struct {
uuid uuid.UUID
}
tests := []struct {
name string
args args
want ygot.GoStruct
wantErr bool
}{
{
name: "default",
args: args{uuid: d.ID()},
want: sbi.Schema().Root,
wantErr: false,
},
{
name: "device not found",
args: args{uuid: mdid},
want: nil,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := p.GetDevice(tt.args.uuid)
if (err != nil) != tt.wantErr {
t.Errorf("GetDevice() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("GetDevice() got = %v, want %v", got, tt.want)
}
})
}
}
func Test_pndImplementation_Confirm(t *testing.T) {
tests := []struct {
name string
wantErr bool
}{
{
name: "default",
wantErr: false,
},
{
name: "uncommitted",
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
pnd := newPnd()
d := mockDevice()
tr := d.Transport.(*mocks.Transport)
tr.On("Set", mockContext, mock.Anything, mock.Anything).Return(nil)
if err := pnd.addDevice(&d); err != nil {
t.Error(err)
return
}
if err := pnd.ChangeOND(d.ID(), TransportUpdate, "system/config/hostname", "ceos3000"); err != nil {
t.Error(err)
return
}
u := pnd.Pending()[0]
if tt.name != "uncommitted" {
if err := pnd.Commit(u); (err != nil) != tt.wantErr {
t.Errorf("Confirm() error = %v, wantErr %v", err, tt.wantErr)
return
}
}
if err := pnd.Confirm(u); (err != nil) != tt.wantErr {
t.Errorf("Confirm() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment