mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-10-05 07:16:54 +08:00
163 lines
5.5 KiB
Go
163 lines
5.5 KiB
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"crypto/md5"
|
|
"fmt"
|
|
"net"
|
|
"os/exec"
|
|
"testing"
|
|
"time"
|
|
|
|
probing "github.com/prometheus-community/pro-bing"
|
|
log "github.com/sirupsen/logrus"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/types"
|
|
net2 "k8s.io/apimachinery/pkg/util/net"
|
|
"k8s.io/cli-runtime/pkg/genericclioptions"
|
|
"k8s.io/cli-runtime/pkg/resource"
|
|
"k8s.io/client-go/kubernetes"
|
|
"k8s.io/client-go/rest"
|
|
"k8s.io/client-go/tools/clientcmd"
|
|
cmdutil "k8s.io/kubectl/pkg/cmd/util"
|
|
|
|
"github.com/wencaiwulue/kubevpn/pkg/util"
|
|
)
|
|
|
|
var (
|
|
clientConfig = clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
|
&clientcmd.ClientConfigLoadingRules{ExplicitPath: clientcmd.RecommendedHomeFile}, nil,
|
|
)
|
|
clientconfig, _ = clientConfig.ClientConfig()
|
|
clientsets, _ = kubernetes.NewForConfig(clientconfig)
|
|
namespaces, _, _ = clientConfig.Namespace()
|
|
)
|
|
|
|
func TestGetCIDR(t *testing.T) {
|
|
cidr, err := util.GetCIDRFromResourceUgly(clientsets, namespaces)
|
|
if err == nil {
|
|
for _, ipNet := range cidr {
|
|
fmt.Println(ipNet)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPingUsingCommand(t *testing.T) {
|
|
list, _ := clientsets.CoreV1().Services(namespaces).List(context.Background(), metav1.ListOptions{})
|
|
for _, service := range list.Items {
|
|
for _, clusterIP := range service.Spec.ClusterIPs {
|
|
_ = exec.Command("ping", clusterIP, "-c", "4").Run()
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestGetMacAddress(t *testing.T) {
|
|
interfaces, _ := net.Interfaces()
|
|
hostInterface, _ := net2.ChooseHostInterface()
|
|
for _, i := range interfaces {
|
|
//fmt.Printf("%s -> %s\n", i.Name, i.HardwareAddr.String())
|
|
addrs, _ := i.Addrs()
|
|
for _, addr := range addrs {
|
|
if hostInterface.Equal(addr.(*net.IPNet).IP) {
|
|
hash := md5.New()
|
|
hash.Write([]byte(i.HardwareAddr.String()))
|
|
sum := hash.Sum(nil)
|
|
toInt := util.BytesToInt(sum)
|
|
fmt.Println(toInt)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPingUsingCode(t *testing.T) {
|
|
conn, err := net.DialTimeout("ip4:icmp", "www.baidu.com", time.Second*5)
|
|
if err != nil {
|
|
log.Print(err)
|
|
return
|
|
}
|
|
var msg [512]byte
|
|
msg[0] = 8
|
|
msg[1] = 0
|
|
msg[2] = 0
|
|
msg[3] = 0
|
|
msg[4] = 0
|
|
msg[5] = 13
|
|
msg[6] = 0
|
|
msg[7] = 37
|
|
|
|
length := 8
|
|
check := checkSum(msg[0:length])
|
|
msg[2] = byte(check >> 8)
|
|
msg[3] = byte(check & 255)
|
|
_, err = conn.Write(msg[0:length])
|
|
if err != nil {
|
|
log.Print(err)
|
|
return
|
|
}
|
|
conn.Read(msg[0:])
|
|
log.Println(msg[5] == 13)
|
|
log.Println(msg[7] == 37)
|
|
}
|
|
|
|
func checkSum(msg []byte) uint16 {
|
|
sum := 0
|
|
for n := 1; n < len(msg)-1; n += 2 {
|
|
sum += int(msg[n])*256 + int(msg[n+1])
|
|
}
|
|
sum = (sum >> 16) + (sum & 0xffff)
|
|
sum += sum >> 16
|
|
return uint16(^sum)
|
|
}
|
|
|
|
func TestPatchAnnotation(t *testing.T) {
|
|
configFlags := genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag()
|
|
configFlags.KubeConfig = &clientcmd.RecommendedHomeFile
|
|
factory := cmdutil.NewFactory(cmdutil.NewMatchVersionFlags(configFlags))
|
|
do := factory.NewBuilder().
|
|
Unstructured().
|
|
NamespaceParam("default").DefaultNamespace().AllNamespaces(false).
|
|
ResourceTypeOrNameArgs(true, "deployments/reviews").
|
|
ContinueOnError().
|
|
Latest().
|
|
Flatten().
|
|
TransformRequests(func(req *rest.Request) { req.Param("includeObject", "Object") }).
|
|
Do()
|
|
err := do.Err()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
infos, err := do.Infos()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
info := infos[0]
|
|
helper := resource.NewHelper(info.Client, info.Mapping)
|
|
|
|
object, err := helper.Patch(
|
|
info.Namespace,
|
|
info.Name,
|
|
types.JSONPatchType,
|
|
[]byte(`[{"op":"replace","path":"/metadata/annotations/dev.nocalhost","value":{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{"deployment.kubernetes.io/revision":"1","dev.nocalhost/application-name":"bookinfo","dev.nocalhost/application-namespace":"default"},"labels":{"app":"reviews","app.kubernetes.io/managed-by":"nocalhost"},"name":"reviews","namespace":"default","selfLink":"/apis/apps/v1/namespaces/default/deployments/reviews"},"spec":{"progressDeadlineSeconds":600,"replicas":1,"revisionHistoryLimit":10,"selector":{"matchLabels":{"app":"reviews"}},"strategy":{"rollingUpdate":{"maxSurge":"25%","maxUnavailable":"25%"},"type":"RollingUpdate"},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"reviews"}},"spec":{"containers":[{"env":[{"name":"LOG_DIR","value":"/tmp/logs"}],"image":"nocalhost-docker.pkg.coding.net/nocalhost/bookinfo/reviews:latest","imagePullPolicy":"Always","name":"reviews","ports":[{"containerPort":9080,"protocol":"TCP"}],"readinessProbe":{"failureThreshold":3,"initialDelaySeconds":5,"periodSeconds":10,"successThreshold":1,"tcpSocket":{"port":9080},"timeoutSeconds":1},"resources":{"limits":{"cpu":"1","memory":"512Mi"},"requests":{"cpu":"10m","memory":"32Mi"}},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/tmp","name":"tmp"},{"mountPath":"/opt/ibm/wlp/output","name":"wlp-output"}]}],"dnsPolicy":"ClusterFirst","restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"terminationGracePeriodSeconds":30,"volumes":[{"emptyDir":{},"name":"wlp-output"},{"emptyDir":{},"name":"tmp"}]}}}}}]`),
|
|
&metav1.PatchOptions{})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fmt.Println(object.(*unstructured.Unstructured).GetAnnotations())
|
|
}
|
|
|
|
func TestPing(t *testing.T) {
|
|
ip := "10.233.98.197"
|
|
pinger, err := probing.NewPinger(ip)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
pinger.Count = 3
|
|
err = pinger.Run() // Blocks until finished.
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
stats := pinger.Statistics() // get send/receive/duplicate/rtt stats
|
|
fmt.Println(stats)
|
|
}
|