mirror of https://github.com/tailscale/tailscale/
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
3.9 KiB
Go
197 lines
3.9 KiB
Go
1 year ago
|
// Copyright (c) Tailscale Inc & AUTHORS
|
||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||
|
//go:build !ts_omit_kube
|
||
|
|
||
|
package cli
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/google/go-cmp/cmp"
|
||
|
)
|
||
|
|
||
|
func TestKubeconfig(t *testing.T) {
|
||
|
const fqdn = "foo.tail-scale.ts.net"
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
in string
|
||
|
want string
|
||
|
wantErr error
|
||
|
}{
|
||
|
{
|
||
|
name: "invalid-yaml",
|
||
|
in: `apiVersion: v1
|
||
|
kind: ,asdf`,
|
||
|
wantErr: errInvalidKubeconfig,
|
||
|
},
|
||
|
{
|
||
|
name: "invalid-cfg",
|
||
|
in: `apiVersion: v1
|
||
|
kind: Pod`,
|
||
|
wantErr: errInvalidKubeconfig,
|
||
|
},
|
||
|
{
|
||
|
name: "empty",
|
||
|
in: "",
|
||
|
want: `apiVersion: v1
|
||
|
clusters:
|
||
|
- cluster:
|
||
|
server: https://foo.tail-scale.ts.net
|
||
|
name: foo.tail-scale.ts.net
|
||
|
contexts:
|
||
|
- context:
|
||
|
cluster: foo.tail-scale.ts.net
|
||
|
user: tailscale-auth
|
||
|
name: foo.tail-scale.ts.net
|
||
|
current-context: foo.tail-scale.ts.net
|
||
|
kind: Config
|
||
|
users:
|
||
|
- name: tailscale-auth
|
||
|
user:
|
||
|
token: unused`,
|
||
|
},
|
||
|
{
|
||
|
name: "already-configured",
|
||
|
in: `apiVersion: v1
|
||
|
clusters:
|
||
|
- cluster:
|
||
|
server: https://foo.tail-scale.ts.net
|
||
|
name: foo.tail-scale.ts.net
|
||
|
contexts:
|
||
|
- context:
|
||
|
cluster: foo.tail-scale.ts.net
|
||
|
user: tailscale-auth
|
||
|
name: foo.tail-scale.ts.net
|
||
|
kind: Config
|
||
|
current-context: foo.tail-scale.ts.net
|
||
|
users:
|
||
|
- name: tailscale-auth
|
||
|
user:
|
||
|
token: unused`,
|
||
|
want: `apiVersion: v1
|
||
|
clusters:
|
||
|
- cluster:
|
||
|
server: https://foo.tail-scale.ts.net
|
||
|
name: foo.tail-scale.ts.net
|
||
|
contexts:
|
||
|
- context:
|
||
|
cluster: foo.tail-scale.ts.net
|
||
|
user: tailscale-auth
|
||
|
name: foo.tail-scale.ts.net
|
||
|
current-context: foo.tail-scale.ts.net
|
||
|
kind: Config
|
||
|
users:
|
||
|
- name: tailscale-auth
|
||
|
user:
|
||
|
token: unused`,
|
||
|
},
|
||
|
{
|
||
|
name: "other-cluster",
|
||
|
in: `apiVersion: v1
|
||
|
clusters:
|
||
|
- cluster:
|
||
|
server: https://192.168.1.1:8443
|
||
|
name: some-cluster
|
||
|
contexts:
|
||
|
- context:
|
||
|
cluster: some-cluster
|
||
|
user: some-auth
|
||
|
name: some-cluster
|
||
|
kind: Config
|
||
|
current-context: some-cluster
|
||
|
users:
|
||
|
- name: some-auth
|
||
|
user:
|
||
|
token: asdfasdf`,
|
||
|
want: `apiVersion: v1
|
||
|
clusters:
|
||
|
- cluster:
|
||
|
server: https://192.168.1.1:8443
|
||
|
name: some-cluster
|
||
|
- cluster:
|
||
|
server: https://foo.tail-scale.ts.net
|
||
|
name: foo.tail-scale.ts.net
|
||
|
contexts:
|
||
|
- context:
|
||
|
cluster: some-cluster
|
||
|
user: some-auth
|
||
|
name: some-cluster
|
||
|
- context:
|
||
|
cluster: foo.tail-scale.ts.net
|
||
|
user: tailscale-auth
|
||
|
name: foo.tail-scale.ts.net
|
||
|
current-context: foo.tail-scale.ts.net
|
||
|
kind: Config
|
||
|
users:
|
||
|
- name: some-auth
|
||
|
user:
|
||
|
token: asdfasdf
|
||
|
- name: tailscale-auth
|
||
|
user:
|
||
|
token: unused`,
|
||
|
},
|
||
|
{
|
||
|
name: "already-using-tailscale",
|
||
|
in: `apiVersion: v1
|
||
|
clusters:
|
||
|
- cluster:
|
||
|
server: https://bar.tail-scale.ts.net
|
||
|
name: bar.tail-scale.ts.net
|
||
|
contexts:
|
||
|
- context:
|
||
|
cluster: bar.tail-scale.ts.net
|
||
|
user: tailscale-auth
|
||
|
name: bar.tail-scale.ts.net
|
||
|
kind: Config
|
||
|
current-context: bar.tail-scale.ts.net
|
||
|
users:
|
||
|
- name: tailscale-auth
|
||
|
user:
|
||
|
token: unused`,
|
||
|
want: `apiVersion: v1
|
||
|
clusters:
|
||
|
- cluster:
|
||
|
server: https://bar.tail-scale.ts.net
|
||
|
name: bar.tail-scale.ts.net
|
||
|
- cluster:
|
||
|
server: https://foo.tail-scale.ts.net
|
||
|
name: foo.tail-scale.ts.net
|
||
|
contexts:
|
||
|
- context:
|
||
|
cluster: bar.tail-scale.ts.net
|
||
|
user: tailscale-auth
|
||
|
name: bar.tail-scale.ts.net
|
||
|
- context:
|
||
|
cluster: foo.tail-scale.ts.net
|
||
|
user: tailscale-auth
|
||
|
name: foo.tail-scale.ts.net
|
||
|
current-context: foo.tail-scale.ts.net
|
||
|
kind: Config
|
||
|
users:
|
||
|
- name: tailscale-auth
|
||
|
user:
|
||
|
token: unused`,
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
got, err := updateKubeconfig([]byte(tt.in), fqdn)
|
||
|
if err != nil {
|
||
|
if err != tt.wantErr {
|
||
|
t.Fatalf("updateKubeconfig() error = %v, wantErr %v", err, tt.wantErr)
|
||
|
}
|
||
|
return
|
||
|
} else if tt.wantErr != nil {
|
||
|
t.Fatalf("updateKubeconfig() error = %v, wantErr %v", err, tt.wantErr)
|
||
|
}
|
||
|
got = bytes.TrimSpace(got)
|
||
|
want := []byte(strings.TrimSpace(tt.want))
|
||
|
if d := cmp.Diff(want, got); d != "" {
|
||
|
t.Errorf("Kubeconfig() mismatch (-want +got):\n%s", d)
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|