-
Notifications
You must be signed in to change notification settings - Fork 107
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix defect in protomap list handling. (#535)
* (M) protomap/* - Resolve handling of incorrectly formed list protobufs.
- Loading branch information
Showing
6 changed files
with
130 additions
and
20 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
// Package integration_tests performs tests against real-world schemas for protomap. | ||
package integration_tests |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
package integration_tests | ||
|
||
import ( | ||
"fmt" | ||
"testing" | ||
|
||
"github.com/google/go-cmp/cmp" | ||
"github.com/google/go-cmp/cmp/cmpopts" | ||
"github.com/openconfig/gribi/v1/proto/gribi_aft" | ||
"github.com/openconfig/ygot/protomap" | ||
"github.com/openconfig/ygot/testutil" | ||
"github.com/openconfig/ygot/ygot" | ||
"google.golang.org/protobuf/proto" | ||
"google.golang.org/protobuf/testing/protocmp" | ||
|
||
gpb "github.com/openconfig/gnmi/proto/gnmi" | ||
) | ||
|
||
func mustPath(p string) *gpb.Path { | ||
sp, err := ygot.StringToStructuredPath(p) | ||
if err != nil { | ||
panic(fmt.Sprintf("cannot parse path %s to proto, %v", p, err)) | ||
} | ||
return sp | ||
} | ||
|
||
func TestGRIBIAFT(t *testing.T) { | ||
tests := []struct { | ||
desc string | ||
inProto proto.Message | ||
wantPaths map[*gpb.Path]interface{} | ||
wantErr bool | ||
}{{ | ||
desc: "IPv4 Entry with key", | ||
inProto: &gribi_aft.Afts{ | ||
Ipv4Entry: []*gribi_aft.Afts_Ipv4EntryKey{{ | ||
Prefix: "1.0.0.0/24", | ||
Ipv4Entry: &gribi_aft.Afts_Ipv4Entry{}, | ||
}}, | ||
}, | ||
wantPaths: map[*gpb.Path]interface{}{ | ||
mustPath("afts/ipv4-unicast/ipv4-entry[prefix=1.0.0.0/24]/state/prefix"): "1.0.0.0/24", | ||
mustPath("afts/ipv4-unicast/ipv4-entry[prefix=1.0.0.0/24]/prefix"): "1.0.0.0/24", | ||
}, | ||
}, { | ||
desc: "IPv4 Entry with nil prefix", | ||
inProto: &gribi_aft.Afts{ | ||
Ipv4Entry: []*gribi_aft.Afts_Ipv4EntryKey{{}}, | ||
}, | ||
wantErr: true, | ||
}, { | ||
desc: "IPv4 Entry with nil list member", | ||
inProto: &gribi_aft.Afts{ | ||
Ipv4Entry: []*gribi_aft.Afts_Ipv4EntryKey{{ | ||
Prefix: "2.2.2.2/32", | ||
}}, | ||
}, | ||
wantErr: true, | ||
}} | ||
|
||
for _, tt := range tests { | ||
t.Run(tt.desc, func(t *testing.T) { | ||
got, err := protomap.PathsFromProto(tt.inProto) | ||
if (err != nil) != tt.wantErr { | ||
t.Fatalf("did not get expected error, got: %v, wantErr? %v", err, tt.wantErr) | ||
} | ||
if diff := cmp.Diff(got, tt.wantPaths, protocmp.Transform(), cmpopts.EquateEmpty(), cmpopts.SortMaps(testutil.PathLess)); diff != "" { | ||
t.Fatalf("did not get expected results, diff(-got,+want):\n%s", diff) | ||
} | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters