/* * 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 ( "log" "os" "os/exec" "testing" "time" common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib" "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1" ) //global client var HTTPCli *common.HTTPClient var logDir string var sdkDir string func initEnv(launchProcess bool) { if launchProcess { cmd := exec.Command("killall", "-9", "xds-server") if err := cmd.Start(); err != nil { log.Fatal(err) } cmd.Wait() } rootTestLog := "/tmp/xds-server-test" if err := os.Setenv(envRootCfgDir, rootTestLog); err != nil { log.Fatal(err) } sdkDir = rootTestLog + "/sdks/" if err := os.Setenv(envXdtSdk, sdkDir); err != nil { log.Fatal(err) } if err := os.Setenv(envXdsServerWorkspaceDir, rootTestLog); err != nil { log.Fatal(err) } if err := os.Setenv(envXdsServerRootCfgDir, rootTestLog); err != nil { log.Fatal(err) } if err := os.Setenv("XDS_LOG_SILLY", "1"); err != nil { log.Fatal(err) } os.RemoveAll(rootTestLog) os.MkdirAll(rootTestLog, 0755) logDir = rootTestLog + "/logs/" os.MkdirAll(logDir, 0755) os.MkdirAll(sdkDir, 0755) } func launchXdsServer(proc **os.Process) *os.File { logFile := logDir + logFileXdsServer file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Fatal(err) } tmpProc, err := os.StartProcess(argsProcess[0], argsProcess, &os.ProcAttr{ Files: []*os.File{os.Stdin, file, file}, }) if err != nil { log.Fatal(err) } *proc = tmpProc return file } func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) { logFile := logDir + logFileClient file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644) if err != nil { log.Fatal(err) } conf := common.HTTPClientConfig{ URLPrefix: "/api/v1", HeaderClientKeyName: "Xds-Sid", CsrfDisable: true, LogOut: file, LogPrefix: "XDSSERVERTEST: ", LogLevel: lvl, } cli, err := common.HTTPNewClient(prefixURL, conf) if err != nil { log.Fatal(err) } log.Printf("HTTP session ID : %v", cli.GetClientID()) var ver xsapiv1.Version err = cli.Get("/version", &ver) if err != nil { log.Fatal(err) } return cli, file } func TestMain(m *testing.M) { launchProcess := true log.Printf("TestMain: launchProcess is %v", launchProcess) initEnv(launchProcess) var proc *os.Process var fileXdsServer *os.File if launchProcess { fileXdsServer = launchXdsServer(&proc) go func(p *os.Process) { if status, err := p.Wait(); err != nil { log.Fatalf("status=%v\n err=%v\n", status, err) } }(proc) defer proc.Kill() defer fileXdsServer.Close() } time.Sleep(1 * time.Second) lvl := common.HTTPLogLevelDebug var fileHTTPClient *os.File HTTPCli, fileHTTPClient = getHTTPClient(lvl) defer fileHTTPClient.Close() log.Printf("HTTPCli id is %v", HTTPCli.GetClientID()) if HTTPCli == nil { log.Fatal("HTTPCLi is nil") } res := m.Run() defer os.Exit(res) } func init() { }