diff --git a/management/server/policy_test.go b/management/server/policy_test.go index 0d17da23a..73fc6edba 100644 --- a/management/server/policy_test.go +++ b/management/server/policy_test.go @@ -76,7 +76,7 @@ func TestAccount_getPeersByPolicy(t *testing.T) { }, "GroupWorkstations": { ID: "GroupWorkstations", - Name: "All", + Name: "GroupWorkstations", Peers: []string{ "peerB", "peerA", @@ -280,10 +280,16 @@ func TestAccount_getPeersByPolicy(t *testing.T) { }, } assert.Len(t, firewallRules, len(epectedFirewallRules)) - slices.SortFunc(epectedFirewallRules, sortFunc()) - slices.SortFunc(firewallRules, sortFunc()) - for i := range firewallRules { - assert.Equal(t, epectedFirewallRules[i], firewallRules[i]) + + for _, rule := range firewallRules { + contains := false + for _, expectedRule := range epectedFirewallRules { + if rule.IsEqual(expectedRule) { + contains = true + break + } + } + assert.True(t, contains, "rule not found in expected rules %#v", rule) } }) } diff --git a/management/server/types/firewall_rule.go b/management/server/types/firewall_rule.go index 3d1b7e225..4e405152c 100644 --- a/management/server/types/firewall_rule.go +++ b/management/server/types/firewall_rule.go @@ -35,6 +35,15 @@ type FirewallRule struct { Port string } +// IsEqual checks if two firewall rules are equal. +func (r *FirewallRule) IsEqual(other *FirewallRule) bool { + return r.PeerIP == other.PeerIP && + r.Direction == other.Direction && + r.Action == other.Action && + r.Protocol == other.Protocol && + r.Port == other.Port +} + // generateRouteFirewallRules generates a list of firewall rules for a given route. func generateRouteFirewallRules(ctx context.Context, route *nbroute.Route, rule *PolicyRule, groupPeers []*nbpeer.Peer, direction int) []*RouteFirewallRule { rulesExists := make(map[string]struct{})