mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-12-24 11:51:13 +08:00
148 lines
3.0 KiB
Go
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)
|
|
}
|
|
}
|