123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // Copyright (C) 2016 The Syncthing Authors.
- //
- // This Source Code Form is subject to the terms of the Mozilla Public
- // License, v. 2.0. If a copy of the MPL was not distributed with this file,
- // You can obtain one at https://mozilla.org/MPL/2.0/.
- package nat
- import (
- "net"
- "os"
- "testing"
- "github.com/syncthing/syncthing/lib/config"
- "github.com/syncthing/syncthing/lib/events"
- "github.com/syncthing/syncthing/lib/protocol"
- )
- func TestMappingValidGateway(t *testing.T) {
- a := net.ParseIP("10.0.0.1")
- b := net.ParseIP("192.168.0.1")
- tests := []struct {
- mappingLocalIP net.IP
- gatewayLocalIP net.IP
- expected bool
- }{
- // Any of the IPs is nil or unspecified implies correct
- {nil, nil, true},
- {net.IPv4zero, net.IPv4zero, true},
- {nil, net.IPv4zero, true},
- {net.IPv4zero, nil, true},
- {a, nil, true},
- {b, nil, true},
- {a, net.IPv4zero, true},
- {b, net.IPv4zero, true},
- {nil, a, true},
- {nil, b, true},
- {net.IPv4zero, a, true},
- {net.IPv4zero, b, true},
- // IPs are the same implies correct
- {a, a, true},
- {b, b, true},
- // IPs are specified and different, implies incorrect
- {a, b, false},
- {b, a, false},
- }
- for _, test := range tests {
- m := Mapping{
- address: Address{
- IP: test.mappingLocalIP,
- },
- }
- result := m.validGateway(test.gatewayLocalIP)
- if result != test.expected {
- t.Errorf("Incorrect: local %s gateway %s result %t expected %t", test.mappingLocalIP, test.gatewayLocalIP, result, test.expected)
- }
- }
- }
- func TestMappingClearAddresses(t *testing.T) {
- tmpFile, err := os.CreateTemp("", "syncthing-testConfig-")
- if err != nil {
- t.Fatal(err)
- }
- w := config.Wrap(tmpFile.Name(), config.Configuration{}, protocol.LocalDeviceID, events.NoopLogger)
- defer os.RemoveAll(tmpFile.Name())
- tmpFile.Close()
- natSvc := NewService(protocol.EmptyDeviceID, w)
- // Mock a mapped port; avoids the need to actually map a port
- ip := net.ParseIP("192.168.0.1")
- m := natSvc.NewMapping(TCP, IPv4Only, ip, 1024)
- m.extAddresses["test"] = []Address{{
- IP: ip,
- Port: 1024,
- }}
- // Now try and remove the mapped port; prior to #4829 this deadlocked
- natSvc.RemoveMapping(m)
- }
|