You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kvrocks.apache.org by tw...@apache.org on 2022/09/07 09:14:21 UTC

[incubator-kvrocks] branch unstable updated: Add go test to `x.py` and improve error in gocase (#832)

This is an automated email from the ASF dual-hosted git repository.

twice pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/incubator-kvrocks.git


The following commit(s) were added to refs/heads/unstable by this push:
     new 4792337  Add go test to `x.py` and improve error in gocase (#832)
4792337 is described below

commit 479233717ef20bd2e27c2dd04e436446583b298d
Author: Twice <tw...@gmail.com>
AuthorDate: Wed Sep 7 17:14:16 2022 +0800

    Add go test to `x.py` and improve error in gocase (#832)
---
 .github/workflows/kvrocks.yaml |  9 +++------
 tests/gocase/util/server.go    |  6 +++++-
 x.py                           | 23 +++++++++++++++++++++++
 3 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/.github/workflows/kvrocks.yaml b/.github/workflows/kvrocks.yaml
index 74f87ae..c18619f 100644
--- a/.github/workflows/kvrocks.yaml
+++ b/.github/workflows/kvrocks.yaml
@@ -166,17 +166,14 @@ jobs:
           go-version: 1.19.x
 
       - name: Run Go Integration Cases
-        working-directory: tests/gocase
         run: |
           export ${{ matrix.runtime_env_vars }}
-          export KVROCKS_BIN_PATH="$GITHUB_WORKSPACE/build/kvrocks"
-          export GO_CASE_WORKSPACE="$GITHUB_WORKSPACE/tests/gocase/workspace"
-          go test -v -bench=. ./...
-          SANITIZER_OUTPUT=$(grep "Sanitizer:" workspace -r || true)
+          ./x.py test go build
+          SANITIZER_OUTPUT=$(grep "Sanitizer:" tests/gocase/workspace -r || true)
           if [[ $SANITIZER_OUTPUT ]]; then
             echo "$SANITIZER_OUTPUT"
             echo "\ndetail reports:\n"
-            cat $(find workspace -iname stderr)
+            cat $(find tests/gocase/workspace -iname stderr)
             echo "sanitizer error was reported, exiting..."
             exit 1
           fi
diff --git a/tests/gocase/util/server.go b/tests/gocase/util/server.go
index 59d8b73..af131eb 100644
--- a/tests/gocase/util/server.go
+++ b/tests/gocase/util/server.go
@@ -59,6 +59,7 @@ func (s *KvrocksServer) Close() {
 
 func StartServer(t testing.TB, configs map[string]string) *KvrocksServer {
 	b := os.Getenv("KVROCKS_BIN_PATH")
+	require.NotEmpty(t, b, "please set the environment variable `KVROCKS_BIN_PATH`")
 	cmd := exec.Command(b)
 
 	addr, err := findFreePort()
@@ -67,7 +68,7 @@ func StartServer(t testing.TB, configs map[string]string) *KvrocksServer {
 	configs["port"] = fmt.Sprintf("%d", addr.Port)
 
 	dir := os.Getenv("GO_CASE_WORKSPACE")
-	require.NoError(t, err)
+	require.NotEmpty(t, dir, "please set the environment variable `GO_CASE_WORKSPACE`")
 	dir, err = os.MkdirTemp(dir, fmt.Sprintf("%s-%d-*", t.Name(), time.Now().UnixMilli()))
 	require.NoError(t, err)
 	configs["dir"] = dir
@@ -115,6 +116,9 @@ func findFreePort() (*net.TCPAddr, error) {
 		return nil, err
 	}
 	lis, err := net.ListenTCP("tcp", addr)
+	if err != nil {
+		return nil, err
+	}
 	defer func() { _ = lis.Close() }()
 	return lis.Addr().(*net.TCPAddr), nil
 }
diff --git a/x.py b/x.py
index 4e84a8c..d272818 100755
--- a/x.py
+++ b/x.py
@@ -20,6 +20,7 @@
 from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, REMAINDER
 from glob import glob
 from os import makedirs
+import os
 from pathlib import Path
 import re
 from subprocess import Popen, PIPE
@@ -222,6 +223,19 @@ def test_tcl(dir: str, rest: List[str]) -> None:
         cwd=str(tcldir), verbose=True
     )
 
+def test_go(dir: str, rest: List[str]) -> None:
+    go = find_command('go', msg='go is required for testing')
+
+    godir = Path(__file__).parent.absolute() / 'tests' / 'gocase'
+    goenv = {
+        'KVROCKS_BIN_PATH': str(Path(dir).absolute() / 'kvrocks'),
+        'GO_CASE_WORKSPACE': str(godir / 'workspace'),
+    }
+    goenv = {**os.environ, **goenv}
+    run(go, 'test', '-v', '-bench=.', './...', *rest,
+        env=goenv, cwd=str(godir), verbose=True
+    )
+
 if __name__ == '__main__':
     parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
     parser.set_defaults(func=parser.print_help)
@@ -306,6 +320,15 @@ if __name__ == '__main__':
     parser_test_tcl.add_argument('rest', nargs=REMAINDER, help="the rest of arguments to forward to TCL scripts")
     parser_test_tcl.set_defaults(func=test_tcl)
 
+    parser_test_go = parser_test_subparsers.add_parser(
+        'go',
+        description="Test kvrocks via go test cases",
+        help="Test kvrocks via go test cases",
+    )
+    parser_test_go.add_argument('dir', metavar='BUILD_DIR', nargs='?', default='build', help="directory including kvrocks build files")
+    parser_test_go.add_argument('rest', nargs=REMAINDER, help="the rest of arguments to forward to go test")
+    parser_test_go.set_defaults(func=test_go)
+
     args = parser.parse_args()
 
     arg_dict = dict(vars(args))