mirror of https://github.com/k3s-io/k3s
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
254 lines
7.2 KiB
254 lines
7.2 KiB
package cluster |
|
|
|
import ( |
|
"bytes" |
|
"context" |
|
"os" |
|
"path/filepath" |
|
"testing" |
|
"time" |
|
|
|
"github.com/k3s-io/kine/pkg/endpoint" |
|
"github.com/rancher/k3s/pkg/bootstrap" |
|
"github.com/rancher/k3s/pkg/clientaccess" |
|
"github.com/rancher/k3s/pkg/cluster/managed" |
|
"github.com/rancher/k3s/pkg/daemons/config" |
|
) |
|
|
|
func Test_isDirEmpty(t *testing.T) { |
|
const tmpDir = "test_dir" |
|
|
|
type args struct { |
|
name string |
|
} |
|
tests := []struct { |
|
name string |
|
args args |
|
setup func() error |
|
teardown func() error |
|
want bool |
|
wantErr bool |
|
}{ |
|
{ |
|
name: "is empty", |
|
args: args{ |
|
name: tmpDir, |
|
}, |
|
setup: func() error { |
|
return os.Mkdir(tmpDir, 0700) |
|
}, |
|
teardown: func() error { |
|
return os.RemoveAll(tmpDir) |
|
}, |
|
want: true, |
|
wantErr: false, |
|
}, |
|
{ |
|
name: "is not empty", |
|
args: args{ |
|
name: tmpDir, |
|
}, |
|
setup: func() error { |
|
os.Mkdir(tmpDir, 0700) |
|
_, _ = os.Create(filepath.Join(filepath.Dir(tmpDir), tmpDir, "test_file")) |
|
return nil |
|
}, |
|
teardown: func() error { |
|
return os.RemoveAll(tmpDir) |
|
}, |
|
want: false, |
|
wantErr: false, |
|
}, |
|
} |
|
for _, tt := range tests { |
|
t.Run(tt.name, func(t *testing.T) { |
|
defer tt.teardown() |
|
if err := tt.setup(); err != nil { |
|
t.Errorf("Setup for isDirEmpty() failed = %v", err) |
|
return |
|
} |
|
got, err := isDirEmpty(tt.args.name) |
|
if (err != nil) != tt.wantErr { |
|
t.Errorf("isDirEmpty() error = %v, wantErr %v", err, tt.wantErr) |
|
return |
|
} |
|
if got != tt.want { |
|
t.Errorf("isDirEmpty() = %+v\nWant = %+v", got, tt.want) |
|
} |
|
}) |
|
} |
|
} |
|
|
|
func TestCluster_certDirsExist(t *testing.T) { |
|
const testDataDir = "/tmp/k3s/" |
|
|
|
testTLSDir := filepath.Join(testDataDir, "server", "tls") |
|
testTLSEtcdDir := filepath.Join(testDataDir, "server", "tls", "etcd") |
|
|
|
type fields struct { |
|
clientAccessInfo *clientaccess.Info |
|
config *config.Control |
|
runtime *config.ControlRuntime |
|
managedDB managed.Driver |
|
etcdConfig endpoint.ETCDConfig |
|
shouldBootstrap bool |
|
storageStarted bool |
|
saveBootstrap bool |
|
} |
|
tests := []struct { |
|
name string |
|
fields fields |
|
setup func() error |
|
teardown func() error |
|
wantErr bool |
|
}{ |
|
{ |
|
name: "exists", |
|
fields: fields{ |
|
config: &config.Control{ |
|
DataDir: filepath.Join(testDataDir, "server"), |
|
}, |
|
}, |
|
setup: func() error { |
|
os.MkdirAll(testTLSEtcdDir, 0700) |
|
|
|
_, _ = os.Create(filepath.Join(testTLSDir, "test_file")) |
|
_, _ = os.Create(filepath.Join(testTLSEtcdDir, "test_file")) |
|
|
|
return nil |
|
}, |
|
teardown: func() error { |
|
return os.RemoveAll(testDataDir) |
|
}, |
|
wantErr: false, |
|
}, |
|
} |
|
for _, tt := range tests { |
|
t.Run(tt.name, func(t *testing.T) { |
|
c := &Cluster{ |
|
clientAccessInfo: tt.fields.clientAccessInfo, |
|
config: tt.fields.config, |
|
runtime: tt.fields.runtime, |
|
managedDB: tt.fields.managedDB, |
|
EtcdConfig: tt.fields.etcdConfig, |
|
storageStarted: tt.fields.storageStarted, |
|
saveBootstrap: tt.fields.saveBootstrap, |
|
} |
|
defer tt.teardown() |
|
if err := tt.setup(); err != nil { |
|
t.Errorf("Setup for Cluster.certDirsExist() failed = %v", err) |
|
return |
|
} |
|
if err := c.certDirsExist(); (err != nil) != tt.wantErr { |
|
t.Errorf("Cluster.certDirsExist() error = %v, wantErr %v", err, tt.wantErr) |
|
} |
|
}) |
|
} |
|
} |
|
|
|
func TestCluster_migrateBootstrapData(t *testing.T) { |
|
type fields struct { |
|
clientAccessInfo *clientaccess.Info |
|
config *config.Control |
|
runtime *config.ControlRuntime |
|
managedDB managed.Driver |
|
etcdConfig endpoint.ETCDConfig |
|
joining bool |
|
storageStarted bool |
|
saveBootstrap bool |
|
shouldBootstrap bool |
|
} |
|
type args struct { |
|
ctx context.Context |
|
data *bytes.Buffer |
|
files bootstrap.PathsDataformat |
|
} |
|
tests := []struct { |
|
name string |
|
args args |
|
setup func() error // Optional, delete if unused |
|
teardown func() error // Optional, delete if unused |
|
wantErr bool |
|
}{ |
|
{ |
|
name: "Success", |
|
args: args{ |
|
ctx: context.Background(), |
|
data: bytes.NewBuffer([]byte(`{"ServerCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQ3ZEQ0NBYVFDQVFBd2R6RUxNQWtHQTFVRUJoTUNWVk14RFRBTEJnTlZCQWdNQkZWMFlXZ3hEekFOQmdOVgpCQWNNQmt4cGJtUnZiakVXTUJRR0ExVUVDZ3dOUkdsbmFVTmxjblFnU1c1akxqRVJNQThHQTFVRUN3d0lSR2xuCmFVTmxjblF4SFRBYkJnTlZCQU1NRkdWNFlXMXdiR1V1WkdsbmFXTmxjblF1WTI5dE1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTgrVG83ZCsya1BXZUJ2L29yVTNMVmJKd0RyU1FiZUthbUNtbwp3cDVicUR4SXdWMjB6cVJiN0FQVU9LWW9WRUZGT0VRczZUNmdJbW5Jb2xoYmlINm00emdaL0NQdldCT2taYytjCjFQbzJFbXZCeitBRDVzQmRUNWt6R1FBNk5iV3laR2xkeFJ0aE5MT3MxZWZPaGRuV0Z1aEkxNjJxbWNmbGdwaUkKV0R1d3E0QzlmK1lrZUpoTm45ZEY1K293bThjT1FtRHJWOE5OZGlUcWluOHEzcVlBSEhKUlcyOGdsSlVDWmtUWgp3SWFTUjZjckJROFRiWU5FMGRjK0NhYTNET0lrejFFT3NIV3pUeCtuMHpLZnFjYmdYaTRESngrQzFianB0WVBSCkJQWkw4REFlV3VBOGVidWRWVDQ0eUVwODJHOTYvR2djZjdGMzN4TXhlMHljK1hhNm93SURBUUFCb0FBd0RRWUoKS29aSWh2Y05BUUVGQlFBRGdnRUJBQjBrY3JGY2NTbUZEbXhveDBOZTAxVUlxU3NEcUhnTCtYbUhUWEp3cmU2RApoSlNad2J2RXRPSzBHMytkcjRGczExV3VVTnQ1cWNMc3g1YTh1azRHNkFLSE16dWhMc0o3WFpqZ21RWEdFQ3BZClE0bUMzeVQzWm9DR3BJWGJ3K2lQM2xtRUVYZ2FRTDBUeDVMRmwvb2tLYktZd0lxTml5S1dPTWo3WlIvd3hXZy8KWkRHUnM1NXh1b2VMREovWlJGZjliSStJYUNVZDFZcmZZY0hJbDNHODdBdityNDlZVndxUkRUMFZEVjd1TGdxbgoyOVhJMVBwVlVOQ1BRR245cC9lWDZRbzd2cERhUHliUnRBMlI3WExLalFhRjlvWFdlQ1VxeTFodkphYzlRRk8yCjk3T2IxYWxwSFBvWjdtV2lFdUp3akJQaWk2YTlNOUczMG5VbzM5bEJpMXc9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQ=="}`)), |
|
files: make(bootstrap.PathsDataformat), |
|
}, |
|
wantErr: false, |
|
}, |
|
{ |
|
name: "Invalid Old Format", |
|
args: args{ |
|
ctx: context.Background(), |
|
data: &bytes.Buffer{}, |
|
files: bootstrap.PathsDataformat{ |
|
"ServerCA": bootstrap.File{ |
|
Timestamp: time.Now(), |
|
}, |
|
}, |
|
}, |
|
wantErr: true, |
|
}, |
|
} |
|
for _, tt := range tests { |
|
t.Run(tt.name, func(t *testing.T) { |
|
if err := migrateBootstrapData(tt.args.ctx, tt.args.data, tt.args.files); (err != nil) != tt.wantErr { |
|
t.Errorf("Cluster.migrateBootstrapData() error = %v, wantErr %v", err, tt.wantErr) |
|
} |
|
}) |
|
} |
|
} |
|
|
|
func TestCluster_Snapshot(t *testing.T) { |
|
type fields struct { |
|
clientAccessInfo *clientaccess.Info |
|
config *config.Control |
|
runtime *config.ControlRuntime |
|
managedDB managed.Driver |
|
etcdConfig endpoint.ETCDConfig |
|
joining bool |
|
storageStarted bool |
|
saveBootstrap bool |
|
shouldBootstrap bool |
|
} |
|
type args struct { |
|
ctx context.Context |
|
config *config.Control |
|
} |
|
tests := []struct { |
|
name string |
|
fields fields |
|
args args |
|
wantErr bool |
|
}{ |
|
{ |
|
name: "Fail on non etcd cluster", |
|
fields: fields{}, |
|
args: args{ |
|
ctx: context.Background(), |
|
}, |
|
wantErr: true, |
|
}, |
|
} |
|
for _, tt := range tests { |
|
t.Run(tt.name, func(t *testing.T) { |
|
c := &Cluster{ |
|
clientAccessInfo: tt.fields.clientAccessInfo, |
|
config: tt.fields.config, |
|
runtime: tt.fields.runtime, |
|
managedDB: tt.fields.managedDB, |
|
EtcdConfig: tt.fields.etcdConfig, |
|
joining: tt.fields.joining, |
|
storageStarted: tt.fields.storageStarted, |
|
saveBootstrap: tt.fields.saveBootstrap, |
|
shouldBootstrap: tt.fields.shouldBootstrap, |
|
} |
|
if err := c.Snapshot(tt.args.ctx, tt.args.config); (err != nil) != tt.wantErr { |
|
t.Errorf("Cluster.Snapshot() error = %v, wantErr %v", err, tt.wantErr) |
|
} |
|
}) |
|
} |
|
}
|
|
|