2 * Copyright (C) 2017-2018 "IoT.bzh"
3 * Author Clément Bénier <clement.benier@iot.bzh>
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
30 common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib"
31 "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
32 socketio_client "github.com/sebd71/go-socket.io-client"
36 type IOSockClient struct {
38 Conn *socketio_client.Client
39 Options *socketio_client.Options
42 //ServerDiscoChan chan Disconnection
47 var HTTPCli *common.HTTPClient
50 var sCli *IOSockClient
52 func Copy(src, dst string) error {
53 in, err := os.Open(src)
59 out, err := os.Create(dst)
65 _, err = io.Copy(out, in)
72 func initEnv(launchProcess bool) {
74 cmd := exec.Command("killall", "-9", "xds-server")
75 if err := cmd.Start(); err != nil {
80 rootTestLog := "/tmp/xds-server-test"
81 if err := os.Setenv(envRootCfgDir, rootTestLog); err != nil {
84 sdkDir = rootTestLog + "/sdks/"
85 if err := os.Setenv(envXdtSdk, sdkDir); err != nil {
88 if err := os.Setenv(envXdsServerWorkspaceDir, rootTestLog); err != nil {
91 if err := os.Setenv(envXdsServerRootCfgDir, rootTestLog); err != nil {
94 if err := os.Setenv("XDS_LOG_SILLY", "1"); err != nil {
97 os.RemoveAll(rootTestLog)
98 os.MkdirAll(rootTestLog, 0755)
99 logDir = rootTestLog + "/logs/"
100 os.MkdirAll(logDir, 0755)
101 os.MkdirAll(sdkDir, 0755)
102 currentDir, err := os.Getwd()
106 if err := Copy(path.Join(currentDir, sdkFile), path.Join(sdkDir, sdkFileName)); err != nil {
111 func launchXdsServer(proc **os.Process) *os.File {
112 logFile := logDir + logFileXdsServer
113 file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
117 tmpProc, err := os.StartProcess(argsProcess[0], argsProcess, &os.ProcAttr{
118 Files: []*os.File{os.Stdin, file, file},
127 func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) {
128 logFile := logDir + logFileClient
129 file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
133 conf := common.HTTPClientConfig{
134 URLPrefix: "/api/v1",
135 HeaderClientKeyName: "Xds-Sid",
138 LogPrefix: "XDSSERVERTEST: ",
141 cli, err := common.HTTPNewClient(prefixURL, conf)
145 log.Printf("HTTP session ID : %v", cli.GetClientID())
146 var ver xsapiv1.Version
147 err = cli.Get("/version", &ver)
154 func NewIoSocketClient(url, clientID string) (*IOSockClient, error) {
158 sCli := &IOSockClient{
160 EmitMutex: &sync.Mutex{},
161 Options: &socketio_client.Options{
162 Transport: "websocket",
163 Header: make(map[string][]string),
165 //ServerDiscoChan: make(chan Disconnection, 1),
167 sCli.Options.Header["XDS-SID"] = []string{clientID}
169 sCli.Conn, err = socketio_client.NewClient(url, sCli.Options)
171 return nil, fmt.Errorf("IO.socket connection error: " + err.Error())
174 sCli.Conn.On("connection", func() {
175 sCli.Connected = true
178 sCli.Conn.On("disconnection", func(err error) {
179 log.Printf("WS disconnection event with err: %v\n", err)
180 sCli.Connected = false
185 func TestMain(m *testing.M) {
186 launchProcess := true
187 log.Printf("TestMain: launchProcess is %v", launchProcess)
188 initEnv(launchProcess)
191 var fileXdsServer *os.File
193 fileXdsServer = launchXdsServer(&proc)
194 go func(p *os.Process) {
195 if status, err := p.Wait(); err != nil {
196 log.Fatalf("status=%v\n err=%v\n", status, err)
200 defer fileXdsServer.Close()
202 time.Sleep(1 * time.Second)
204 lvl := common.HTTPLogLevelDebug
205 var fileHTTPClient *os.File
206 HTTPCli, fileHTTPClient = getHTTPClient(lvl)
207 defer fileHTTPClient.Close()
209 sCli, err = NewIoSocketClient(prefixURL, HTTPCli.GetClientID())
214 log.Printf("HTTPCli id is %v", HTTPCli.GetClientID())
217 log.Fatal("HTTPCLi is nil")