diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000..86b1edc1 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,79 @@ +name: Coverage + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + macos: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: '1.20' + check-latest: true + - name: Set up Docker + uses: crazy-max/ghaction-setup-docker@v3 + + - name: Install minikube + run: | + set -x + docker version + brew install minikube + minikube start --driver=docker + kubectl get pod -A -o wide + minikube kubectl -- get pod -A -o wide + + - name: Kubernetes info + run: | + kubectl cluster-info + cat ~/.kube/config + kubectl get pods -n kube-system -o wide + + - name: Install demo bookinfo + run: | + minikube image load --remote istio/examples-bookinfo-details-v1:1.16.2 + minikube image load --remote istio/examples-bookinfo-ratings-v1:1.16.2 + minikube image load --remote istio/examples-bookinfo-reviews-v1:1.16.2 + minikube image load --remote istio/examples-bookinfo-productpage-v1:1.16.2 + minikube image load --remote naison/authors:latest + minikube image load --remote nginx:latest + minikube image load --remote naison/kubevpn:test + minikube image ls + eval $(minikube docker-env) + kubectl apply -f https://raw.githubusercontent.com/kubenetworks/kubevpn/master/samples/bookinfo.yaml + + - name: Build + run: | + export VERSION=test + make kubevpn-darwin-amd64 + chmod +x ./bin/kubevpn + cp ./bin/kubevpn /usr/local/bin/kubevpn + kubevpn version + + - name: Wait for pods reviews to be ready + run: | + kubectl wait pods -l app=reviews --for=condition=Ready --timeout=3600s + kubectl wait pods -l app=productpage --for=condition=Ready --timeout=3600s + kubectl get svc -A -o wide || true + kubectl get pod -A -o wide || true + kubectl get all -o wide || true + kubectl get nodes -o yaml || true + ifconfig + netstat -anr + + - name: Test + run: make ut + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@0cfda1dd0a4ad9efc75517f399d859cd1ea4ced1 # v4.0.2 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + with: + verbose: true + slug: wencaiwulue/kubevpn \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f59dbcf1..32095c98 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -79,7 +79,7 @@ jobs: sudo ln /usr/bin/resolvectl /usr/bin/systemd-resolve - name: Test - run: go test -v -failfast ./... -timeout=60m + run: make ut macos: runs-on: macos-latest @@ -143,7 +143,7 @@ jobs: netstat -anr - name: Test - run: go test -v -failfast ./... -timeout=60m + run: make ut windows: runs-on: windows-latest @@ -166,14 +166,4 @@ jobs: choco install make - name: Build - run: make kubevpn-windows-amd64 - - upload-coverage-reports-to-codecov: - runs-on: ubuntu-latest - if: ${{ always() }} - needs: [ "linux", "macos", "windows" ] - steps: - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v3 - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file + run: make kubevpn-windows-amd64 \ No newline at end of file diff --git a/Makefile b/Makefile index 9aacc260..c44266af 100644 --- a/Makefile +++ b/Makefile @@ -102,3 +102,11 @@ version: .PHONY: gen gen: go generate ./... + +.PHONY: ut +ut: + go test -coverprofile=coverage.txt -coverpkg=./... -v ./... -timeout=60m + +.PHONY: cover +cover: ut + go tool cover -html=coverage.txt \ No newline at end of file diff --git a/pkg/daemon/unix_socket_test.go b/pkg/daemon/unix_socket_test.go index 0ae65ab5..0a6bfdfa 100644 --- a/pkg/daemon/unix_socket_test.go +++ b/pkg/daemon/unix_socket_test.go @@ -7,7 +7,6 @@ import ( "net" "net/http" "os" - "path/filepath" "testing" "time" @@ -16,7 +15,11 @@ import ( ) func TestHttpOverUnix(t *testing.T) { - file := filepath.Join(os.TempDir(), "kubevpn.socks") + temp, err2 := os.CreateTemp("", "kubevpn.socks") + if err2 != nil { + t.Fatal(err2) + } + os.Remove(temp.Name()) client := http.Client{ Transport: &http.Transport{ Proxy: http.ProxyFromEnvironment, @@ -25,13 +28,13 @@ func TestHttpOverUnix(t *testing.T) { var d net.Dialer d.Timeout = 30 * time.Second d.KeepAlive = 30 * time.Second - return d.DialContext(ctx, "unix", file) + return d.DialContext(ctx, "unix", temp.Name()) }, }, } go func() { - listener, err := net.Listen("unix", file) + listener, err := net.Listen("unix", temp.Name()) if err != nil { t.Fatal(err) }