X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=test%2Fexec_test.go;fp=test%2Fexec_test.go;h=884ba871222103197d13658f89e35308e7046da3;hb=c095e1ea9a9e38f020ce4ae852d97c712be910b6;hp=0000000000000000000000000000000000000000;hpb=3c40079d8360c15f0ce52a6c11a2bc2555177463;p=src%2Fxds%2Fxds-server.git diff --git a/test/exec_test.go b/test/exec_test.go new file mode 100644 index 0000000..884ba87 --- /dev/null +++ b/test/exec_test.go @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2017-2018 "IoT.bzh" + * Author Clément Bénier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package xdsservertest + +import ( + "bytes" + "os" + "os/exec" + "path" + "testing" + + "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" + "github.com/stretchr/testify/assert" +) + +func InitExec(t *testing.T) string { + Debugf(t, "Create helloworld directory with app-templates") + /*copy helloworld from fixtures to envRootCfgDir*/ + helloworldDir := path.Join(os.Getenv(envRootCfgDir), "helloworld") + cmd := exec.Command("cp", "-r", helloworldFixturesDir, helloworldDir) + var out bytes.Buffer + cmd.Stdout = &out + assert.Nil(t, cmd.Run()) + + /*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) + assert.Nil(t, cmd.Run()) + return helloworldDir +} + +func TestExec(t *testing.T) { + helloworldDir := InitExec(t) + /*channel for SDK events*/ + chSdks := make(chan xsapiv1.SDK) + defer close(chSdks) + sdk := xsapiv1.SDKInstallArgs{ + ID: "", + Filename: sdkFileName, + Force: false, + } + ConnectSDKStateChange(t, sCli, chSdks) + sdkRes := installFakeSdk(t, sdk, chSdks) + + /*check there is no project*/ + var cfgArray []xsapiv1.FolderConfig + assert.Nil(t, HTTPCli.Get("/folders", &cfgArray)) + assert.Equal(t, len(cfgArray), 0) + + fPrj := xsapiv1.FolderConfig{ + Label: "testproject", + ClientPath: helloworldDir, + Type: xsapiv1.TypePathMap, + ClientData: "clientdatatest", + DataPathMap: xsapiv1.PathMapConfig{ + ServerPath: helloworldDir, + }, + } + /*create project*/ + var cfg xsapiv1.FolderConfig + assert.Nil(t, HTTPCli.Post("/folders", fPrj, &cfg)) + assert.NotNil(t, cfg) + + /*channel for ExecOutMsg*/ + chExec := make(chan xsapiv1.ExecExitMsg) + defer close(chExec) + /*connect to ExecOutEvent*/ + sCli.Conn.On(xsapiv1.ExecExitEvent, func(ev xsapiv1.ExecExitMsg) { + chExec <- ev + }) + + /*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 = cmd + " && " + cmd = cmd + "mkdir -p build" + cmd = cmd + " && " + cmd = cmd + "cd build" + cmd = cmd + " && " + cmd = cmd + "cmake .." + + /*post exec cmd cmake*/ + 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 + 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 = cmd + "&&" + cmd = cmd + "cd build" + cmd = cmd + "&&" + cmd = cmd + "make" + exec.Cmd = cmd + /*post exec cmd make*/ + Debugf(t, "exec make cmd(%v)", cmd) + assert.Nil(t, HTTPCli.Post("/exec", exec, &execRes)) + exitMsg = <-chExec + assert.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) + + /*deinit*/ + assert.Nil(t, HTTPCli.Delete("/folders/"+cfg.ID, &cfg)) + RemoveSdk(t, sdkRes, chSdks) + DisconnectSDKStateChange(t, sCli) +}