sdk_test: draft in progress
[src/xds/xds-server.git] / test / xdsserver_test.go
1 /*
2  * Copyright (C) 2017-2018 "IoT.bzh"
3  * Author Clément Bénier <clement.benier@iot.bzh>
4  *
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
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17 package xdsservertest
18
19 import (
20         "log"
21         "os"
22         "os/exec"
23         "testing"
24         "time"
25
26         common "gerrit.automotivelinux.org/gerrit/src/xds/xds-common.git/golib"
27         "gerrit.automotivelinux.org/gerrit/src/xds/xds-server/lib/xsapiv1"
28 )
29
30 //global client
31 var HTTPCli *common.HTTPClient
32 var logDir string
33 var sdkDir string
34
35 func initEnv(launchProcess bool) {
36         if launchProcess {
37                 cmd := exec.Command("killall", "-9", "xds-server")
38                 if err := cmd.Start(); err != nil {
39                         log.Fatal(err)
40                 }
41                 cmd.Wait()
42         }
43         rootTestLog := "/tmp/xds-server-test"
44         if err := os.Setenv(envRootCfgDir, rootTestLog); err != nil {
45                 log.Fatal(err)
46         }
47         sdkDir = rootTestLog + "/sdks/"
48         if err := os.Setenv(envXdtSdk, sdkDir); err != nil {
49                 log.Fatal(err)
50         }
51         if err := os.Setenv(envXdsServerWorkspaceDir, rootTestLog); err != nil {
52                 log.Fatal(err)
53         }
54         if err := os.Setenv(envXdsServerRootCfgDir, rootTestLog); err != nil {
55                 log.Fatal(err)
56         }
57         if err := os.Setenv("XDS_LOG_SILLY", "1"); err != nil {
58                 log.Fatal(err)
59         }
60         os.RemoveAll(rootTestLog)
61         os.MkdirAll(rootTestLog, 0755)
62         logDir = rootTestLog + "/logs/"
63         os.MkdirAll(logDir, 0755)
64         os.MkdirAll(sdkDir, 0755)
65 }
66
67 func launchXdsServer(proc **os.Process) *os.File {
68         logFile := logDir + logFileXdsServer
69         file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
70         if err != nil {
71                 log.Fatal(err)
72         }
73         tmpProc, err := os.StartProcess(argsProcess[0], argsProcess, &os.ProcAttr{
74                 Files: []*os.File{os.Stdin, file, file},
75         })
76         if err != nil {
77                 log.Fatal(err)
78         }
79         *proc = tmpProc
80         return file
81 }
82
83 func getHTTPClient(lvl int) (*common.HTTPClient, *os.File) {
84         logFile := logDir + logFileClient
85         file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY, 0644)
86         if err != nil {
87                 log.Fatal(err)
88         }
89         conf := common.HTTPClientConfig{
90                 URLPrefix:           "/api/v1",
91                 HeaderClientKeyName: "Xds-Sid",
92                 CsrfDisable:         true,
93                 LogOut:              file,
94                 LogPrefix:           "XDSSERVERTEST: ",
95                 LogLevel:            lvl,
96         }
97         cli, err := common.HTTPNewClient(prefixURL, conf)
98         if err != nil {
99                 log.Fatal(err)
100         }
101         log.Printf("HTTP session ID : %v", cli.GetClientID())
102         var ver xsapiv1.Version
103         err = cli.Get("/version", &ver)
104         if err != nil {
105                 log.Fatal(err)
106         }
107         return cli, file
108 }
109
110 func TestMain(m *testing.M) {
111         launchProcess := true
112         log.Printf("TestMain: launchProcess is %v", launchProcess)
113         initEnv(launchProcess)
114
115         var proc *os.Process
116         var fileXdsServer *os.File
117         if launchProcess {
118                 fileXdsServer = launchXdsServer(&proc)
119                 go func(p *os.Process) {
120                         if status, err := p.Wait(); err != nil {
121                                 log.Fatalf("status=%v\n err=%v\n", status, err)
122                         }
123                 }(proc)
124                 defer proc.Kill()
125                 defer fileXdsServer.Close()
126         }
127         time.Sleep(1 * time.Second)
128
129         lvl := common.HTTPLogLevelDebug
130         var fileHTTPClient *os.File
131         HTTPCli, fileHTTPClient = getHTTPClient(lvl)
132         defer fileHTTPClient.Close()
133
134         log.Printf("HTTPCli id is %v", HTTPCli.GetClientID())
135
136         if HTTPCli == nil {
137                 log.Fatal("HTTPCLi is nil")
138         }
139         res := m.Run()
140         defer os.Exit(res)
141 }
142
143 func init() {
144 }