github.com/sealerio/sealer@v0.11.1-0.20240507115618-f4f89c5853ae/pkg/infradriver/ssh_infradriver_test.go (about) 1 // Copyright © 2022 Alibaba Group Holding Ltd. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package infradriver 16 17 import ( 18 "net" 19 "testing" 20 21 "github.com/sealerio/sealer/common" 22 v1 "github.com/sealerio/sealer/types/api/v1" 23 v2 "github.com/sealerio/sealer/types/api/v2" 24 "github.com/stretchr/testify/assert" 25 ) 26 27 func getDefaultCluster() (InfraDriver, error) { 28 cluster := &v2.Cluster{ 29 Spec: v2.ClusterSpec{ 30 Image: "kubernetes:v1.19.8", 31 Env: []string{"key1=value1", "key2=value2, value3"}, 32 SSH: v1.SSH{ 33 User: "root", 34 Passwd: "test123", 35 Port: "22", 36 Pk: "xxx", 37 PkPasswd: "xxx", 38 }, 39 Hosts: []v2.Host{ 40 { 41 IPS: []net.IP{net.IPv4(192, 168, 0, 2)}, 42 Roles: []string{"master"}, 43 Env: []string{"etcd-dir=/data/etcd"}, 44 SSH: v1.SSH{ 45 User: "root", 46 Passwd: "test456", 47 Port: "22", 48 }, 49 }, 50 { 51 IPS: []net.IP{net.IPv4(192, 168, 0, 3)}, 52 Roles: []string{"node", "db"}, 53 Env: []string{"test_node_env_key=test_node_env_value"}, 54 }, 55 }, 56 }, 57 } 58 cluster.APIVersion = "sealer.io/v2" 59 cluster.Kind = "Cluster" 60 cluster.Name = "my-cluster" 61 62 return NewInfraDriver(cluster) 63 } 64 65 func TestSSHInfraDriver_GetClusterInfo(t *testing.T) { 66 driver, err := getDefaultCluster() 67 if err != nil { 68 assert.Error(t, err) 69 } 70 71 assert.Equal(t, driver.GetClusterName(), "my-cluster") 72 assert.Equal(t, driver.GetClusterImageName(), "kubernetes:v1.19.8") 73 assert.Equal(t, driver.GetClusterBasePath(), "/var/lib/sealer/data/my-cluster") 74 assert.Equal(t, driver.GetClusterRootfsPath(), "/var/lib/sealer/data/my-cluster/rootfs") 75 76 assert.Equal(t, driver.GetHostIPListByRole(common.MASTER), []net.IP{ 77 net.IPv4(192, 168, 0, 2), 78 }) 79 80 assert.Equal(t, driver.GetHostIPListByRole(common.NODE), []net.IP{ 81 net.IPv4(192, 168, 0, 3), 82 }) 83 84 assert.Equal(t, driver.GetHostIPList(), []net.IP{ 85 net.IPv4(192, 168, 0, 2), 86 net.IPv4(192, 168, 0, 3), 87 }) 88 89 assert.Equal(t, driver.GetClusterEnv(), map[string]string{ 90 "key1": "value1", 91 "key2": "value2, value3", 92 }) 93 94 assert.Equal(t, map[string]string{ 95 "HostIP": "192.168.0.2", 96 "key1": "value1", 97 "key2": "value2, value3", 98 "etcd-dir": "/data/etcd", 99 }, driver.GetHostEnv(net.IPv4(192, 168, 0, 2))) 100 101 assert.Equal(t, driver.GetHostEnv(net.IPv4(192, 168, 0, 3)), map[string]string{ 102 "HostIP": "192.168.0.3", 103 "key1": "value1", 104 "key2": "value2, value3", 105 "test_node_env_key": "test_node_env_value", 106 }) 107 } 108 109 func TestCheckAllHostsSameFamily(t *testing.T) { 110 type args struct { 111 data []net.IP 112 wanterr bool 113 } 114 115 var tests = []struct { 116 name string 117 args args 118 }{ 119 { 120 "test all ipv4", 121 args{ 122 data: []net.IP{net.IPv4(192, 168, 0, 1), net.IPv4(192, 168, 0, 2), net.IPv4(192, 168, 0, 3)}, 123 wanterr: false, 124 }, 125 }, 126 { 127 "test all ipv6", 128 args{ 129 data: []net.IP{net.ParseIP("2408:4003:10bb:6a01:83b9:6360:c66d:ed57"), net.ParseIP("2408:4003:10bb:6a01:83b9:6360:c66d:ed58")}, 130 wanterr: false, 131 }, 132 }, 133 { 134 "test mixed ip address", 135 args{ 136 data: []net.IP{net.IPv4(192, 168, 0, 1), net.ParseIP("2408:4003:10bb:6a01:83b9:6360:c66d:ed57")}, 137 wanterr: true, 138 }, 139 }, 140 } 141 142 for _, tt := range tests { 143 t.Run(tt.name, func(t *testing.T) { 144 err := checkAllHostsSameFamily(tt.args.data) 145 if tt.args.wanterr { 146 assert.NotNil(t, err) 147 } else { 148 assert.Nil(t, err) 149 } 150 }) 151 } 152 }