Files
kubevpn/test/function_test.go
2022-01-03 17:46:02 +08:00

148 lines
3.0 KiB
Go

package test
import (
"context"
"fmt"
log "github.com/sirupsen/logrus"
"github.com/wencaiwulue/kubevpn/util"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"net"
"os/exec"
"strings"
"testing"
"time"
)
var (
namespace string
clientset *kubernetes.Clientset
restclient *rest.RESTClient
config *rest.Config
)
func TestPingPodIP(t *testing.T) {
list, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), v1.ListOptions{})
if err != nil {
t.FailNow()
}
for _, item := range list.Items {
command := exec.Command("ping", "-c", "4", item.Status.PodIP)
command.Run()
if !command.ProcessState.Success() {
t.FailNow()
}
}
}
func TestUDP(t *testing.T) {
go func() {
server()
}()
time.Sleep(time.Second * 1)
if err := client(); err != nil {
t.FailNow()
}
}
func client() error {
socket, err := net.DialUDP("udp4", nil, &net.UDPAddr{
IP: net.IPv4(172, 20, 225, 47),
Port: 55555,
})
if err != nil {
fmt.Println("连接失败!", err)
return err
}
defer socket.Close()
// 发送数据
senddata := []byte("hello server!")
_, err = socket.Write(senddata)
if err != nil {
fmt.Println("发送数据失败!", err)
return err
}
// 接收数据
data := make([]byte, 4096)
read, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("读取数据失败!", err)
return err
}
fmt.Println(read, remoteAddr)
fmt.Printf("%s\n", data[0:read])
return nil
}
func server() {
// 创建监听
socket, err := net.ListenUDP("udp4", &net.UDPAddr{
IP: net.IPv4(0, 0, 0, 0),
Port: 55555,
})
if err != nil {
return
}
defer socket.Close()
for {
data := make([]byte, 4096)
read, remoteAddr, err := socket.ReadFromUDP(data)
if err != nil {
fmt.Println("读取数据失败!", err)
continue
}
fmt.Println(read, remoteAddr)
fmt.Printf("%s\n\n", data[0:read])
senddata := []byte("hello client!")
_, err = socket.WriteToUDP(senddata, remoteAddr)
if err != nil {
fmt.Println("发送数据失败!", err)
return
}
}
}
func init() {
initClient()
command := exec.Command("nhctl", "connect", "--workloads=ratings")
c := make(chan struct{})
_, _, _ = util.RunWithRollingOutWithChecker(command, func(log string) bool {
ok := strings.Contains(log, "dns service ok")
if ok {
c <- struct{}{}
}
return ok
})
<-c
}
func initClient() {
var err error
configFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag()
configFlags.KubeConfig = &clientcmd.RecommendedHomeFile
f := cmdutil.NewFactory(cmdutil.NewMatchVersionFlags(configFlags))
if config, err = f.ToRESTConfig(); err != nil {
log.Fatal(err)
}
if restclient, err = rest.RESTClientFor(config); err != nil {
log.Fatal(err)
}
if clientset, err = kubernetes.NewForConfig(config); err != nil {
log.Fatal(err)
}
if namespace, _, err = f.ToRawKubeConfigLoader().Namespace(); err != nil {
log.Fatal(err)
}
}