mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-27 12:05:26 +00:00
132 lines
3.0 KiB
Go
132 lines
3.0 KiB
Go
|
package mapper
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/google/go-cmp/cmp"
|
||
|
"github.com/google/go-cmp/cmp/cmpopts"
|
||
|
"github.com/juanfont/headscale/hscontrol/types"
|
||
|
"gopkg.in/check.v1"
|
||
|
"tailscale.com/tailcfg"
|
||
|
"tailscale.com/types/dnstype"
|
||
|
)
|
||
|
|
||
|
func (s *Suite) TestGetMapResponseUserProfiles(c *check.C) {
|
||
|
mach := func(hostname, username string, userid uint) types.Machine {
|
||
|
return types.Machine{
|
||
|
Hostname: hostname,
|
||
|
UserID: userid,
|
||
|
User: types.User{
|
||
|
Name: username,
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
machineInShared1 := mach("test_get_shared_nodes_1", "user1", 1)
|
||
|
machineInShared2 := mach("test_get_shared_nodes_2", "user2", 2)
|
||
|
machineInShared3 := mach("test_get_shared_nodes_3", "user3", 3)
|
||
|
machine2InShared1 := mach("test_get_shared_nodes_4", "user1", 1)
|
||
|
|
||
|
userProfiles := generateUserProfiles(
|
||
|
&machineInShared1,
|
||
|
types.Machines{
|
||
|
machineInShared2, machineInShared3, machine2InShared1,
|
||
|
},
|
||
|
"",
|
||
|
)
|
||
|
|
||
|
c.Assert(len(userProfiles), check.Equals, 3)
|
||
|
|
||
|
users := []string{
|
||
|
"user1", "user2", "user3",
|
||
|
}
|
||
|
|
||
|
for _, user := range users {
|
||
|
found := false
|
||
|
for _, userProfile := range userProfiles {
|
||
|
if userProfile.DisplayName == user {
|
||
|
found = true
|
||
|
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
c.Assert(found, check.Equals, true)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestDNSConfigMapResponse(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
magicDNS bool
|
||
|
want *tailcfg.DNSConfig
|
||
|
}{
|
||
|
{
|
||
|
magicDNS: true,
|
||
|
want: &tailcfg.DNSConfig{
|
||
|
Routes: map[string][]*dnstype.Resolver{
|
||
|
"shared1.foobar.headscale.net": {},
|
||
|
"shared2.foobar.headscale.net": {},
|
||
|
"shared3.foobar.headscale.net": {},
|
||
|
},
|
||
|
Domains: []string{
|
||
|
"foobar.headscale.net",
|
||
|
"shared1.foobar.headscale.net",
|
||
|
},
|
||
|
Proxied: true,
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
magicDNS: false,
|
||
|
want: &tailcfg.DNSConfig{
|
||
|
Domains: []string{"foobar.headscale.net"},
|
||
|
Proxied: false,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tt := range tests {
|
||
|
t.Run(fmt.Sprintf("with-magicdns-%v", tt.magicDNS), func(t *testing.T) {
|
||
|
mach := func(hostname, username string, userid uint) types.Machine {
|
||
|
return types.Machine{
|
||
|
Hostname: hostname,
|
||
|
UserID: userid,
|
||
|
User: types.User{
|
||
|
Name: username,
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
baseDomain := "foobar.headscale.net"
|
||
|
|
||
|
dnsConfigOrig := tailcfg.DNSConfig{
|
||
|
Routes: make(map[string][]*dnstype.Resolver),
|
||
|
Domains: []string{baseDomain},
|
||
|
Proxied: tt.magicDNS,
|
||
|
}
|
||
|
|
||
|
machineInShared1 := mach("test_get_shared_nodes_1", "shared1", 1)
|
||
|
machineInShared2 := mach("test_get_shared_nodes_2", "shared2", 2)
|
||
|
machineInShared3 := mach("test_get_shared_nodes_3", "shared3", 3)
|
||
|
machine2InShared1 := mach("test_get_shared_nodes_4", "shared1", 1)
|
||
|
|
||
|
peersOfMachineInShared1 := types.Machines{
|
||
|
machineInShared1,
|
||
|
machineInShared2,
|
||
|
machineInShared3,
|
||
|
machine2InShared1,
|
||
|
}
|
||
|
|
||
|
got := generateDNSConfig(
|
||
|
&dnsConfigOrig,
|
||
|
baseDomain,
|
||
|
machineInShared1,
|
||
|
peersOfMachineInShared1,
|
||
|
)
|
||
|
|
||
|
if diff := cmp.Diff(tt.want, got, cmpopts.EquateEmpty()); diff != "" {
|
||
|
t.Errorf("expandAlias() = %v, want %v", got, tt.want)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|