|
|
@@ -1290,3 +1290,43 @@ func TestIPRulesForUBNT(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func TestUpdateMagicsockPortChange(t *testing.T) {
|
|
|
+ nfr := &fakeIPTablesRunner{
|
|
|
+ t: t,
|
|
|
+ ipt4: make(map[string][]string),
|
|
|
+ ipt6: make(map[string][]string),
|
|
|
+ }
|
|
|
+ nfr.ipt4["filter/ts-input"] = []string{}
|
|
|
+
|
|
|
+ r := &linuxRouter{
|
|
|
+ logf: logger.Discard,
|
|
|
+ health: new(health.Tracker),
|
|
|
+ netfilterMode: netfilterOn,
|
|
|
+ nfr: nfr,
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := r.updateMagicsockPort(12345, "udp4"); err != nil {
|
|
|
+ t.Fatalf("failed to set initial port: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if err := r.updateMagicsockPort(54321, "udp4"); err != nil {
|
|
|
+ t.Fatalf("failed to update port: %v", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ newPortRule := buildMagicsockPortRule(54321)
|
|
|
+ hasNewRule := slices.Contains(nfr.ipt4["filter/ts-input"], newPortRule)
|
|
|
+
|
|
|
+ if !hasNewRule {
|
|
|
+ t.Errorf("firewall rule for NEW port 54321 not found.\nExpected: %s\nActual rules: %v",
|
|
|
+ newPortRule, nfr.ipt4["filter/ts-input"])
|
|
|
+ }
|
|
|
+
|
|
|
+ oldPortRule := buildMagicsockPortRule(12345)
|
|
|
+ hasOldRule := slices.Contains(nfr.ipt4["filter/ts-input"], oldPortRule)
|
|
|
+
|
|
|
+ if hasOldRule {
|
|
|
+ t.Errorf("firewall rule for OLD port 12345 still exists (should be deleted).\nFound: %s\nAll rules: %v",
|
|
|
+ oldPortRule, nfr.ipt4["filter/ts-input"])
|
|
|
+ }
|
|
|
+}
|