From 777f88336442c887552fb3353db93a5ed5b4ff74 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Fri, 19 Oct 2018 22:16:11 +0200 Subject: [PATCH 01/16] Fix tests Change-Id: I9b8dbe26bfe6d1d32cbce09a89b7d0f47d7ef4b5 Signed-off-by: Sebastien Douheret --- .vscode/launch.json | 1 + Makefile | 3 +- test/exec_test.go | 45 +++++++++++++-------- test/fixtures/helloworld/helloworld/CMakeLists.txt | 6 +-- ...4-gcc_crosssdk-native_x86_64-toolchain-1.0.2.sh | Bin 2002 -> 2074 bytes test/main_test.go | 17 ++++---- 6 files changed, 44 insertions(+), 28 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index c12c80c..a5b082c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -24,6 +24,7 @@ "program": "${workspaceRoot}/test", "env": { "GOPATH": "${workspaceRoot}/../../../../../..:${env:GOPATH}", + "VERBOSE": 1, }, "args": ["-test.v", "-test.run", ".*"], "showLog": false diff --git a/Makefile b/Makefile index 64ba5a3..f0ae0b3 100644 --- a/Makefile +++ b/Makefile @@ -232,8 +232,9 @@ checkgover: .PHONY: help help: @echo "Main supported rules:" - @echo " all (default)" + @echo " all (default)" @echo " build" + @echo " test (use: name=TestExec to run a specific test)" @echo " package" @echo " install" @echo " clean" diff --git a/test/exec_test.go b/test/exec_test.go index 884ba87..f4d1ac4 100644 --- a/test/exec_test.go +++ b/test/exec_test.go @@ -38,7 +38,9 @@ func InitExec(t *testing.T) string { /*clone submodules app templates into helloworld*/ subHelloworldAppTemplateDir := path.Join(helloworldDir, "conf.d", "app-templates") - cmd = exec.Command("git", "clone", "https://gerrit.automotivelinux.org/gerrit/p/apps/app-templates.git", subHelloworldAppTemplateDir) + cmd = exec.Command("git", "clone", "-b", "flounder", + "https://gerrit.automotivelinux.org/gerrit/p/apps/app-templates.git", + subHelloworldAppTemplateDir) assert.Nil(t, cmd.Run()) return helloworldDir } @@ -75,21 +77,35 @@ func TestExec(t *testing.T) { assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) assert.NotNil(t, cfg) - /*channel for ExecOutMsg*/ + /*channel for ExecExitMsg*/ chExec := make(chan xsapiv1.ExecExitMsg) defer close(chExec) - /*connect to ExecOutEvent*/ sCli.Conn.On(xsapiv1.ExecExitEvent, func(ev xsapiv1.ExecExitMsg) { chExec <- ev }) + /*Collect commands output in */ + cmdOut := "" + sCli.Conn.On(xsapiv1.ExecOutEvent, func(ev xsapiv1.ExecOutMsg) { + cmdOut += ev.Stdout + ev.Stderr + }) + + /*basic check: verify that environment is set correctly (use the right sdk)*/ + var execRes xsapiv1.ExecArgs + cmd := "pwd && echo \"SDKTARGETSYSROOT=<$SDKTARGETSYSROOT>\"" + exec := xsapiv1.ExecArgs{ + ID: cfg.ID, + Cmd: cmd, + SdkID: sdkRes.ID, + } + Debugf(t, "exec cmake cmd(%v)", cmd) + cmdOut = "" + assert.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) + exitMsg := <-chExec + assert.Equal(t, exitMsg.Code, 0) + /*cmake helloworld project with fake sdk*/ - sdkSourceFile := path.Join(sdkRes.Path, "environment-setup-corei7-64-native-linux") - cmd := "source " + sdkSourceFile - cmd = cmd + " && " - cmd = cmd + "unset SDKTARGETSYSROOT" - cmd = cmd + " && " - cmd = cmd + "cd " + fPrj.ClientPath + cmd = "cd " + fPrj.ClientPath cmd = cmd + " && " cmd = cmd + "mkdir -p build" cmd = cmd + " && " @@ -98,22 +114,17 @@ func TestExec(t *testing.T) { cmd = cmd + "cmake .." /*post exec cmd cmake*/ - exec := xsapiv1.ExecArgs{ + exec = xsapiv1.ExecArgs{ ID: cfg.ID, Cmd: cmd, } - var execRes xsapiv1.ExecArgs Debugf(t, "exec cmake cmd(%v)", cmd) assert.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) - exitMsg := <-chExec + exitMsg = <-chExec assert.Equal(t, exitMsg.Code, 0) /*make helloworld project with fake sdk*/ - cmd = "source " + sdkSourceFile - cmd = cmd + " && " - cmd = cmd + "unset SDKTARGETSYSROOT" - cmd = cmd + " && " - cmd = cmd + "cd " + fPrj.ClientPath + cmd = "cd " + fPrj.ClientPath cmd = cmd + "&&" cmd = cmd + "cd build" cmd = cmd + "&&" diff --git a/test/fixtures/helloworld/helloworld/CMakeLists.txt b/test/fixtures/helloworld/helloworld/CMakeLists.txt index 373a6f5..d8a5b26 100644 --- a/test/fixtures/helloworld/helloworld/CMakeLists.txt +++ b/test/fixtures/helloworld/helloworld/CMakeLists.txt @@ -25,12 +25,12 @@ PROJECT_TARGET_ADD(helloworld) # Binder exposes a unique public entry point SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES - PREFIX "" + PREFIX "" LABELS "BINDING" - LINK_FLAGS ${BINDINGS_LINK_FLAG} + LINK_FLAGS ${BINDINGS_LINK_FLAG} OUTPUT_NAME ${TARGET_NAME} ) TARGET_LINK_LIBRARIES(${TARGET_NAME} - ${link_libraries} + ${link_libraries} ) diff --git a/test/fixtures/poky-agl-glibc-x86_64-gcc_crosssdk-native_x86_64-toolchain-1.0.2.sh b/test/fixtures/poky-agl-glibc-x86_64-gcc_crosssdk-native_x86_64-toolchain-1.0.2.sh index 7781335862ddcdcaddac2471511e0050b1157038..d5949a978a582995ddf5e32ec466eabe50b90134 100755 GIT binary patch delta 94 zcmcb_KTBXkFnf@GYDuzwQ9-W0LQRcAYDH#=f+1IGaz?&_QgVJ#YNolanTc**Vo7FM qs*-}8f=YF;i+6})kh^P0aAa_hzkf(A+<=0d#FDi9qTI=`?4 Date: Sun, 21 Oct 2018 21:59:12 +0200 Subject: [PATCH 02/16] Rework zip package versioning In order to always have a number that's incrementing, use git commits number for last detected tag. Also update command used to extract version from tag in order to bypass problem describe in issue SPEC-1782. Change-Id: I923ff924ae79593612b39c917e9f52d1a4875276 Signed-off-by: Sebastien Douheret --- Makefile | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index f0ae0b3..a91af3f 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,7 @@ SYNCTHING_INOTIFY_VERSION = 0.8.7 # Retrieve git tag/commit to set version & sub-version strings -GIT_DESC := $(shell git describe --always --tags) +GIT_DESC := $(shell git describe --always --tags --match "[0-9]*") VERSION := $(firstword $(subst -, ,$(GIT_DESC))) ifeq (-,$(findstring -,$(GIT_DESC))) SUB_VERSION := $(subst $(VERSION)-,,$(GIT_DESC)) @@ -100,16 +100,15 @@ else WEBAPP_BUILD_RULE=build:prod endif -ifeq ($(SUB_VERSION), ) - PACKAGE_ZIPFILE := $(TARGET)_$(ARCH)-$(VERSION).zip +# Build Package name (model: _-..zip) +ifeq (-g,$(findstring -g,$(GIT_DESC))) + NB_COMMIT=$(firstword $(subst -, ,$(SUB_VERSION))) else - # only use dot as separator to allow rpm packaging (see version .spec file) - PK_VER := $(subst _,.,$(subst -,,$(VERSION))) - PK_SBVER := $(subst _,.,$(subst -,,$(SUB_VERSION))) - PACKAGE_ZIPFILE := $(TARGET)_$(ARCH)-$(PK_VER).$(PK_SBVER).zip + NB_COMMIT=0 endif +PACKAGE_ZIPFILE := $(TARGET)_$(ARCH)-$(VERSION).$(NB_COMMIT).zip - +.PHONY: all all: tools/syncthing build .PHONY: build -- 2.16.6 From b33e880f23525b4f75cf35e39aa5082addef0fb7 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Mon, 22 Oct 2018 17:22:21 +0200 Subject: [PATCH 03/16] Added support of new image_url field Since commit ecef0475a0a9d51, url to download AGL image matching a SDK has been introduced in SDK definition file. This commit adds ImageURL field (json:image_url) in return json object of GET /sdks Change-Id: If52c39292ac3d5e44c4f61b8b51c48d9661beb2d Signed-off-by: Sebastien Douheret --- lib/xsapiv1/sdks.go | 1 + scripts/sdks/README.md | 2 ++ scripts/sdks/agl/db-dump | 1 + scripts/sdks/agl/get-sdk-info | 24 +++++++++++++++++++++++- 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/xsapiv1/sdks.go b/lib/xsapiv1/sdks.go index 54b941b..d91d335 100644 --- a/lib/xsapiv1/sdks.go +++ b/lib/xsapiv1/sdks.go @@ -37,6 +37,7 @@ type SDK struct { Arch string `json:"arch"` Path string `json:"path"` URL string `json:"url"` + ImageURL string `json:"image_url"` Status string `json:"status"` Date string `json:"date"` Size string `json:"size"` diff --git a/scripts/sdks/README.md b/scripts/sdks/README.md index c887293..0b11b5f 100644 --- a/scripts/sdks/README.md +++ b/scripts/sdks/README.md @@ -42,6 +42,7 @@ Returned the list all SDKs (available and installed) using JSON format. "arch": "architecture", "path": "path where sdk installed locally", "url": "https://website.url.to.download.sdk", + "image_url": "https://website.url.to.download.image", "status": "Not Installed | Installed", "date": "2017-12-25 00:00", "size": "123 MB", @@ -110,6 +111,7 @@ returned the following JSON structure: "arch": "architecture", "path": "", "url": "https://website.url.to.download.sdk", + "image_url": "https://website.url.to.download.image", "status": "Not Installed", "date": "2017-12-25 00:00", "size": "123 MB", diff --git a/scripts/sdks/agl/db-dump b/scripts/sdks/agl/db-dump index d375177..fecdcd3 100755 --- a/scripts/sdks/agl/db-dump +++ b/scripts/sdks/agl/db-dump @@ -184,6 +184,7 @@ for one_sdk in INSTALLED_SDK: 'arch': ARCH, 'path': DIR, 'url': '', + 'image_url': '', 'status': 'Installed', 'date': SDK_DATE, 'size': '', diff --git a/scripts/sdks/agl/get-sdk-info b/scripts/sdks/agl/get-sdk-info index 485d5fe..12892ac 100755 --- a/scripts/sdks/agl/get-sdk-info +++ b/scripts/sdks/agl/get-sdk-info @@ -89,6 +89,7 @@ if [ "${SDK_FILE}" != "" ]; then filename=$(basename "${SDK_FILE}") sdkUrl=file://${SDK_FILE} + imageUrl="" sdkDate=$(stat -c %y "${SDK_FILE}") sdkSize=$(/bin/ls -sh "${SDK_FILE}" |cut -d' ' -f1) @@ -96,6 +97,7 @@ elif [ "${URL}" != "" ]; then filename=$(basename "${URL}") sdkUrl=${URL} + imageUrl="" sdkDate="" sdkSize="" @@ -124,6 +126,8 @@ installPath=${SDK_ROOT_DIR}/${profile}/${version}/${arch} [ "${version}" = "" ] && { echo "version not set"; exit 8; } [ "${arch}" = "" ] && { echo " arch not set"; exit 9; } +sdkName=${profile}_${arch}_${version} + # Define a unique ID to be able to distinguish for example corei7-64 from qemux86-64 if [ "${UUID}" = "" ]; then curInstDir=$(ls -d "${installPath}/*" 2> /dev/null) @@ -146,9 +150,26 @@ if [ -d "${installPath}" ]; then [ "${envFile}" != "" ] && status="Installed" fi +sdkDef="" +if [ "${UUID}" != "" ]; then + sdkDef=$($(dirname "$0")/db-dump | jq '.[] | select(.uuid=="'${UUID}'")') +elif [ "${URL}" != "" ]; then + sdkDef=$($(dirname "$0")/db-dump | jq '.[] | select(.url=="'${URL}'")') +fi + +if [ "${sdkDef}" != "" ]; then + sdkName=$(echo "$sdkDef" | jq -r .name) + [ "$UUID" = "" ] && UUID=$(echo "$sdkDef" | jq -r .uuid) + [ "$sdkUrl" = "" ] && sdkUrl=$(echo "$sdkDef" | jq -r .url) + [ "$imageUrl" = "" ] && imageUrl=$(echo "$sdkDef" | jq -r .image_url) + [ "$sdkDate" = "" ] && sdkDate=$(echo "$sdkDef" | jq -r .date) + [ "$sdkSize" = "" ] && sdkSize=$(echo "$sdkDef" | jq -r .size) + [ "$MD5VAL" = "" ] && MD5VAL=$(echo "$sdkDef" | jq -r .md5sum) +fi + read -r -d '' res <<- EndOfMessage { - "name": "${profile}_${arch}_${version}", + "name": "${sdkName}", "uuid": "${UUID}", "description": "AGL SDK ${arch} (version ${version})", "profile": "${profile}", @@ -156,6 +177,7 @@ read -r -d '' res <<- EndOfMessage "arch": "${arch}", "path": "${installPath}", "url": "${sdkUrl}", + "image_url": "${imageUrl}", "status": "${status}", "date": "${sdkDate}", "size": "${sdkSize}", -- 2.16.6 From 2076b45c1905265b9edae342f8e4f7a3366966cc Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Tue, 23 Oct 2018 20:45:35 +0200 Subject: [PATCH 04/16] packaging: add dependency to jq Change-Id: Ib306a87e03ad34e6cda921134ce7cc35644c1218 Signed-off-by: Sebastien Douheret --- conf.d/packaging/deb/agl-xds-server.dsc | 1 + conf.d/packaging/deb/debian.control | 1 + conf.d/packaging/rpm/agl-xds-server.spec | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/conf.d/packaging/deb/agl-xds-server.dsc b/conf.d/packaging/deb/agl-xds-server.dsc index bc254a2..b3c31ab 100644 --- a/conf.d/packaging/deb/agl-xds-server.dsc +++ b/conf.d/packaging/deb/agl-xds-server.dsc @@ -6,6 +6,7 @@ Version: 0.0.0 Maintainer: Sebastien Douheret Standards-Version: 3.8.2 Homepage: https://gerrit.automotivelinux.org/gerrit/p/src/xds/xds-server.git +Depends: jq Build-Depends: debhelper (>= 5), unzip Debtransform-Tar: xds-server_linux-amd64-*.zip diff --git a/conf.d/packaging/deb/debian.control b/conf.d/packaging/deb/debian.control index f2dcafe..47b9363 100644 --- a/conf.d/packaging/deb/debian.control +++ b/conf.d/packaging/deb/debian.control @@ -9,5 +9,6 @@ Homepage: https://gerrit.automotivelinux.org/gerrit/p/src/xds/xds-server.git Package: agl-xds-server Section: libs Architecture: any +Depends: jq Description: agl-xds-server diff --git a/conf.d/packaging/rpm/agl-xds-server.spec b/conf.d/packaging/rpm/agl-xds-server.spec index b834822..25a6515 100644 --- a/conf.d/packaging/rpm/agl-xds-server.spec +++ b/conf.d/packaging/rpm/agl-xds-server.spec @@ -18,7 +18,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build Group: Development/Tools/Debuggers # for now still embedded with xds -# Requires: syncthing +# Requires: jq syncthing +Requires: jq %description xds-server is a web server that allows user to remotely cross build applications. -- 2.16.6 From 3e3222406a6f015a9fee3720e8ba76ecf58b087f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Cl=C3=A9ment=20B=C3=A9nier?= Date: Tue, 23 Oct 2018 15:07:59 +0200 Subject: [PATCH 05/16] testExec: error exec with a fakeid MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit add an assert when exec with a fakeid Change-Id: I56b9e3372c31f7941e705a40d40d72a1b31ca679 Signed-off-by: Clément Bénier --- test/exec_test.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/exec_test.go b/test/exec_test.go index f4d1ac4..39f00c6 100644 --- a/test/exec_test.go +++ b/test/exec_test.go @@ -89,11 +89,21 @@ func TestExec(t *testing.T) { sCli.Conn.On(xsapiv1.ExecOutEvent, func(ev xsapiv1.ExecOutMsg) { cmdOut += ev.Stdout + ev.Stderr }) - - /*basic check: verify that environment is set correctly (use the right sdk)*/ + /*error when exec with fakeid*/ var execRes xsapiv1.ExecArgs cmd := "pwd && echo \"SDKTARGETSYSROOT=<$SDKTARGETSYSROOT>\"" exec := xsapiv1.ExecArgs{ + ID: cfg.ID, + Cmd: cmd, + SdkID: "11111-invalid", + } + Debugf(t, "exec cmake cmd(%v)", cmd) + cmdOut = "" + assert.NotNil(t, HTTPCli.Post("/exec", exec, &execRes)) + + /*basic check: verify that environment is set correctly (use the right sdk)*/ + cmd = "pwd && echo \"SDKTARGETSYSROOT=<$SDKTARGETSYSROOT>\"" + exec = xsapiv1.ExecArgs{ ID: cfg.ID, Cmd: cmd, SdkID: sdkRes.ID, -- 2.16.6 From a740425411f120ff7263f16f268e7efd7c19b311 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Cl=C3=A9ment=20B=C3=A9nier?= Date: Tue, 23 Oct 2018 15:09:06 +0200 Subject: [PATCH 06/16] testify: assert replace by require MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit require handles tests to be aborted during an assertion contrary to assert Change-Id: I3062046515c74509ae7ea1b24b7242a42d0191c1 Signed-off-by: Clément Bénier --- test/config_test.go | 12 ++--- test/exec_test.go | 32 ++++++------- test/folders_test.go | 94 ++++++++++++++++++------------------- test/sdks_test.go | 62 ++++++++++++------------- test/target_test.go | 128 +++++++++++++++++++++++++-------------------------- test/version_test.go | 8 ++-- 6 files changed, 168 insertions(+), 168 deletions(-) diff --git a/test/config_test.go b/test/config_test.go index 2b95e85..1b3120f 100644 --- a/test/config_test.go +++ b/test/config_test.go @@ -23,7 +23,7 @@ import ( "testing" "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func CheckIP(ipconfig string) bool { @@ -41,13 +41,13 @@ func CheckIP(ipconfig string) bool { func TestConfig(t *testing.T) { var cfg xsapiv1.APIConfig - assert.Nil(t, HTTPCli.Get("/config", &cfg)) + require.Nil(t, HTTPCli.Get("/config", &cfg)) Debugf(t, "Config is %v", cfg) re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$") - assert.True(t, re.MatchString(cfg.ServerUID)) //ID + require.True(t, re.MatchString(cfg.ServerUID)) //ID pathMap, present := cfg.SupportedSharing["PathMap"] - assert.True(t, present) - assert.True(t, pathMap) - assert.True(t, CheckIP(cfg.Builder.IP)) + require.True(t, present) + require.True(t, pathMap) + require.True(t, CheckIP(cfg.Builder.IP)) } diff --git a/test/exec_test.go b/test/exec_test.go index 39f00c6..6ffc350 100644 --- a/test/exec_test.go +++ b/test/exec_test.go @@ -24,7 +24,7 @@ import ( "testing" "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func InitExec(t *testing.T) string { @@ -34,14 +34,14 @@ func InitExec(t *testing.T) string { cmd := exec.Command("cp", "-r", helloworldFixturesDir, helloworldDir) var out bytes.Buffer cmd.Stdout = &out - assert.Nil(t, cmd.Run()) + require.Nil(t, cmd.Run()) /*clone submodules app templates into helloworld*/ subHelloworldAppTemplateDir := path.Join(helloworldDir, "conf.d", "app-templates") cmd = exec.Command("git", "clone", "-b", "flounder", "https://gerrit.automotivelinux.org/gerrit/p/apps/app-templates.git", subHelloworldAppTemplateDir) - assert.Nil(t, cmd.Run()) + require.Nil(t, cmd.Run()) return helloworldDir } @@ -60,8 +60,8 @@ func TestExec(t *testing.T) { /*check there is no project*/ var cfgArray []xsapiv1.FolderConfig - assert.Nil(t, HTTPCli.Get("/folders", &cfgArray)) - assert.Equal(t, len(cfgArray), 0) + require.Nil(t, HTTPCli.Get("/folders", &cfgArray)) + require.Equal(t, len(cfgArray), 0) fPrj := xsapiv1.FolderConfig{ Label: "testproject", @@ -74,8 +74,8 @@ func TestExec(t *testing.T) { } /*create project*/ var cfg xsapiv1.FolderConfig - assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) - assert.NotNil(t, cfg) + require.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.NotNil(t, cfg) /*channel for ExecExitMsg*/ chExec := make(chan xsapiv1.ExecExitMsg) @@ -99,7 +99,7 @@ func TestExec(t *testing.T) { } Debugf(t, "exec cmake cmd(%v)", cmd) cmdOut = "" - assert.NotNil(t, HTTPCli.Post("/exec", exec, &execRes)) + require.NotNil(t, HTTPCli.Post("/exec", exec, &execRes)) /*basic check: verify that environment is set correctly (use the right sdk)*/ cmd = "pwd && echo \"SDKTARGETSYSROOT=<$SDKTARGETSYSROOT>\"" @@ -110,9 +110,9 @@ func TestExec(t *testing.T) { } Debugf(t, "exec cmake cmd(%v)", cmd) cmdOut = "" - assert.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) + require.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) exitMsg := <-chExec - assert.Equal(t, exitMsg.Code, 0) + require.Equal(t, exitMsg.Code, 0) /*cmake helloworld project with fake sdk*/ cmd = "cd " + fPrj.ClientPath @@ -129,9 +129,9 @@ func TestExec(t *testing.T) { Cmd: cmd, } Debugf(t, "exec cmake cmd(%v)", cmd) - assert.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) + require.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) exitMsg = <-chExec - assert.Equal(t, exitMsg.Code, 0) + require.Equal(t, exitMsg.Code, 0) /*make helloworld project with fake sdk*/ cmd = "cd " + fPrj.ClientPath @@ -142,17 +142,17 @@ func TestExec(t *testing.T) { exec.Cmd = cmd /*post exec cmd make*/ Debugf(t, "exec make cmd(%v)", cmd) - assert.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) + require.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) exitMsg = <-chExec - assert.Equal(t, exitMsg.Code, 0) + require.Equal(t, exitMsg.Code, 0) /*check if helloworld.so exists*/ Debug(t, "check that helloworld.so exists") _, err := os.Stat(path.Join(fPrj.ClientPath, "build/helloworld/helloworld.so")) - assert.Nil(t, err) + require.Nil(t, err) /*deinit*/ - assert.Nil(t, HTTPCli.Delete("/folders/"+cfg.ID, &cfg)) + require.Nil(t, HTTPCli.Delete("/folders/"+cfg.ID, &cfg)) RemoveSdk(t, sdkRes, chSdks) DisconnectSDKStateChange(t, sCli) } diff --git a/test/folders_test.go b/test/folders_test.go index 10f1dc6..eb74f7d 100644 --- a/test/folders_test.go +++ b/test/folders_test.go @@ -23,15 +23,15 @@ import ( "testing" "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestFolders(t *testing.T) { /*init: check there is no folder*/ Debug(t, "check there is no folder") var cfgArray []xsapiv1.FolderConfig - assert.Nil(t, HTTPCli.Get("/folders", &cfgArray)) - assert.Equal(t, len(cfgArray), 0) + require.Nil(t, HTTPCli.Get("/folders", &cfgArray)) + require.Equal(t, len(cfgArray), 0) fPrj := xsapiv1.FolderConfig{ Label: "testproject", @@ -44,56 +44,56 @@ func TestFolders(t *testing.T) { } var cfg xsapiv1.FolderConfig Debugf(t, "create folder: \n%v", fPrj) - assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) - assert.NotNil(t, cfg) + require.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.NotNil(t, cfg) Debugf(t, "result folder: \n%v", cfg) isCfgPrjMatch := func(fPrj xsapiv1.FolderConfig, cfg xsapiv1.FolderConfig) { re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$") - assert.True(t, re.MatchString(cfg.ID)) //ID - assert.Equal(t, cfg.Label, fPrj.Label) //Label - assert.Equal(t, cfg.ClientPath, fPrj.ClientPath) - assert.Equal(t, cfg.Type, fPrj.Type) - assert.Equal(t, cfg.Status, "Enable") - assert.Equal(t, cfg.IsInSync, true) - assert.Equal(t, len(cfg.DefaultSdk), 0) - assert.Equal(t, fPrj.ClientData, cfg.ClientData) - assert.Equal(t, fPrj.DataPathMap.ServerPath, cfg.DataPathMap.ServerPath) + require.True(t, re.MatchString(cfg.ID)) //ID + require.Equal(t, cfg.Label, fPrj.Label) //Label + require.Equal(t, cfg.ClientPath, fPrj.ClientPath) + require.Equal(t, cfg.Type, fPrj.Type) + require.Equal(t, cfg.Status, "Enable") + require.Equal(t, cfg.IsInSync, true) + require.Equal(t, len(cfg.DefaultSdk), 0) + require.Equal(t, fPrj.ClientData, cfg.ClientData) + require.Equal(t, fPrj.DataPathMap.ServerPath, cfg.DataPathMap.ServerPath) } isCfgPrjMatch(fPrj, cfg) var cfg2 xsapiv1.FolderConfig - assert.Nil(t, HTTPCli.Get("/folders/"+cfg.ID, &cfg2)) + require.Nil(t, HTTPCli.Get("/folders/"+cfg.ID, &cfg2)) isCfgPrjMatch(fPrj, cfg2) - assert.Nil(t, HTTPCli.Get("/folders", &cfgArray)) - assert.Equal(t, len(cfgArray), 1) + require.Nil(t, HTTPCli.Get("/folders", &cfgArray)) + require.Equal(t, len(cfgArray), 1) //call with the same uid create error - assert.NotNil(t, HTTPCli.Post("/folders", cfg, &cfg)) + require.NotNil(t, HTTPCli.Post("/folders", cfg, &cfg)) /*create/delete folders*/ var cfgArrayBis []xsapiv1.FolderConfig - assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) Debugf(t, "create folder with id=%v", cfg.ID) - assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) Debugf(t, "create folder with id=%v", cfg.ID) - assert.Nil(t, HTTPCli.Get("/folders", &cfgArray)) - assert.Equal(t, len(cfgArray), 3) - assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[1].ID, &cfg)) + require.Nil(t, HTTPCli.Get("/folders", &cfgArray)) + require.Equal(t, len(cfgArray), 3) + require.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[1].ID, &cfg)) Debugf(t, "delete folder with id=%v", cfg.ID) - assert.Equal(t, cfg, cfgArray[1]) - assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis)) - assert.Equal(t, len(cfgArrayBis), 2) - assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[0].ID, &cfg)) + require.Equal(t, cfg, cfgArray[1]) + require.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis)) + require.Equal(t, len(cfgArrayBis), 2) + require.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[0].ID, &cfg)) Debugf(t, "delete folder with id=%v", cfg.ID) - assert.Equal(t, cfg, cfgArray[0]) - assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis)) - assert.Equal(t, len(cfgArrayBis), 1) - assert.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[2].ID, &cfg)) + require.Equal(t, cfg, cfgArray[0]) + require.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis)) + require.Equal(t, len(cfgArrayBis), 1) + require.Nil(t, HTTPCli.Delete("/folders/"+cfgArray[2].ID, &cfg)) Debugf(t, "delete folder with id=%v", cfg.ID) - assert.Equal(t, cfg, cfgArray[2]) - assert.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis)) - assert.Equal(t, len(cfgArrayBis), 0) + require.Equal(t, cfg, cfgArray[2]) + require.Nil(t, HTTPCli.Get("/folders", &cfgArrayBis)) + require.Equal(t, len(cfgArrayBis), 0) } func TestFoldersEmptyValues(t *testing.T) { @@ -108,24 +108,24 @@ func TestFoldersEmptyValues(t *testing.T) { } var cfg xsapiv1.FolderConfig /*ServerPath is empty*/ - assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) Debugf(t, "error while creating folder with empty serverpath \n%v", fPrj) fPrj.DataPathMap.ServerPath = logDir + "sameserverpath" fPrj.ClientPath = "" /*ClientPath is Empty*/ - assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) Debugf(t, "error while creating folder with empty clientpath \n%v", fPrj) fPrj.ClientPath = "logDir" fPrj.Type = "" /*Type is empty*/ - assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) Debugf(t, "error while creating folder with empty type \n%v", fPrj) var cfgArray []xsapiv1.FolderConfig - assert.Nil(t, HTTPCli.Get("/folders", &cfgArray)) - assert.Equal(t, len(cfgArray), 0) + require.Nil(t, HTTPCli.Get("/folders", &cfgArray)) + require.Equal(t, len(cfgArray), 0) } func TestFoldersPathMapConfig(t *testing.T) { @@ -141,7 +141,7 @@ func TestFoldersPathMapConfig(t *testing.T) { } var cfg xsapiv1.FolderConfig /*file not present*/ - assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) Debugf(t, "error while creating folder with no checkfile \n%v", fPrj) var checkFileClient = fPrj.ClientPath + "/checkfile" @@ -159,29 +159,29 @@ func TestFoldersPathMapConfig(t *testing.T) { Debug(t, err) } /*file content differ*/ - assert.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.NotNil(t, HTTPCli.Post("/folders", fPrj, &cfg)) Debugf(t, "error while creating folder with different checkfiles \n%v", fPrj) /*write same message*/ if _, err := file.WriteString(fPrj.DataPathMap.CheckContent); err != nil { Debug(t, err) } - assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + require.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) Debugf(t, "create folder with same checkfiles \n%v", fPrj) /*check server msg: ServerUID needed*/ Debugf(t, "check server msg") var APIcfg xsapiv1.APIConfig - assert.Nil(t, HTTPCli.Get("/config", &APIcfg)) + require.Nil(t, HTTPCli.Get("/config", &APIcfg)) msg := "Pathmap checked message written by xds-server ID: " + APIcfg.ServerUID + "\n" data, err := ioutil.ReadAll(file) if err != nil { Debug(t, err) } - assert.Equal(t, msg, string(data)) + require.Equal(t, msg, string(data)) - assert.Nil(t, HTTPCli.Delete("/folders/"+cfg.ID, &cfg)) + require.Nil(t, HTTPCli.Delete("/folders/"+cfg.ID, &cfg)) var cfgArray []xsapiv1.FolderConfig - assert.Nil(t, HTTPCli.Get("/folders", &cfgArray)) - assert.Equal(t, len(cfgArray), 0) + require.Nil(t, HTTPCli.Get("/folders", &cfgArray)) + require.Equal(t, len(cfgArray), 0) } diff --git a/test/sdks_test.go b/test/sdks_test.go index 1395b16..15f78a3 100644 --- a/test/sdks_test.go +++ b/test/sdks_test.go @@ -26,7 +26,7 @@ import ( "time" "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) var cpt int @@ -51,12 +51,12 @@ func ConnectSDKStateChange(t *testing.T, sCli *IOSockClient, channel chan xsapiv }) args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTSDKStateChange} - assert.Nil(t, HTTPCli.Post("/events/register", args, nil)) + require.Nil(t, HTTPCli.Post("/events/register", args, nil)) } func DisconnectSDKStateChange(t *testing.T, sCli *IOSockClient) { args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTSDKStateChange} - assert.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) + require.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) } func InitSdkDir() { @@ -74,12 +74,12 @@ func InitSdkDir() { func RemoveSdk(t *testing.T, sdk xsapiv1.SDK, chSdks chan xsapiv1.SDK) { Debugf(t, "remove sdk %v", sdk.ID) - assert.Nil(t, HTTPCli.Delete("/sdks/"+sdk.ID, &sdk)) + require.Nil(t, HTTPCli.Delete("/sdks/"+sdk.ID, &sdk)) sdkFromEvt := <-chSdks //waiting for event Uninstalling - assert.Equal(t, sdk.ID, sdkFromEvt.ID) - assert.Equal(t, sdkFromEvt.Status, "Un-installing") + require.Equal(t, sdk.ID, sdkFromEvt.ID) + require.Equal(t, sdkFromEvt.Status, "Un-installing") sdkFromEvt = <-chSdks //waiting for event not installed - assert.Equal(t, sdkFromEvt.Status, "Not Installed") + require.Equal(t, sdkFromEvt.Status, "Not Installed") os.RemoveAll(path.Join(os.Getenv(envXdtSdk), sdk.Profile)) os.Remove(strings.Replace(sdk.URL, "file://", "", 1)) } @@ -88,9 +88,9 @@ func TestSdks(t *testing.T) { InitSdkDir() /*get sdk list from sdk_latest.json*/ var sdkArray []xsapiv1.SDK - assert.Nil(t, HTTPCli.Get("/sdks", &sdkArray)) + require.Nil(t, HTTPCli.Get("/sdks", &sdkArray)) _, err := os.Stat(path.Join(os.Getenv(envXdtSdk), "sdks_latest.json")) - assert.Nil(t, err) + require.Nil(t, err) /*create channel fro SDK event*/ chSdks := make(chan xsapiv1.SDK) @@ -100,46 +100,46 @@ func TestSdks(t *testing.T) { /*checking startup installing of SDKs*/ for i := 0; i < len(sdkArray); i++ { re := regexp.MustCompile("^[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+-[0-9a-z]+$") - assert.True(t, re.MatchString(sdkArray[i].ID)) - assert.Equal(t, sdkArray[0].Status, "Not Installed") + require.True(t, re.MatchString(sdkArray[i].ID)) + require.Equal(t, sdkArray[0].Status, "Not Installed") var sdk xsapiv1.SDK - assert.Nil(t, HTTPCli.Get("/sdks/"+sdkArray[i].ID, &sdk)) - assert.Equal(t, sdkArray[i], sdk) + require.Nil(t, HTTPCli.Get("/sdks/"+sdkArray[i].ID, &sdk)) + require.Equal(t, sdkArray[i], sdk) var sdkRes xsapiv1.SDK /*install sdk*/ Debugf(t, "install sdk %v", sdk.Name) - assert.Nil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) - assert.Equal(t, sdkRes.Status, "Installing") + require.Nil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) + require.Equal(t, sdkRes.Status, "Installing") sdkFromEvent := <-chSdks //waiting for installing event - assert.Equal(t, sdkRes.ID, sdkFromEvent.ID) - assert.Equal(t, sdkFromEvent.Status, "Installing") + require.Equal(t, sdkRes.ID, sdkFromEvent.ID) + require.Equal(t, sdkFromEvent.Status, "Installing") /*abort sdk install*/ Debugf(t, "abort install sdk %v", sdk.Name) - assert.Nil(t, HTTPCli.Post("/sdks/abortinstall", sdk, &sdkRes)) - assert.Equal(t, sdkRes.Status, "Not Installed") + require.Nil(t, HTTPCli.Post("/sdks/abortinstall", sdk, &sdkRes)) + require.Equal(t, sdkRes.Status, "Not Installed") sdkFromEvent = <-chSdks //waiting for not installed status*/ - assert.Equal(t, sdkRes.ID, sdkFromEvent.ID) - assert.Equal(t, sdkRes.Status, sdkFromEvent.Status) + require.Equal(t, sdkRes.ID, sdkFromEvent.ID) + require.Equal(t, sdkRes.Status, sdkFromEvent.Status) } } func installFakeSdk(t *testing.T, sdkInstall xsapiv1.SDKInstallArgs, chSdks chan xsapiv1.SDK) xsapiv1.SDK { InitSdkDir() var sdkRes xsapiv1.SDK - assert.Nil(t, HTTPCli.Post("/sdks", sdkInstall, &sdkRes)) + require.Nil(t, HTTPCli.Post("/sdks", sdkInstall, &sdkRes)) Debugf(t, "Install fake sdk %v (force=%v)", sdkRes.Name, sdkInstall.Force) - assert.Equal(t, sdkRes.Status, "Installing") + require.Equal(t, sdkRes.Status, "Installing") sdkFromEvent := <-chSdks - assert.Equal(t, sdkRes.ID, sdkFromEvent.ID) - assert.Equal(t, sdkFromEvent.Status, "Installing") + require.Equal(t, sdkRes.ID, sdkFromEvent.ID) + require.Equal(t, sdkFromEvent.Status, "Installing") /*waiting for SDKStateChange event from channel*/ sdkFromEvent = <-chSdks - assert.Equal(t, sdkRes.ID, sdkFromEvent.ID) - assert.Equal(t, "Installed", sdkFromEvent.Status) - assert.Equal(t, sdkFromEvent.LastError, "") + require.Equal(t, sdkRes.ID, sdkFromEvent.ID) + require.Equal(t, "Installed", sdkFromEvent.Status) + require.Equal(t, sdkFromEvent.LastError, "") Debugf(t, "Fake sdk %v installed", sdkFromEvent.Name) return sdkFromEvent } @@ -172,14 +172,14 @@ func TestSdksError(t *testing.T) { Debugf(t, "error while installing sdk with no ID and no Filename") var sdkRes xsapiv1.SDK /*error with no ID no filename*/ - assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) + require.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) sdk.ID = "42885c24-374e-3ef0-9723-0c8a05191aa" Debugf(t, "error while installing sdk with a fake id=%v", sdk.ID) /*error with fake ID*/ - assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) + require.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) sdk.ID = "" sdk.Filename = "fake" Debugf(t, "error while installing sdk with a fake filename=%v", sdk.Filename) /*error with fake filename*/ - assert.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) + require.NotNil(t, HTTPCli.Post("/sdks", sdk, &sdkRes)) } diff --git a/test/target_test.go b/test/target_test.go index d7576c6..4e863fc 100644 --- a/test/target_test.go +++ b/test/target_test.go @@ -31,7 +31,7 @@ import ( common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib" "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func launchSSHd(sshDir string, proc **os.Process, sshdCmd string) (*os.File, string) { @@ -70,11 +70,11 @@ func InitSSH(t *testing.T, procSSHd **os.Process) (string, string) { cmd := exec.Command("cp", "-r", sshFixturesDir, sshDir) var out bytes.Buffer cmd.Stdout = &out - assert.Nil(t, cmd.Run()) + require.Nil(t, cmd.Run()) cmd = exec.Command("ls", sshDir) cmd.Stdout = &out - assert.Nil(t, cmd.Run()) + require.Nil(t, cmd.Run()) files := strings.Split(fmt.Sprint(cmd.Stdout), "\n") @@ -83,7 +83,7 @@ func InitSSH(t *testing.T, procSSHd **os.Process) (string, string) { file := sshDir + "/" + f cmd = exec.Command("chmod", "600", file) cmd.Stdout = &out - assert.Nil(t, cmd.Run()) + require.Nil(t, cmd.Run()) } } @@ -97,7 +97,7 @@ func InitSSH(t *testing.T, procSSHd **os.Process) (string, string) { } else if common.Exists("/usr/bin/sshd") { sshdCmd = "/usr/sbin/sshd" } else { - assert.FailNow(t, "Cannot find sshd command, please install it or set in your PATH") + require.FailNow(t, "Cannot find sshd command, please install it or set in your PATH") } } else { sshdCmd = strings.TrimSpace(fmt.Sprint(cmd.Stdout)) @@ -137,7 +137,7 @@ func waitForPrompt(t *testing.T, channel chan xsapiv1.TerminalOutMsg, prompt str case <-time.After(step): current = current + step if current >= timeout { - assert.FailNow(t, "Never received prompt message from terminal (output:"+out+")") + require.FailNow(t, "Never received prompt message from terminal (output:"+out+")") } } } @@ -150,7 +150,7 @@ func ConnectTargetEvents(t *testing.T, channel chan xsapiv1.TargetConfig) { }) args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetAdd} - assert.Nil(t, HTTPCli.Post("/events/register", args, nil)) + require.Nil(t, HTTPCli.Post("/events/register", args, nil)) sCli.Conn.On(xsapiv1.EVTTargetRemove, func(e xsapiv1.EventMsg) { target, _ := e.DecodeTargetEvent() @@ -158,14 +158,14 @@ func ConnectTargetEvents(t *testing.T, channel chan xsapiv1.TargetConfig) { }) args = xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetRemove} - assert.Nil(t, HTTPCli.Post("/events/register", args, nil)) + require.Nil(t, HTTPCli.Post("/events/register", args, nil)) } func DisconnectTargetEvents(t *testing.T) { args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetAdd} - assert.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) + require.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) args = xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetRemove} - assert.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) + require.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) } func ConnectTermEvents(t *testing.T, channel chan xsapiv1.TerminalConfig) { @@ -175,7 +175,7 @@ func ConnectTermEvents(t *testing.T, channel chan xsapiv1.TerminalConfig) { }) args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalAdd} - assert.Nil(t, HTTPCli.Post("/events/register", args, nil)) + require.Nil(t, HTTPCli.Post("/events/register", args, nil)) sCli.Conn.On(xsapiv1.EVTTargetTerminalStateChange, func(e xsapiv1.EventMsg) { termEvt, _ := e.DecodeTerminalEvent() @@ -183,7 +183,7 @@ func ConnectTermEvents(t *testing.T, channel chan xsapiv1.TerminalConfig) { }) args = xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalStateChange} - assert.Nil(t, HTTPCli.Post("/events/register", args, nil)) + require.Nil(t, HTTPCli.Post("/events/register", args, nil)) sCli.Conn.On(xsapiv1.EVTTargetTerminalRemove, func(e xsapiv1.EventMsg) { termEvt, _ := e.DecodeTerminalEvent() @@ -191,16 +191,16 @@ func ConnectTermEvents(t *testing.T, channel chan xsapiv1.TerminalConfig) { }) args = xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalRemove} - assert.Nil(t, HTTPCli.Post("/events/register", args, nil)) + require.Nil(t, HTTPCli.Post("/events/register", args, nil)) } func DisconnectTermEvents(t *testing.T) { args := xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalAdd} - assert.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) + require.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) args = xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalStateChange} - assert.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) + require.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) args = xsapiv1.EventRegisterArgs{Name: xsapiv1.EVTTargetTerminalRemove} - assert.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) + require.Nil(t, HTTPCli.Post("/events/unregister", args, nil)) } func AddTargets(t *testing.T, nbTargets int, chTarget chan xsapiv1.TargetConfig) []string { @@ -213,16 +213,16 @@ func AddTargets(t *testing.T, nbTargets int, chTarget chan xsapiv1.TargetConfig) IP: "127.0.0.1", } /*add target*/ - assert.Nil(t, HTTPCli.Post("/targets", target, &target)) + require.Nil(t, HTTPCli.Post("/targets", target, &target)) Debugf(t, "add target %v", target.Name) targetEvt := <-chTarget //waiting for event targetAdd - assert.Equal(t, target.ID, targetEvt.ID) + require.Equal(t, target.ID, targetEvt.ID) listID[i] = target.ID } for i := 0; i < nbTargets; i++ { var target xsapiv1.TargetConfig - assert.Nil(t, HTTPCli.Get("/targets/"+listID[i], &target)) - assert.Equal(t, target.Status, "Enable") + require.Nil(t, HTTPCli.Get("/targets/"+listID[i], &target)) + require.Equal(t, target.Status, "Enable") } return listID } @@ -244,17 +244,17 @@ func AddTerms(t *testing.T, nbTerms int, listID []string, chTermEvt chan xsapiv1 }, } /*add terminal on target*/ - assert.Nil(t, HTTPCli.Post("/targets/"+listID[j]+"/terminals", term, &term)) + require.Nil(t, HTTPCli.Post("/targets/"+listID[j]+"/terminals", term, &term)) Debugf(t, "add terminal %v", term.Name) termEvt := <-chTermEvt //waiting for event terminalAdd*/ - assert.Equal(t, term.ID, termEvt.ID) + require.Equal(t, term.ID, termEvt.ID) listTermsID[i] = term.ID } - assert.Equal(t, len(listTermsID), nbTerms) + require.Equal(t, len(listTermsID), nbTerms) for i := 0; i < nbTerms; i++ { var term xsapiv1.TerminalConfig - assert.Nil(t, HTTPCli.Get("/targets/"+listID[j]+"/terminals/"+listTermsID[i], &term)) - assert.Equal(t, term.Status, "Close") + require.Nil(t, HTTPCli.Get("/targets/"+listID[j]+"/terminals/"+listTermsID[i], &term)) + require.Equal(t, term.Status, "Close") } } } @@ -269,32 +269,32 @@ func PostTerms(t *testing.T, post string, chTermEvt chan xsapiv1.TerminalConfig, status = "Closing" } var targets []xsapiv1.TargetConfig - assert.Nil(t, HTTPCli.Get("/targets", &targets)) + require.Nil(t, HTTPCli.Get("/targets", &targets)) for i := 0; i < len(targets); i++ { var terms []xsapiv1.TerminalConfig - assert.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals", &terms)) + require.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals", &terms)) listTermsID := make([]string, len(terms)) for j := 0; j < len(terms); j++ { var term xsapiv1.TerminalConfig /*post action on term*/ - assert.Nil(t, HTTPCli.Post("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID+"/"+post, terms[j], &term)) + require.Nil(t, HTTPCli.Post("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID+"/"+post, terms[j], &term)) Debugf(t, "%v terminal %v", post, term.Name) termEvt := <-chTermEvt //waiting for event terminalStateChange if post == "open" { data := []byte("PS1=" + prompt + " bash -norc\n") - assert.Nil(t, sCli.Conn.Emit(xsapiv1.TerminalInEvent, data)) + require.Nil(t, sCli.Conn.Emit(xsapiv1.TerminalInEvent, data)) waitForPrompt(t, chTerm, prompt) } - assert.Equal(t, term.ID, termEvt.ID) - assert.Equal(t, term.Status, status) - assert.Equal(t, termEvt.Status, status) + require.Equal(t, term.ID, termEvt.ID) + require.Equal(t, term.Status, status) + require.Equal(t, termEvt.Status, status) listTermsID[i] = term.ID } time.Sleep(10 * time.Millisecond) for j := 0; j < len(listTermsID); j++ { var term xsapiv1.TerminalConfig - assert.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals/"+listTermsID[i], &term)) - assert.True(t, strings.EqualFold(term.Status, post)) + require.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals/"+listTermsID[i], &term)) + require.True(t, strings.EqualFold(term.Status, post)) Debugf(t, "check that term status %v is %v", term.Name, post) } } @@ -302,23 +302,23 @@ func PostTerms(t *testing.T, post string, chTermEvt chan xsapiv1.TerminalConfig, func RemoveTermsTargets(t *testing.T, chTarget chan xsapiv1.TargetConfig, chTermEvt chan xsapiv1.TerminalConfig) { var targets []xsapiv1.TargetConfig - assert.Nil(t, HTTPCli.Get("/targets", &targets)) + require.Nil(t, HTTPCli.Get("/targets", &targets)) for i := 0; i < len(targets); i++ { var terms []xsapiv1.TerminalConfig - assert.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals", &terms)) + require.Nil(t, HTTPCli.Get("/targets/"+targets[i].ID+"/terminals", &terms)) for j := 0; j < len(terms); j++ { var term xsapiv1.TerminalConfig - assert.Nil(t, HTTPCli.Delete("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID, &term)) + require.Nil(t, HTTPCli.Delete("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID, &term)) termEvt := <-chTermEvt - assert.Equal(t, term.ID, termEvt.ID) - assert.NotNil(t, HTTPCli.Delete("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID, &term)) + require.Equal(t, term.ID, termEvt.ID) + require.NotNil(t, HTTPCli.Delete("/targets/"+targets[i].ID+"/terminals/"+terms[j].ID, &term)) Debugf(t, "remove terminal %v", term.Name) } var tgtRes xsapiv1.TargetConfig - assert.Nil(t, HTTPCli.Delete("/targets/"+targets[i].ID, &tgtRes)) + require.Nil(t, HTTPCli.Delete("/targets/"+targets[i].ID, &tgtRes)) targetEvt := <-chTarget //waiting for remove terminal event - assert.Equal(t, tgtRes.ID, targetEvt.ID) - assert.Equal(t, targets[i].ID, tgtRes.ID) + require.Equal(t, tgtRes.ID, targetEvt.ID) + require.Equal(t, targets[i].ID, tgtRes.ID) } } func TestTarget(t *testing.T) { @@ -341,8 +341,8 @@ func TestTarget(t *testing.T) { /*check that targetArray is empty at startup*/ var targetArray []xsapiv1.TargetConfig - assert.Nil(t, HTTPCli.Get("/targets", &targetArray)) - assert.Equal(t, len(targetArray), 0) + require.Nil(t, HTTPCli.Get("/targets", &targetArray)) + require.Equal(t, len(targetArray), 0) listID := AddTargets(t, nbTargets, chTarget) AddTerms(t, nbTermsByTarget, listID, chTermEvt, sshDir, port) @@ -369,23 +369,23 @@ func TestTarget(t *testing.T) { /*send cmd though term*/ data := []byte("echo helloWorld" + strconv.Itoa(i) + " >> " + totoFileCurrent + "\n") Debugf(t, "send following command through terminal: %v", string(data)) - assert.Nil(t, sCli.Conn.Emit(xsapiv1.TerminalInEvent, data)) + require.Nil(t, sCli.Conn.Emit(xsapiv1.TerminalInEvent, data)) waitForPrompt(t, chTerm, prompt) //waiting for terminal prompt /*check that toto file is created*/ _, err := os.Stat(totoFileCurrent) - assert.Nil(t, err) + require.Nil(t, err) /*send cmd though term*/ data = []byte("cat " + totoFileCurrent + "\n") Debugf(t, "send following command through terminal: %v", string(data)) - assert.Nil(t, sCli.Conn.Emit(xsapiv1.TerminalInEvent, data)) + require.Nil(t, sCli.Conn.Emit(xsapiv1.TerminalInEvent, data)) <-chTerm //cmd sent termOut := <-chTerm //result of cat cmd waitForPrompt(t, chTerm, prompt) //wait for terminal prompt /*check that terminal msg is what was written before*/ - assert.Equal(t, string(termOut.Stdout), "helloWorld"+strconv.Itoa(i)+"\r\n") + require.Equal(t, string(termOut.Stdout), "helloWorld"+strconv.Itoa(i)+"\r\n") Debugf(t, "check terminal output msg: %v", string(termOut.Stdout)) } @@ -401,47 +401,47 @@ func TestTargetErrors(t *testing.T) { /*cannot create empty target*/ target := xsapiv1.TargetConfig{} var targetRes xsapiv1.TargetConfig - assert.NotNil(t, HTTPCli.Post("/targets", target, &targetRes)) + require.NotNil(t, HTTPCli.Post("/targets", target, &targetRes)) Debugf(t, "error while creating empty target") /*check cannot create target with no IP*/ target.Type = xsapiv1.TypeTgtStandard - assert.NotNil(t, HTTPCli.Post("/targets", target, &targetRes)) + require.NotNil(t, HTTPCli.Post("/targets", target, &targetRes)) Debugf(t, "error while creating target without IP") target.IP = "127.0.0.1" - assert.Nil(t, HTTPCli.Post("/targets", target, &targetRes)) + require.Nil(t, HTTPCli.Post("/targets", target, &targetRes)) Debugf(t, "create target %v", targetRes.Name) /*cannot create empty terminal*/ term := xsapiv1.TerminalConfig{} var termRes xsapiv1.TerminalConfig - assert.NotNil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) + require.NotNil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) Debugf(t, "error while creating empty terminal") term.Type = xsapiv1.TypeTermSSH - assert.NotNil(t, HTTPCli.Post("/targets/"+"1010"+"/terminals", term, &termRes)) + require.NotNil(t, HTTPCli.Post("/targets/"+"1010"+"/terminals", term, &termRes)) Debugf(t, "error while creating terminal on an non existing target") - assert.Nil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) - assert.Nil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) - assert.Nil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) - assert.Nil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) + require.Nil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) + require.Nil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) + require.Nil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) + require.Nil(t, HTTPCli.Post("/targets/"+targetRes.ID+"/terminals", term, &termRes)) Debugf(t, "create several terminals") /*remove targets and terms*/ var targetArray []xsapiv1.TargetConfig - assert.Nil(t, HTTPCli.Get("/targets", &targetArray)) + require.Nil(t, HTTPCli.Get("/targets", &targetArray)) for i := 0; i < len(targetArray); i++ { var termArray []xsapiv1.TerminalConfig - assert.Nil(t, HTTPCli.Get("/targets/"+targetArray[i].ID+"/terminals", &termArray)) + require.Nil(t, HTTPCli.Get("/targets/"+targetArray[i].ID+"/terminals", &termArray)) for j := 0; j < len(termArray); j++ { - assert.Nil(t, HTTPCli.Delete("/targets/"+targetArray[i].ID+"/terminals/"+termArray[j].ID, &termRes)) + require.Nil(t, HTTPCli.Delete("/targets/"+targetArray[i].ID+"/terminals/"+termArray[j].ID, &termRes)) Debugf(t, "delete terminal %v", termRes.Name) - assert.NotNil(t, HTTPCli.Delete("/targets/"+targetArray[i].ID+"/terminals/"+termArray[j].ID, &termRes)) + require.NotNil(t, HTTPCli.Delete("/targets/"+targetArray[i].ID+"/terminals/"+termArray[j].ID, &termRes)) Debugf(t, "error while deleting an already deleted terminal %v", termRes.Name) } var tgtRes xsapiv1.TargetConfig - assert.Nil(t, HTTPCli.Delete("/targets/"+targetArray[i].ID, &tgtRes)) + require.Nil(t, HTTPCli.Delete("/targets/"+targetArray[i].ID, &tgtRes)) Debugf(t, "delete target %v", tgtRes.Name) - assert.Equal(t, targetArray[i].ID, tgtRes.ID) - assert.NotNil(t, HTTPCli.Delete("/targets/"+targetArray[i].ID, &tgtRes)) + require.Equal(t, targetArray[i].ID, tgtRes.ID) + require.NotNil(t, HTTPCli.Delete("/targets/"+targetArray[i].ID, &tgtRes)) Debugf(t, "error while deleting an already deleted target %v", tgtRes.Name) } } diff --git a/test/version_test.go b/test/version_test.go index 5373a15..dab77ad 100644 --- a/test/version_test.go +++ b/test/version_test.go @@ -20,17 +20,17 @@ import ( "regexp" "testing" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestVersion(t *testing.T) { var datVersion map[string]interface{} - assert.Nil(t, HTTPCli.Get("/version", &datVersion)) + require.Nil(t, HTTPCli.Get("/version", &datVersion)) Debug(t, datVersion) ver, present := datVersion["version"] - assert.True(t, present) + require.True(t, present) Debugf(t, "version is %s", ver.(string)) re := regexp.MustCompile("^v*[0-9]+.[0-9]+.[0-9]+$") - assert.True(t, re.MatchString(ver.(string))) + require.True(t, re.MatchString(ver.(string))) } -- 2.16.6 From 24581d461e7c9b87836384cd4c38cb2bd7147459 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Fri, 26 Oct 2018 16:31:35 +0200 Subject: [PATCH 07/16] Removed incorrect setting for systemd service xds-server.service aims to be a user systemd service. So the user must enable/disable/start/stop xds-server.service user systemd service manually using for example following commands: systemctl --user enable xds-server.service systemctl --user start xds-server.service Change-Id: Ia5cbcb684f07843c4b774bb5666c01f659af6b3d Signed-off-by: Sebastien Douheret --- conf.d/packaging/deb/debian.rules | 5 ----- conf.d/packaging/rpm/agl-xds-server.spec | 3 --- 2 files changed, 8 deletions(-) diff --git a/conf.d/packaging/deb/debian.rules b/conf.d/packaging/deb/debian.rules index 2be0c7e..b6038e6 100644 --- a/conf.d/packaging/deb/debian.rules +++ b/conf.d/packaging/deb/debian.rules @@ -66,14 +66,9 @@ install: build mkdir -p $(DEB_BASE_DIR)/etc/default $(DEB_BASE_DIR)/etc/xds/server cp $(DEB_INSTALL_XDS_DIR)/conf.d/etc/default/xds-server $(DEB_BASE_DIR)/etc/default/ cp $(DEB_INSTALL_XDS_DIR)/conf.d/etc/xds/server/* $(DEB_BASE_DIR)/etc/xds/server/ - mkdir -p $(DEB_BASE_DIR)/etc/systemd/user/multi-user.target.wants - ln -s /usr/lib/systemd/user/xds-server.service $(DEB_BASE_DIR)/etc/systemd/user/multi-user.target.wants/ mkdir -p $(DEB_BASE_DIR)/etc/profile.d sed -e "s;@XDS_INSTALL_BIN_DIR@;$(INSTALL_BIN_DIR);g" $(DEB_INSTALL_XDS_DIR)/conf.d/etc/profile.d/xds-server.sh > $(DEB_BASE_DIR)/etc/profile.d/$(NAME).sh - # Auto-enable xds-server systemd service - mkdir -p $(DEB_BASE_DIR)/usr/lib/systemd/user/default.target.wants && ln -s ../xds-server.service $(DEB_BASE_DIR)/usr/lib/systemd/user/default.target.wants/ - # Cleanup rm -rf $(DEB_INSTALL_XDS_DIR)/conf.d diff --git a/conf.d/packaging/rpm/agl-xds-server.spec b/conf.d/packaging/rpm/agl-xds-server.spec index 25a6515..27d8d6b 100644 --- a/conf.d/packaging/rpm/agl-xds-server.spec +++ b/conf.d/packaging/rpm/agl-xds-server.spec @@ -42,7 +42,6 @@ mkdir -p %{?buildroot}/%{_sysconfdir}/default cp ./conf.d/etc/default/xds-server %{?buildroot}/%{_sysconfdir}/default/ mkdir -p %{?buildroot}/%{_sysconfdir}/xds/server cp ./conf.d/etc/xds/server/* %{?buildroot}/%{_sysconfdir}/xds/server/ -mkdir -p %{?buildroot}%{_userunitdir}/default.target.wants && ln -s ../xds-server.service %{?buildroot}%{_userunitdir}/default.target.wants/ mkdir -p %{?buildroot}%{_sysconfdir}/profile.d sed -e "s;@XDS_INSTALL_BIN_DIR@;%{_bindir};g" ./conf.d/etc/profile.d/xds-server.sh > %{buildroot}%{_sysconfdir}/profile.d/%{name}.sh @@ -63,8 +62,6 @@ sed -e "s;@XDS_INSTALL_BIN_DIR@;%{_bindir};g" ./conf.d/etc/profile.d/xds-server. %config %{_sysconfdir}/profile.d/%{name}.sh %dir %{_userunitdir} %{_userunitdir}/xds-server.service -%dir %{_userunitdir}/default.target.wants -%{_userunitdir}/default.target.wants/xds-server.service %post -- 2.16.6 From 22ce6ab7f2e7fbf8811d3261c1a72dfd14c70d27 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Tue, 6 Nov 2018 12:17:30 +0100 Subject: [PATCH 08/16] Allow XDT_SDK overwrite Test framework or simply a user may need to set XDT_SDK variable even if /etc/xdtrc file exists. Also change default location of webapp to www to allow to run xds-server without the need to set any config file. Change-Id: I403778e597cbcfd2c16d5ab6b603073ed3a230f0 Signed-off-by: Sebastien Douheret --- lib/xdsconfig/config.go | 2 +- scripts/sdks/agl/_env-init.sh | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/xdsconfig/config.go b/lib/xdsconfig/config.go index bab3abd..046950d 100644 --- a/lib/xdsconfig/config.go +++ b/lib/xdsconfig/config.go @@ -100,7 +100,7 @@ func Init(cliCtx *cli.Context, log *logrus.Logger) (*Config, error) { NoFolderConfig: cliCtx.GlobalBool("no-folderconfig"), }, FileConf: FileConfig{ - WebAppDir: "webapp/dist", + WebAppDir: "www", ShareRootDir: dfltShareDir, SdkScriptsDir: DefaultSdkScriptsDir, XdsUtilsScriptsDir: DefaultXdsUtilsScriptsDir, diff --git a/scripts/sdks/agl/_env-init.sh b/scripts/sdks/agl/_env-init.sh index 9d4b398..cc91107 100755 --- a/scripts/sdks/agl/_env-init.sh +++ b/scripts/sdks/agl/_env-init.sh @@ -17,11 +17,13 @@ # limitations under the License. ########################################################################### -[ -f /etc/xdtrc ] && . /etc/xdtrc - if [ -z "$XDT_SDK" ]; then - # For backward compatibility and compliance with AGL DevKit docker image - [ -d "/xdt/sdk" ] && export XDT_SDK=/xdt/sdk || export XDT_SDK=$HOME/xds-workspace/.sdks + [ -f /etc/xdtrc ] && . /etc/xdtrc + + if [ -z "$XDT_SDK" ]; then + # For backward compatibility and compliance with AGL DevKit docker image + [ -d "/xdt/sdk" ] && export XDT_SDK=/xdt/sdk || export XDT_SDK=$HOME/xds-workspace/.sdks + fi fi export SDK_FAMILY_NAME="agl" @@ -29,4 +31,4 @@ export SDK_ROOT_DIR="$XDT_SDK" export SDK_ENV_SETUP_FILENAME="environment-setup-*" export SDK_DATABASE="http://iot.bzh/download/public/XDS/sdk/sdks_latest.json" -[ "$1" = "-print" ] && { env; } \ No newline at end of file +[ "$1" = "-print" ] && { env; } -- 2.16.6 From 7b929ebc73b75f080066bef555e95b5a81c5a2ab Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Tue, 6 Nov 2018 12:18:53 +0100 Subject: [PATCH 09/16] Remove dependency of killall killall utility is part of psmisc package that is not installed by default. So use pkill utility instead. Change-Id: Ib1e46b603560ea8ee6041a52b3c482114ec340ac Signed-off-by: Sebastien Douheret --- test/main_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/main_test.go b/test/main_test.go index ced75a6..273df09 100644 --- a/test/main_test.go +++ b/test/main_test.go @@ -85,7 +85,7 @@ func Copy(src, dst string) error { func initEnv(launchProcess bool) { if launchProcess { /*kill xds-server if needed*/ - cmd := exec.Command("killall", "-9", "xds-server") + cmd := exec.Command("pkill", "-9", "xds-server") if err := cmd.Start(); err != nil { log.Fatal(err) } -- 2.16.6 From 4b57ec13022e836bdd8cb7f02b3d77f1924d4c35 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Tue, 6 Nov 2018 12:13:37 +0100 Subject: [PATCH 10/16] Add checking about go-race requested to run tests go-race package must be install in order to run tests with --race option set else you will get such kind of error: runtime.RaceErrors: relocation target __tsan_report_count not defined Change-Id: I037d53e10550c5fa74cbb6913d43614ccaa65d11 Signed-off-by: Sebastien Douheret --- Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index a91af3f..6396405 100644 --- a/Makefile +++ b/Makefile @@ -78,8 +78,8 @@ export PATH := $(PATH):$(LOCAL_TOOLSDIR) GOVERSION := $(shell go version |grep -o '[0-9\.]*'|head -n 1) GOVERMAJ := $(shell echo $(GOVERSION) |cut -f1 -d.) GOVERMIN := $(shell echo $(GOVERSION) |cut -f2 -d.) -CHECKGOVER := $(shell [ $(GOVERMAJ) -gt 1 -o \( $(GOVERMAJ) -eq 1 -a $(GOVERMIN) -ge 8 \) ] && echo true) -CHECKERRMSG := "ERROR: Go version 1.8.1 or higher is requested (current detected version: $(GOVERSION))." +CHECKGOVER := $(shell [ $(GOVERMAJ) -gt 1 -o \( $(GOVERMAJ) -eq 1 -a $(GOVERMIN) -ge 9 \) ] && echo true) +CHECKERRMSG := "ERROR: Go version 1.9.0 or higher is requested (current detected version: $(GOVERSION))." VERBOSE_1 := -v @@ -119,7 +119,7 @@ xds: scripts tools/syncthing/copytobin @cd $(ROOT_SRCDIR); $(BUILD_ENV_FLAGS) go build $(VERBOSE_$(V)) -i -o $(LOCAL_BINDIR)/$(TARGET)$(EXT) -ldflags "$(GO_LDFLAGS) -X main.AppVersion=$(VERSION) -X main.AppSubVersion=$(SUB_VERSION)" -gcflags "$(GO_GCFLAGS)" . .PHONY: test -test: tools/glide +test: checkgorace tools/glide ifndef name GOCACHE=off go test --race ./test -v else @@ -227,6 +227,9 @@ tools/syncthing/copytobin: checkgover: @test "$(CHECKGOVER)" = "true" || { echo $(CHECKERRMSG); exit 1; } +.PHONY: +checkgorace: checkgover + @ls $(shell go env GOROOT)/src/runtime/race/*.syso 1> /dev/null 2>&1 || { echo "ERROR: go-race package mandatory to run test. Please install it, for example: zypper install go-race"; exit 1; } .PHONY: help help: -- 2.16.6 From be47274f79eb0843da4d805cfc417fbf7921379c Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Tue, 6 Nov 2018 18:17:32 +0100 Subject: [PATCH 11/16] Check dependency tools before running tests Add a check of all dependency tools before running tests in order to report a clear error instead of a cryptic test failure. Change-Id: I7b642428fb4ada7eec2de0c4c45f612ae6888b33 Signed-off-by: Sebastien Douheret --- test/config.go | 10 ++++++++++ test/main_test.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/test/config.go b/test/config.go index 0b3ce76..804b0b1 100644 --- a/test/config.go +++ b/test/config.go @@ -33,3 +33,13 @@ const ( helloworldFixturesDir = "fixtures/helloworld" sshFixturesDir = "fixtures/ssh" ) + +var dependency_tools = [...]string{ + "cmake", + "make", + "gcc", + "c++", + "python3", + "wget", + "jq", +} diff --git a/test/main_test.go b/test/main_test.go index 273df09..bdea40c 100644 --- a/test/main_test.go +++ b/test/main_test.go @@ -82,6 +82,35 @@ func Copy(src, dst string) error { return out.Close() } +// init function will run once before execution of test functions begins. +func init() { + // Check dependency + err := checkTestDep() + if err != nil { + log.Fatal(err) + } +} + +// isCommandAvailable verify if a command/utility is available +func isCommandAvailable(name string) bool { + cmd := exec.Command("/bin/sh", "-c", "command -v "+name) + if err := cmd.Run(); err != nil { + return false + } + return true +} + +// checkTestDep checks if all dependency tools are available to be able to run tests +func checkTestDep() error { + for _, cmd := range dependency_tools { + if !isCommandAvailable(cmd) { + return fmt.Errorf(cmd + " is not installed and is mandatory to run tests") + } + } + return nil +} + +// initEnv func initEnv(launchProcess bool) { if launchProcess { /*kill xds-server if needed*/ @@ -133,6 +162,7 @@ func launchXdsServer(proc **os.Process) *os.File { return file } +// getHTTPClient func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) { logFile := logDir + logFileClient file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644) @@ -192,7 +222,10 @@ func NewIoSocketClient(url, clientID string) (*IOSockClient, error) { log.Printf("Connect websocket with url=%v clientId=%v\n", prefixURL, HTTPCli.GetClientID()) return sCli, nil } + +// TestMain is the main entry point of testsuite func TestMain(m *testing.M) { + /* useful for debugging, preventing from launching xds-server * it can be launch separately */ launchProcess := true -- 2.16.6 From 8f7e656d6f4dea90129ff8de3aba569e9ac59bdc Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Tue, 18 Dec 2018 22:30:33 +0100 Subject: [PATCH 12/16] Update to latest FF verison and add GG releases Bug : SPEC-2033 Change-Id: I919c106bc8d108992b2d91b5daa1eb27b2245fcf Signed-off-by: Sebastien Douheret --- scripts/sdks/agl/_build-sdks-json.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/sdks/agl/_build-sdks-json.sh b/scripts/sdks/agl/_build-sdks-json.sh index 6539c5b..7b67b86 100755 --- a/scripts/sdks/agl/_build-sdks-json.sh +++ b/scripts/sdks/agl/_build-sdks-json.sh @@ -30,8 +30,11 @@ DOWNLOADABLE_AGL_URLS=" release/eel/5.1.0/* release/eel/latest/* - release/flounder/6.0.0/* + release/flounder/6.0.3/* release/flounder/latest/* + + release/guppy/6.99.2/* + release/guppy/latest/* " # release/dab/4.0.2/* # -- 2.16.6 From add6f928e6a95d14b511ebd59e0fba231747cdbb Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Wed, 19 Dec 2018 00:14:38 +0100 Subject: [PATCH 13/16] Switch to https protocol for IoT.bzh urls http is still supported but redirected to https and consequently curl commands used in this script receive a 302 response that silently skips IoT.bzh sdks processing. Change-Id: I6854be1f3f8a42d77657fe45658782c3dc5b8b38 Signed-off-by: Sebastien Douheret --- scripts/sdks/agl/_build-sdks-json.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/scripts/sdks/agl/_build-sdks-json.sh b/scripts/sdks/agl/_build-sdks-json.sh index 7b67b86..4d67bbf 100755 --- a/scripts/sdks/agl/_build-sdks-json.sh +++ b/scripts/sdks/agl/_build-sdks-json.sh @@ -52,7 +52,7 @@ IMG_AGL_URL_SUFFIX="/deploy/images/" ####################################### ### Define urls where SDKs can be downloaded / IoT.bzh part -SDK_IOTBZH_BASEURL="http://iot.bzh/download/public/XDS/images/" +SDK_IOTBZH_BASEURL="https://iot.bzh/download/public/XDS/images/" DOWNLOADABLE_IOTBZH_URLS=" dab-m3ulcb/* @@ -62,9 +62,9 @@ DOWNLOADABLE_IOTBZH_URLS=" flounder-h3ulcb/* flounder-m3ulcb/* flounder-qemux86-64/* - - master-m3ulcb/* " +# master-m3ulcb/* + SDK_IOTBZH_URL_SUFFIX="/sdk/" IMG_IOTBZH_URL_SUFFIX="/images/" @@ -207,9 +207,9 @@ EndOfMessage } DEBUG=0 -if [[ ${1:0:2} = "-v" ]] ; then - verbose=$(echo -s ${1} | sed -E "s/-([v]+).*/\1/") - DEBUG=$(echo ${verbose} | wc -c) +if [ "${1}" = "-v" ] ; then + shift + DEBUG=${1} echo "Set verbosity level to : ${DEBUG}" shift fi @@ -219,7 +219,8 @@ sdksList=" " for base_url in $DOWNLOADABLE_AGL_URLS do dbg_debug "Look into ${base_url}" - urls="$(expand_url $base_url $SDK_AGL_BASEURL)" + urls="$(expand_url ${base_url} $SDK_AGL_BASEURL)" + [ "$urls" = "" ] && { echo "ERROR: empty response while expanding ${SDK_AGL_BASEURL}${base_url}"; exit 1; } for url in $urls do dbg_debug "URL to check: ${url}" @@ -230,7 +231,8 @@ done for base_url in $DOWNLOADABLE_IOTBZH_URLS do dbg_debug "Look into ${base_url}" - urls="$(expand_url $base_url $SDK_IOTBZH_BASEURL)" + urls="$(expand_url ${base_url} $SDK_IOTBZH_BASEURL)" + [ "$urls" = "" ] && { echo "ERROR: empty response while expanding ${SDK_IOTBZH_BASEURL}${base_url}"; exit 1; } for url in $urls do dbg_debug "URL to check: ${url}" -- 2.16.6 From d3087da351917241f3ec2177f44db54fa0f2f9a3 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Fri, 4 Jan 2019 17:17:14 +0100 Subject: [PATCH 14/16] Bump Copyright to 2019 Change-Id: I92762e7fa98e6251cd393557ffd28a75694d73e7 Signed-off-by: Sebastien Douheret --- main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 0637de9..4c851ef 100644 --- a/main.go +++ b/main.go @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017-2018 "IoT.bzh" + * Copyright (C) 2017-2019 "IoT.bzh" * Author Sebastien Douheret * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -33,7 +33,7 @@ import ( const ( appName = "xds-server" appDescription = "X(cross) Development System Server is a web server that allows to remotely cross build applications." - appCopyright = "Copyright (C) 2017-2018 IoT.bzh - Apache-2.0" + appCopyright = "Copyright (C) 2017-2019 IoT.bzh - Apache-2.0" appUsage = "X(cross) Development System Server" ) -- 2.16.6 From 57fda72ba8bd2c61ceb71ef493b9b9a9162ff757 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Thu, 31 Jan 2019 23:03:49 +0100 Subject: [PATCH 15/16] Fixed/improved tests startup and exit - dynamic wait of xds-server startup by retrying connection establishement with a timeout - gracefully stop xds-server on test end and force kill if graceful stop doesn't work - remove hardcoded Http port and only use value set by _test-config.json file Change-Id: Idb1ba42f6c45851427b4f1c8955d6b14a15aae69 Signed-off-by: Sebastien Douheret --- test/config.go | 4 +--- test/main_test.go | 65 +++++++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/test/config.go b/test/config.go index 804b0b1..6d31559 100644 --- a/test/config.go +++ b/test/config.go @@ -17,11 +17,9 @@ package xdsservertest -var argsProcess = []string{"../bin/xds-server", "-l", "debug", "-c", "_test-config.json"} - const ( + testConfigFile = "_test-config.json" envRootCfgDir = "XDS_SERVER_ROOT_CFG_DIR" - prefixURL = "http://localhost:8000" logFileXdsServer = "xdsserver-test.log" logFileClient = "client-test.log" logFileSSHd = "sshd.log" diff --git a/test/main_test.go b/test/main_test.go index bdea40c..1c577a9 100644 --- a/test/main_test.go +++ b/test/main_test.go @@ -17,6 +17,7 @@ package xdsservertest import ( + "encoding/json" "fmt" "io" "log" @@ -27,6 +28,7 @@ import ( "time" common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib" + "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xdsconfig" "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" socketio_client "github.com/sebd71/go-socket.io-client" ) @@ -46,6 +48,7 @@ type IOSockClient struct { var HTTPCli *common.HTTPClient var logDir string var sCli *IOSockClient +var prefixURL string // Debug function used to print debug logs func Debug(t *testing.T, args ...interface{}) { @@ -152,6 +155,11 @@ func launchXdsServer(proc **os.Process) *os.File { if err != nil { log.Fatal(err) } + var argsProcess = []string{"../bin/xds-server", + "-l", "debug", + "-c", testConfigFile, + } + tmpProc, err := os.StartProcess(argsProcess[0], argsProcess, &os.ProcAttr{ Files: []*os.File{os.Stdin, file, file}, }) @@ -163,7 +171,7 @@ func launchXdsServer(proc **os.Process) *os.File { } // getHTTPClient -func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) { +func getHTTPClient(lvl int, url string) (*common.HTTPClient, *os.File) { logFile := logDir + logFileClient file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644) if err != nil { @@ -177,11 +185,27 @@ func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) { LogPrefix: "XDSSERVERTEST: ", LogLevel: lvl, } - HTTPcli, err := common.HTTPNewClient(prefixURL, conf) - if err != nil { - log.Fatal(err) + + // Try to connect during 30 seconds + var HTTPcli *common.HTTPClient + retry := 30 + for retry > 0 { + if HTTPcli, err = common.HTTPNewClient(url, conf); err == nil { + break + } + if retry < 25 { + log.Printf("Establishing connection to XDS Server (retry %d/10)", retry) + } + time.Sleep(time.Second) + retry-- + } + if retry == 0 { + log.Fatalf("Cannot establish connection with xds-server:\n %v", err) } + log.Printf("HTTP session ID : %v", HTTPcli.GetClientID()) + + // Basic check var ver xsapiv1.Version err = HTTPcli.Get("/version", &ver) if err != nil { @@ -219,7 +243,6 @@ func NewIoSocketClient(url, clientID string) (*IOSockClient, error) { sCli.Connected = false }) - log.Printf("Connect websocket with url=%v clientId=%v\n", prefixURL, HTTPCli.GetClientID()) return sCli, nil } @@ -241,25 +264,49 @@ func TestMain(m *testing.M) { if status, err := p.Wait(); err != nil { log.Fatalf("status=%v\n err=%v\n", status, err) } + os.Exit(0) }(proc) defer fileXdsServer.Close() } - time.Sleep(1 * time.Second) + // Extract URL from _test-config.json file + fd, _ := os.Open(testConfigFile) + defer fd.Close() + fCfg := xdsconfig.FileConfig{} + if err := json.NewDecoder(fd).Decode(&fCfg); err != nil { + log.Fatalf("Cannot decode test config file %v : %v", testConfigFile, err) + } + + if fCfg.HTTPPort == "" { + log.Fatalf("Cannot retrieve httpPort in test config file %v", testConfigFile) + } + prefixURL := "http://localhost:" + fCfg.HTTPPort + + // Start HTTP client to send test commands lvl := common.HTTPLogLevelDebug var fileHTTPClient *os.File - HTTPCli, fileHTTPClient = getHTTPClient(lvl) + HTTPCli, fileHTTPClient = getHTTPClient(lvl, prefixURL) defer fileHTTPClient.Close() var err error sCli, err = NewIoSocketClient(prefixURL, HTTPCli.GetClientID()) if err != nil { log.Fatal(err) } - if HTTPCli == nil { - log.Fatal("HTTPCLi is nil") + log.Fatal("HTTPCli is nil") } + + // Run tests res := m.Run() defer os.Exit(res) + + // Gracefully stop xds-server process + if err := proc.Signal(os.Interrupt); err != nil { + log.Fatalf("xds-server proc interrupt error : %v", err) + } + + // Should not be executed, normal exit must be above go routine after on p.Wait returns + time.Sleep(10 * time.Second) + log.Printf("xds-server not gravefully stop, kill it\n") proc.Kill() } -- 2.16.6 From f001cf950bb91384f163bf8650c5d24f77c940f9 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Thu, 7 Mar 2019 18:36:51 +0100 Subject: [PATCH 16/16] Freeze go-socket.io & go-engine.io version to v1.0.1 Latest go-socket.io (v1.4) is not backward compatible, and consequently breaks xds-server build. Stick to v1.0.1 while waiting update (migration) of xds-server code. Bug: SPEC-2250 Change-Id: I4664ea82d2e5f88204636831503e78543d8bf3d8 Signed-off-by: Sebastien Douheret --- .gitignore | 1 - glide.lock | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ glide.yaml | 8 ++-- 3 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 glide.lock diff --git a/.gitignore b/.gitignore index debbc5d..6613fcb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ bin tools -**/glide.lock **/vendor package debug diff --git a/glide.lock b/glide.lock new file mode 100644 index 0000000..0395d5a --- /dev/null +++ b/glide.lock @@ -0,0 +1,160 @@ +hash: 125f064003e50e76fd61c26972e199332fd86d03ef0352e91289c19ec20c4bec +updated: 2019-03-07T21:07:24.896747781+01:00 +imports: +- name: gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git + version: 5fc859eabd5c2e38b10cbb63f057e83da0748831 + subpackages: + - golib + - golib/common + - golib/eows +- name: github.com/bkaradzic/go-lz4 + version: 7224d8d8f27ef618c0a95f1ae69dbb0488abc33a + repo: https://github.com/bkaradzic/go-lz4 +- name: github.com/calmh/du + version: dd9dc2043353249b2910b29dcfd6f6d4e64f39be + repo: https://github.com/calmh/du +- name: github.com/calmh/luhn + version: c0f1d77264fb3d1bfc65b70eea6ee264058c57c0 + repo: https://github.com/calmh/luhn +- name: github.com/calmh/xdr + version: 08e072f9cb164f943a92eb59f90f3abc64ac6e8f + repo: https://github.com/calmh/xdr +- name: github.com/codegangsta/cli + version: cfb38830724cc34fedffe9a2a29fb54fa9169cd1 +- name: github.com/franciscocpg/reflectme + version: f06ae3cfcd080295ca28e838419f0927844981f9 +- name: github.com/gin-contrib/sse + version: 5545eab6dad3bbbd6c5ae9186383c2a9d23c0dae +- name: github.com/gin-contrib/static + version: ed515893e96b74525d7bf020cfc8f519c68707bc +- name: github.com/gin-gonic/gin + version: b869fe1415e4b9eb52f247441830d502aece2d4d + subpackages: + - binding + - json + - render +- name: github.com/gogo/protobuf + version: efccd33a0c20aa078705571d5ddbfa14c8395a63 + repo: https://github.com/gogo/protobuf + subpackages: + - gogoproto + - proto + - protoc-gen-gogo/descriptor +- name: github.com/golang/protobuf + version: 2bba0603135d7d7f5cb73b2125beeda19c09f4ef + repo: https://github.com/golang/protobuf + subpackages: + - proto + - ptypes/any +- name: github.com/googollee/go-engine.io + version: 885c99fe2966852aaa930e01276e99eb3cc19137 + subpackages: + - message + - parser + - polling + - transport + - websocket +- name: github.com/googollee/go-socket.io + version: 039301c93651993bc96b7b00b1c60592a31f5a1f +- name: github.com/gorilla/websocket + version: 0ec3d1bd7fe50c503d6df98ee649d81f4857c564 +- name: github.com/json-iterator/go + version: 0ff49de124c6f76f8494e194af75bde0f1a49a29 +- name: github.com/kardianos/osext + version: 9d302b58e975387d0b4d9be876622c86cefe64be + repo: https://github.com/kardianos/osext +- name: github.com/kr/pty + version: db8e3cd836b82e82e0a9c8edc6896967dd31374f +- name: github.com/mattn/go-isatty + version: 369ecd8cea9851e459abb67eb171853e3986591e +- name: github.com/minio/sha256-simd + version: 6124d070eb4e7001c244b6ccc282620a5dce44a0 + repo: https://github.com/minio/sha256-simd +- name: github.com/modern-go/concurrent + version: bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94 +- name: github.com/modern-go/reflect2 + version: 94122c33edd36123c84d5368cfb2b69df93a0ec8 +- name: github.com/petermattis/goid + version: caab6446a35a918488a0f52d4b0bd088a60f3511 + repo: https://github.com/petermattis/goid +- name: github.com/sasha-s/go-deadlock + version: 341000892f3dd25f440e6231e8533eb3688ed7ec + repo: https://github.com/sasha-s/go-deadlock +- name: github.com/satori/go.uuid + version: f58768cc1a7a7e77a3bd49e98cdd21419399b6a3 +- name: github.com/sebd71/go-socket.io-client + version: 46defcb47f5cb316d2be7903253f70115c14c4f4 +- name: github.com/Sirupsen/logrus + version: ba1b36c82c5e05c4f912a88eab0dcd91a171688f +- name: github.com/stretchr/testify + version: ffdc059bfe9ce6a4e144ba849dbedead332c6053 + subpackages: + - assert + - require +- name: github.com/syncthing/syncthing + version: a9aa375109184f0c124f8a1575c58baa2656a61b + subpackages: + - lib/config + - lib/dialer + - lib/events + - lib/fs + - lib/logger + - lib/osutil + - lib/protocol + - lib/rand + - lib/sha256 + - lib/signature + - lib/sync + - lib/upgrade + - lib/util +- name: github.com/ugorji/go + version: e444a5086c436778cf9281a7059a3d58b9e17935 + subpackages: + - codec +- name: golang.org/x/net + version: ffcf1bedda3b04ebb15a168a59800a73d6dc0f4d + repo: https://go.googlesource.com/net + subpackages: + - bpf + - context + - internal/iana + - internal/netreflect + - ipv4 + - ipv6 + - proxy +- name: golang.org/x/sys + version: 572b51eaf7221935bdec454796989ba8318fa6f3 + subpackages: + - unix +- name: golang.org/x/text + version: f4b4367115ec2de254587813edaa901bc1c723a8 + repo: https://go.googlesource.com/text + subpackages: + - internal/gen + - internal/triegen + - internal/ucd + - transform + - unicode/cldr + - unicode/norm +- name: gopkg.in/go-playground/validator.v8 + version: 5f1438d3fca68893a817e4a66806cea46a9e4ebf +- name: gopkg.in/yaml.v2 + version: a3f3340b5840cee44f372bddb5880fcbc419b46a + repo: https://gopkg.in/yaml.v2 +testImports: +- name: github.com/davecgh/go-spew + version: d8f796af33cc11cb798c1aaeb27a4ebc5099927d + subpackages: + - spew +- name: github.com/pmezard/go-difflib + version: 5d4384ee4fb2527b0a1256a821ebfc92f91efefc + subpackages: + - difflib +- name: github.com/zhouhui8915/engine.io-go + version: 02ea08f0971f8aa937eb87893c5d193c0763db38 + subpackages: + - message + - parser + - polling + - transport + - websocket diff --git a/glide.yaml b/glide.yaml index 69ee318..faf9310 100644 --- a/glide.yaml +++ b/glide.yaml @@ -18,10 +18,6 @@ import: version: ^1.19.1 - package: github.com/Sirupsen/logrus version: ^0.11.5 -- package: github.com/googollee/go-socket.io - version: 5447e71f36d3947 -- package: github.com/zhouhui8915/go-socket.io-client - version: master - package: github.com/satori/go.uuid version: ^1.1.0 - package: gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git @@ -39,3 +35,7 @@ import: - assert - package: github.com/sebd71/go-socket.io-client version: 46defcb47f +- package: github.com/googollee/go-socket.io + version: v1.0.1 +- package: github.com/googollee/go-engine.io + version: v1.0.1 -- 2.16.6