summaryrefslogtreecommitdiffhomepage
path: root/test/packetimpact/testbench/connections.go
diff options
context:
space:
mode:
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