mirror of
https://github.com/rancher/k3k.git
synced 2026-08-18 20:07:06 +00:00
* Adding new k3s function to get the config * Adding a new way to get the bootstrap data directly from the server Pod * Gate the bootstrap fetch if external datastore is in use --------- Signed-off-by: galal-hussein <hussein.galal.ahmed.11@gmail.com>
153 lines
3.2 KiB
Go
153 lines
3.2 KiB
Go
package k3s
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func Test_GetServerConfig(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
serverResponse string
|
|
clientConfig ClientConfig
|
|
expectedConfig *K3SConfig
|
|
expectedErr error
|
|
isServerRunning bool
|
|
}{
|
|
{
|
|
name: "server not ready",
|
|
isServerRunning: false,
|
|
serverResponse: "",
|
|
expectedConfig: nil,
|
|
expectedErr: ErrServerNotReady,
|
|
clientConfig: ClientConfig{
|
|
ServerIP: "127.0.0.1:33333",
|
|
},
|
|
},
|
|
{
|
|
name: "cluster init is true",
|
|
isServerRunning: true,
|
|
serverResponse: `{"ClusterInit": true}`,
|
|
expectedConfig: &K3SConfig{ClusterInit: true},
|
|
expectedErr: ErrServerNotReady,
|
|
clientConfig: ClientConfig{},
|
|
},
|
|
{
|
|
name: "cluster init is false",
|
|
isServerRunning: true,
|
|
serverResponse: `{"ClusterInit": false}`,
|
|
expectedConfig: &K3SConfig{ClusterInit: false},
|
|
expectedErr: ErrServerNotReady,
|
|
clientConfig: ClientConfig{},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
mux := http.NewServeMux()
|
|
|
|
mockServer := httptest.NewUnstartedServer(mux)
|
|
if tt.isServerRunning {
|
|
mockServer.StartTLS()
|
|
defer mockServer.Close()
|
|
}
|
|
|
|
mux.Handle("/v1-k3s/config", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, err := w.Write([]byte(tt.serverResponse))
|
|
require.NoError(t, err)
|
|
}))
|
|
|
|
if tt.clientConfig.ServerIP == "" {
|
|
u, err := url.Parse(mockServer.URL)
|
|
require.NoError(t, err)
|
|
|
|
tt.clientConfig.ServerIP = u.Host
|
|
}
|
|
|
|
k3sClient := New(tt.clientConfig)
|
|
|
|
k3sConfig, err := k3sClient.GetServerConfig()
|
|
if err != nil && tt.expectedErr != nil {
|
|
assert.EqualError(t, err, tt.expectedErr.Error())
|
|
} else {
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
assert.Equal(t, tt.expectedConfig, k3sConfig)
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_GetServerBootstrap(t *testing.T) {
|
|
fakeBootstrap := &BootstrapData{
|
|
ClientCA: cert{
|
|
Content: "dGVzdA==",
|
|
},
|
|
ClientCAKey: cert{
|
|
Content: "dGVzdA==",
|
|
},
|
|
ServerCA: cert{
|
|
Content: "dGVzdA==",
|
|
},
|
|
ServerCAKey: cert{
|
|
Content: "dGVzdA==",
|
|
},
|
|
ETCDServerCA: cert{
|
|
Content: "dGVzdA==",
|
|
},
|
|
ETCDServerCAKey: cert{
|
|
Content: "dGVzdA==",
|
|
},
|
|
}
|
|
|
|
expectedBootstrap := &BootstrapData{
|
|
ClientCA: cert{
|
|
Content: "test",
|
|
},
|
|
ClientCAKey: cert{
|
|
Content: "test",
|
|
},
|
|
ServerCA: cert{
|
|
Content: "test",
|
|
},
|
|
ServerCAKey: cert{
|
|
Content: "test",
|
|
},
|
|
ETCDServerCA: cert{
|
|
Content: "test",
|
|
},
|
|
ETCDServerCAKey: cert{
|
|
Content: "test",
|
|
},
|
|
}
|
|
|
|
mux := http.NewServeMux()
|
|
|
|
mockServer := httptest.NewTLSServer(mux)
|
|
defer mockServer.Close()
|
|
|
|
serverResponse, err := json.Marshal(fakeBootstrap)
|
|
require.NoError(t, err)
|
|
|
|
mux.Handle("/v1-k3s/server-bootstrap", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
_, err := w.Write(serverResponse)
|
|
require.NoError(t, err)
|
|
}))
|
|
|
|
u, err := url.Parse(mockServer.URL)
|
|
require.NoError(t, err)
|
|
|
|
k3sClient := New(ClientConfig{ServerIP: u.Host})
|
|
|
|
bootstrap, err := k3sClient.GetServerBootstrap()
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, expectedBootstrap, bootstrap)
|
|
}
|