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  }