summaryrefslogtreecommitdiffhomepage
path: root/test/packetimpact/testbench/connections.go
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2020-04-21 16:54:08 -0700
committergVisor bot <gvisor-bot@google.com>2020-04-21 16:55:28 -0700
commit0e013d8b00dbc3ad96e98bc0405ec2e21887308e (patch)
tree0a5a9e31f0881e3c12dc510e332823ac51ff7c6d /test/packetimpact/testbench/connections.go
parent37e01fd2ea6a0e67637975863317be9aae1b02f0 (diff)
Don't ignore override if it is longer than layerStates
PiperOrigin-RevId: 307708653
Diffstat (limited to 'test/packetimpact/testbench/connections.go')
-rw-r--r--test/packetimpact/testbench/connections.go33
1 files changed, 25 insertions, 8 deletions
diff --git a/test/packetimpact/testbench/connections.go b/test/packetimpact/testbench/connections.go
index f84fd8ba7..00a366894 100644
--- a/test/packetimpact/testbench/connections.go
+++ b/test/packetimpact/testbench/connections.go
@@ -363,16 +363,33 @@ type Connection struct {
// reverse is never a match. override overrides the default matchers for each
// Layer.
func (conn *Connection) match(override, received Layers) bool {
- if len(received) < len(conn.layerStates) {
+ var layersToMatch int
+ if len(override) < len(conn.layerStates) {
+ layersToMatch = len(conn.layerStates)
+ } else {
+ layersToMatch = len(override)
+ }
+ if len(received) < layersToMatch {
return false
}
- for i, s := range conn.layerStates {
- toMatch := s.incoming(received[i])
- if toMatch == nil {
- return false
- }
- if i < len(override) {
- toMatch.merge(override[i])
+ for i := 0; i < layersToMatch; i++ {
+ var toMatch Layer
+ if i < len(conn.layerStates) {
+ s := conn.layerStates[i]
+ toMatch = s.incoming(received[i])
+ if toMatch == nil {
+ return false
+ }
+ if i < len(override) {
+ if err := toMatch.merge(override[i]); err != nil {
+ conn.t.Fatalf("failed to merge: %s", err)
+ }
+ }
+ } else {
+ toMatch = override[i]
+ if toMatch == nil {
+ conn.t.Fatalf("expect the overriding layers to be non-nil")
+ }
}
if !toMatch.match(received[i]) {
return false