* #2140 Fixed updating of hostname and givenName when it is updated in HostInfo * #2140 Added integration tests * #2140 Fix unit tests * Changed IsAutomaticNameMode to GivenNameHasBeenChanged. Fixed errors in files according to golangci-lint rules
This commit is contained in:
parent
45c9585b52
commit
b6dc6eb36c
6 changed files with 221 additions and 2 deletions
|
@ -97,6 +97,11 @@ type (
|
|||
Nodes []*Node
|
||||
)
|
||||
|
||||
// GivenNameHasBeenChanged returns whether the `givenName` can be automatically changed based on the `Hostname` of the node.
|
||||
func (node *Node) GivenNameHasBeenChanged() bool {
|
||||
return node.GivenName == util.ConvertWithFQDNRules(node.Hostname)
|
||||
}
|
||||
|
||||
// IsExpired returns whether the node registration has expired.
|
||||
func (node Node) IsExpired() bool {
|
||||
// If Expiry is not set, the client has not indicated that
|
||||
|
@ -347,6 +352,21 @@ func (node *Node) RegisterMethodToV1Enum() v1.RegisterMethod {
|
|||
}
|
||||
}
|
||||
|
||||
// ApplyHostnameFromHostInfo takes a Hostinfo struct and updates the node.
|
||||
func (node *Node) ApplyHostnameFromHostInfo(hostInfo *tailcfg.Hostinfo) {
|
||||
if hostInfo == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if node.Hostname != hostInfo.Hostname {
|
||||
if node.GivenNameHasBeenChanged() {
|
||||
node.GivenName = util.ConvertWithFQDNRules(hostInfo.Hostname)
|
||||
}
|
||||
|
||||
node.Hostname = hostInfo.Hostname
|
||||
}
|
||||
}
|
||||
|
||||
// ApplyPeerChange takes a PeerChange struct and updates the node.
|
||||
func (node *Node) ApplyPeerChange(change *tailcfg.PeerChange) {
|
||||
if change.Key != nil {
|
||||
|
|
|
@ -337,6 +337,66 @@ func TestPeerChangeFromMapRequest(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestApplyHostnameFromHostInfo(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
nodeBefore Node
|
||||
change *tailcfg.Hostinfo
|
||||
want Node
|
||||
}{
|
||||
{
|
||||
name: "hostinfo-not-exists",
|
||||
nodeBefore: Node{
|
||||
GivenName: "manual-test.local",
|
||||
Hostname: "TestHost.Local",
|
||||
},
|
||||
change: nil,
|
||||
want: Node{
|
||||
GivenName: "manual-test.local",
|
||||
Hostname: "TestHost.Local",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "hostinfo-exists-no-automatic-givenName",
|
||||
nodeBefore: Node{
|
||||
GivenName: "manual-test.local",
|
||||
Hostname: "TestHost.Local",
|
||||
},
|
||||
change: &tailcfg.Hostinfo{
|
||||
Hostname: "NewHostName.Local",
|
||||
},
|
||||
want: Node{
|
||||
GivenName: "manual-test.local",
|
||||
Hostname: "NewHostName.Local",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "hostinfo-exists-automatic-givenName",
|
||||
nodeBefore: Node{
|
||||
GivenName: "automaticname.test",
|
||||
Hostname: "AutomaticName.Test",
|
||||
},
|
||||
change: &tailcfg.Hostinfo{
|
||||
Hostname: "NewHostName.Local",
|
||||
},
|
||||
want: Node{
|
||||
GivenName: "newhostname.local",
|
||||
Hostname: "NewHostName.Local",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tt.nodeBefore.ApplyHostnameFromHostInfo(tt.change)
|
||||
|
||||
if diff := cmp.Diff(tt.want, tt.nodeBefore, util.Comparers...); diff != "" {
|
||||
t.Errorf("Patch unexpected result (-want +got):\n%s", diff)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplyPeerChange(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue