Skip to content

Commit 8672fee

Browse files
committed
xml2schemaadapter
1 parent fdcb579 commit 8672fee

File tree

1 file changed

+147
-0
lines changed

1 file changed

+147
-0
lines changed
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package netconf
2+
3+
import (
4+
"context"
5+
"reflect"
6+
"testing"
7+
8+
"github.com/beevik/etree"
9+
"github.com/iptecharch/data-server/mocks/mockschema"
10+
sdcpb "github.com/iptecharch/sdc-protos/sdcpb"
11+
"go.uber.org/mock/gomock"
12+
"google.golang.org/grpc"
13+
)
14+
15+
func TestXML2sdcpbConfigAdapter_Transform(t *testing.T) {
16+
17+
GetNewDoc := func() *etree.Document {
18+
AddValueDoc1 := etree.NewDocument()
19+
// populate Doc1
20+
interfs := AddValueDoc1.CreateElement("interfaces")
21+
interf1 := interfs.CreateElement("interface")
22+
interfname := interf1.CreateElement("name")
23+
interfname.SetText("eth0")
24+
// _ = interf1.CreateElement("mtu")
25+
//subinterf11 := interf1.CreateElement("subinterface")
26+
//subinterf11name := subinterf11.CreateElement("name")
27+
//subinterf11name.SetText("1")
28+
// _ = subinterf11.CreateElement("vlan-id")
29+
// interf2 := interfs.CreateElement("interface")
30+
// interf2name := interf2.CreateElement("name")
31+
// interf2name.SetText("eth1")
32+
// mtuInterf2 := interf2.CreateElement("mtu")
33+
// mtuInterf2.SetText("9100")
34+
return AddValueDoc1
35+
// Doc1 done
36+
}
37+
38+
type args struct {
39+
ctx context.Context
40+
doc *etree.Document
41+
}
42+
tests := []struct {
43+
name string
44+
getXML2sdcpbConfigAdapter func(ctrl *gomock.Controller) *XML2sdcpbConfigAdapter
45+
args args
46+
want *sdcpb.Notification
47+
wantErr bool
48+
}{
49+
{
50+
name: "Test One",
51+
args: args{
52+
ctx: TestCtx,
53+
doc: GetNewDoc(),
54+
},
55+
getXML2sdcpbConfigAdapter: func(ctrl *gomock.Controller) *XML2sdcpbConfigAdapter {
56+
57+
schemaClientMock := mockschema.NewMockClient(ctrl)
58+
counter := 0
59+
schemaClientMock.EXPECT().GetSchema(TestCtx, gomock.Any(), gomock.Any()).AnyTimes().DoAndReturn(
60+
func(ctx context.Context, in *sdcpb.GetSchemaRequest, opts ...grpc.CallOption) (*sdcpb.GetSchemaResponse, error) {
61+
selem := &sdcpb.SchemaElem{}
62+
switch counter {
63+
case 0:
64+
selem.Schema = &sdcpb.SchemaElem_Container{
65+
Container: &sdcpb.ContainerSchema{
66+
Name: "interfaces",
67+
},
68+
}
69+
case 1:
70+
selem.Schema = &sdcpb.SchemaElem_Container{
71+
Container: &sdcpb.ContainerSchema{
72+
Name: "interface",
73+
Keys: []*sdcpb.LeafSchema{
74+
{
75+
Name: "name",
76+
},
77+
},
78+
},
79+
}
80+
case 2:
81+
selem.Schema = &sdcpb.SchemaElem_Field{
82+
Field: &sdcpb.LeafSchema{
83+
Name: "name",
84+
Type: &sdcpb.SchemaLeafType{
85+
Type: "string",
86+
},
87+
},
88+
}
89+
}
90+
counter++
91+
92+
return &sdcpb.GetSchemaResponse{
93+
Schema: selem,
94+
}, nil
95+
},
96+
)
97+
return NewXML2sdcpbConfigAdapter(schemaClientMock, TestSchema)
98+
},
99+
want: &sdcpb.Notification{
100+
Update: []*sdcpb.Update{
101+
{
102+
Path: &sdcpb.Path{
103+
Elem: []*sdcpb.PathElem{
104+
{
105+
Name: "interfaces",
106+
},
107+
{
108+
Name: "interface",
109+
Key: map[string]string{
110+
"name": "eth0",
111+
},
112+
},
113+
{
114+
Name: "name",
115+
},
116+
},
117+
},
118+
Value: &sdcpb.TypedValue{
119+
Value: &sdcpb.TypedValue_StringVal{
120+
StringVal: "eth0",
121+
},
122+
},
123+
},
124+
},
125+
},
126+
wantErr: false,
127+
},
128+
}
129+
for _, tt := range tests {
130+
t.Run(tt.name, func(t *testing.T) {
131+
mockCtrl := gomock.NewController(t)
132+
133+
x := tt.getXML2sdcpbConfigAdapter(mockCtrl)
134+
// tt.args.doc.Indent(2)
135+
// s, _ := tt.args.doc.WriteToString()
136+
// fmt.Println(s)
137+
got, err := x.Transform(tt.args.ctx, tt.args.doc)
138+
if (err != nil) != tt.wantErr {
139+
t.Errorf("XML2sdcpbConfigAdapter.Transform() error = %v, wantErr %v", err, tt.wantErr)
140+
return
141+
}
142+
if !reflect.DeepEqual(got, tt.want) {
143+
t.Errorf("XML2sdcpbConfigAdapter.Transform() = %v, want %v", got, tt.want)
144+
}
145+
})
146+
}
147+
}

0 commit comments

Comments
 (0)