mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-16 11:39:57 +00:00
121 lines
2.6 KiB
Go
121 lines
2.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestFingerprintClusters(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
srv := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
//nolint: errcheck
|
|
w.Write([]byte(`{"gitVersion": "foobar"}`))
|
|
}))
|
|
defer srv.Close()
|
|
|
|
clusterURL, clusterVersion, err := fingerprintClusters(t.Context(), srv.Client(), srv.Listener.Addr().String())
|
|
require.NoError(t, err)
|
|
require.Equal(t, srv.URL, clusterURL.String())
|
|
require.Equal(t, "foobar", clusterVersion)
|
|
}
|
|
|
|
func TestResolveKubeconfigPath(t *testing.T) {
|
|
home, err := os.UserHomeDir()
|
|
if err != nil {
|
|
t.Fatalf("could not determine home directory: %v", err)
|
|
}
|
|
defaultPath := filepath.Join(home, ".kube", "config")
|
|
path, err := resolveKubeconfigPath(&cobra.Command{})
|
|
require.NoError(t, err)
|
|
require.Equal(t, defaultPath, path)
|
|
|
|
flagPath := "flag-path"
|
|
cmd := &cobra.Command{}
|
|
cmd.Flags().String("kubeconfig", "", "")
|
|
err = cmd.Flags().Set("kubeconfig", flagPath)
|
|
require.NoError(t, err)
|
|
path, err = resolveKubeconfigPath(cmd)
|
|
require.NoError(t, err)
|
|
require.Equal(t, flagPath, path)
|
|
|
|
envPath := "env-path"
|
|
t.Setenv("KUBECONFIG", envPath)
|
|
path, err = resolveKubeconfigPath(&cobra.Command{})
|
|
require.NoError(t, err)
|
|
require.Equal(t, envPath, path)
|
|
}
|
|
|
|
func TestWriteKubeconfig(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
tests := []struct {
|
|
name string
|
|
existing string
|
|
}{
|
|
{
|
|
name: "empty file",
|
|
},
|
|
{
|
|
name: "existing content",
|
|
existing: `apiVersion: v1
|
|
clusters:
|
|
- cluster:
|
|
insecure-skip-tls-verify: true
|
|
server: https://foobar.com
|
|
name: foo
|
|
current-context: test
|
|
kind: Config
|
|
users: []
|
|
`,
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
kubeconfigPath := filepath.Join(t.TempDir(), "config")
|
|
err := os.WriteFile(kubeconfigPath, []byte(tt.existing), 0o644)
|
|
require.NoError(t, err)
|
|
|
|
kc := kubernetesCluster{
|
|
name: "foo",
|
|
url: &url.URL{Scheme: "https", Host: "example.com"},
|
|
}
|
|
err = writeKubeconfig(kubeconfigPath, kc)
|
|
require.NoError(t, err)
|
|
|
|
b, err := os.ReadFile(kubeconfigPath)
|
|
require.NoError(t, err)
|
|
expected := `apiVersion: v1
|
|
clusters:
|
|
- cluster:
|
|
insecure-skip-tls-verify: true
|
|
server: https://example.com
|
|
name: foo
|
|
contexts:
|
|
- context:
|
|
cluster: foo
|
|
namespace: default
|
|
user: netbird
|
|
name: foo
|
|
current-context: foo
|
|
kind: Config
|
|
users:
|
|
- name: netbird
|
|
user:
|
|
token: none
|
|
`
|
|
require.Equal(t, expected, string(b))
|
|
})
|
|
}
|
|
|
|
}
|