Skip to content

Commit 9d24941

Browse files
committed
Add full test for all APIs.
1 parent d3c5d8e commit 9d24941

File tree

5 files changed

+87
-73
lines changed

5 files changed

+87
-73
lines changed

.github/workflows/test.yml

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ jobs:
6464
uses: actions/checkout@v3
6565
- name: Build image for platform
6666
run: |
67-
docker build -t platform:latest -f Dockerfile . &&
68-
docker tag platform:latest ossrs/srs-cloud:$SRS_TAG &&
69-
docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-cloud:$SRS_TAG &&
67+
docker build -t platform:latest -f Dockerfile .
68+
docker tag platform:latest ossrs/srs-cloud:$SRS_TAG
69+
docker tag platform:latest registry.cn-hangzhou.aliyuncs.com/ossrs/srs-cloud:$SRS_TAG
7070
docker images
7171
- name: Build package
7272
run: |
@@ -75,30 +75,35 @@ jobs:
7575
du -sh build/*
7676
- name: Install package
7777
run: |
78-
sudo bash build/srs-cloud/scripts/setup-ubuntu/install.sh --verbose &&
79-
du -sh /usr/local/srs-cloud/*
78+
sudo bash build/srs-cloud/scripts/setup-ubuntu/install.sh --verbose
79+
echo "" && echo "/usr/local/srs-cloud/" && du -sh /usr/local/srs-cloud/*
80+
echo "" && ls -lha /data /data/config
8081
- name: Check service
8182
run: |
82-
# Wait for service ready.
83+
echo "Wait for service ready."
8384
make -j -C test
84-
./test/srs-cloud.test -test.v -srs-log -endpoint http://localhost:2022 \
85-
-wait-ready -check-api-secret=false \
86-
-test.run TestApi_Empty
85+
./test/srs-cloud.test -test.v -endpoint http://localhost:2022 \
86+
-srs-log=true -wait-ready=true -init-password=true \
87+
-check-api-secret=false -test.run TestApi_Empty
8788
88-
echo "Record log of services."
89-
docker ps -a
89+
echo "Show service status."
9090
systemctl status srs-cloud
91-
journalctl -u srs-cloud -f >journalctl.log 2>&1 & pid_journalctl=$!
92-
docker logs -f srs-cloud >docker.log 2>&1 & pid_docker=$!
91+
docker ps -a
92+
93+
echo "Record log of services."
94+
journalctl -u srs-cloud > journalctl.log
95+
journalctl -u srs-cloud -f >>journalctl.log 2>&1 & pid_journalctl=$!
96+
docker logs srs-cloud >docker.log
97+
docker logs -f srs-cloud >>docker.log 2>&1 & pid_docker=$!
9398
- name: Test service
9499
run: |
95100
# We will handle the error by ourselves.
96101
set +e
97102
98103
SRS_PLATFORM_SECRET=$(docker exec srs-cloud redis-cli hget SRS_PLATFORM_SECRET token)
99-
./test/srs-cloud.test -test.v -wait-ready -srs-log -endpoint http://localhost:2022 \
100-
-wait-ready -check-api-secret=true -api-secret=$SRS_PLATFORM_SECRET \
101-
-init-password
104+
./test/srs-cloud.test -test.v -wait-ready -endpoint http://localhost:2022 \
105+
-srs-log=true -wait-ready=true -init-password=false \
106+
-check-api-secret=true -api-secret=$SRS_PLATFORM_SECRET \
102107
ret=$?; echo "Test with ${SRS_PLATFORM_SECRET} result: $ret"
103108
104109
echo "Stop service"

DEVELOPER.md

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,19 @@ resources, and ports, as well as development on Mac or using Docker.
55

66
## Develop All in macOS
77

8-
Start redis by docker:
9-
10-
```bash
11-
docker run --name redis --rm -it -v $HOME/db/redis:/data -p 6379:6379 -d redis
12-
```
13-
14-
Start SRS in macOS:
8+
Start redis and SRS by docker:
159

1610
```bash
11+
docker run --name redis --rm -it -v $HOME/db/redis:/data -p 6379:6379 -d redis &&
1712
docker run --name srs --rm -it \
1813
-v $(pwd)/platform/containers/conf/srs.release-mac.conf:/usr/local/srs/conf/srs.conf \
1914
-v $(pwd)/platform/containers/objs/nginx:/usr/local/srs/objs/nginx \
2015
-p 1935:1935/tcp -p 1985:1985/tcp -p 8080:8080/tcp -p 8000:8000/udp -p 10080:10080/udp \
2116
-d ossrs/srs:5
2217
```
2318

19+
> Note: Stop service by `docker rm -f redis srs`
20+
2421
> Note: Also, you can run SRS by `(cd platform && ~/git/srs/trunk/objs/srs -c containers/conf/srs.release-local.conf)`
2522
2623
Run the platform backend, or run in GoLand:

scripts/setup-ubuntu/install.sh

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,9 @@ fi
118118

119119
echo "Start to install files"
120120
mkdir -p ${SRS_HOME} ${DATA_HOME} && rm -rf ${SRS_HOME}/* &&
121-
files=$(find . -type f |grep -vE '(.git|.idea|.run|node_modules|nginx/html/live)') &&
122-
files="${files} $(find . -name .gitkeep)"
123-
for file in $files; do
124-
mkdir -p ${SRS_HOME}/$(dirname ${file}) &&
125-
cp $file ${SRS_HOME}/${file}
126-
done
121+
cp -r ${WORK_DIR}/usr ${SRS_HOME}/usr &&
122+
cp -r ${WORK_DIR}/mgmt ${SRS_HOME}/mgmt &&
123+
cp -r ${WORK_DIR}/LICENSE ${SRS_HOME}/LICENSE
127124
ret=$?; if [[ $ret -ne 0 ]]; then echo "Copy files failed, ret=$ret"; exit $ret; fi
128125
echo "Install files at ${SRS_HOME} ok"
129126

test/api_test.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,20 @@ func TestApi_Empty(t *testing.T) {
1414
logger.Tf(ctx, "test done")
1515
}
1616

17+
func TestApi_Ready(t *testing.T) {
18+
ctx, cancel := context.WithTimeout(logger.WithContext(context.Background()), time.Duration(*srsTimeout)*time.Millisecond)
19+
defer cancel()
20+
21+
if err := waitForServiceReady(ctx); err != nil {
22+
t.Errorf("Fail for err %+v", err)
23+
} else {
24+
logger.Tf(ctx, "test done")
25+
}
26+
}
27+
1728
func TestApi_QuerySecret(t *testing.T) {
1829
ctx, cancel := context.WithTimeout(logger.WithContext(context.Background()), time.Duration(*srsTimeout)*time.Millisecond)
19-
logger.Tf(ctx, "TestApi_QuerySecret with %v", options())
30+
defer cancel()
2031

2132
var r0 error
2233
defer func(ctx context.Context) {
@@ -26,7 +37,6 @@ func TestApi_QuerySecret(t *testing.T) {
2637
logger.Tf(ctx, "test done with err %+v", err)
2738
}
2839
}(ctx)
29-
defer cancel()
3040

3141
var publishSecret string
3242
if err := apiRequest(ctx, "/terraform/v1/hooks/srs/secret/query", nil, &struct {

test/main_test.go

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,19 @@ func options() string {
3636
}
3737

3838
func prepareTest(ctx context.Context) (err error) {
39-
envFile := "../platform/containers/data/config/.env"
40-
if _, err := os.Stat(envFile); err == nil {
41-
if err := godotenv.Load(envFile); err != nil {
42-
return errors.Wrapf(err, "load %v", envFile)
39+
// Try to load the .env file.
40+
for _, envFile := range []string{
41+
"../platform/containers/data/config/.env",
42+
"/data/config/.env",
43+
} {
44+
if _, err := os.Stat(envFile); err == nil {
45+
if err := godotenv.Load(envFile); err == nil {
46+
break
47+
}
4348
}
4449
}
4550

51+
// Parse the options.
4652
srsLog = flag.Bool("srs-log", false, "Whether enable the detail log")
4753
srsTimeout = flag.Int("srs-timeout", 5000, "For each case, the timeout in ms")
4854
apiSecret = flag.String("api-secret", os.Getenv("SRS_PLATFORM_SECRET"), "The secret for api")
@@ -54,6 +60,7 @@ func prepareTest(ctx context.Context) (err error) {
5460

5561
// Should parse it first.
5662
flag.Parse()
63+
logger.Tf(ctx, "Test with %v", options())
5764

5865
if *checkApiSecret && *apiSecret == "" {
5966
return errors.Errorf("empty api secret")
@@ -62,9 +69,44 @@ func prepareTest(ctx context.Context) (err error) {
6269
return nil
6370
}
6471

72+
func TestMain(m *testing.M) {
73+
ctx := logger.WithContext(context.Background())
74+
75+
if err := prepareTest(ctx); err != nil {
76+
logger.Ef(ctx, "Prepare test fail, err %+v", err)
77+
os.Exit(-1)
78+
}
79+
80+
// Disable the logger during all tests.
81+
if *srsLog == false {
82+
olw := logger.Switch(ioutil.Discard)
83+
defer func() {
84+
logger.Switch(olw)
85+
}()
86+
}
87+
88+
// Init rand seed.
89+
rand.Seed(time.Now().UnixNano())
90+
91+
// Wait for the service ready.
92+
if *waitReady {
93+
if err := waitForServiceReady(ctx); err != nil {
94+
os.Exit(-1)
95+
}
96+
}
97+
98+
if *initPassword {
99+
if err := initSystemPassword(ctx); err != nil {
100+
logger.Ef(ctx, "Init system fail, err %+v", err)
101+
os.Exit(-1)
102+
}
103+
}
104+
105+
os.Exit(m.Run())
106+
}
107+
65108
func waitForServiceReady(ctx context.Context) error {
66109
ctx, cancel := context.WithTimeout(ctx, time.Duration(*apiReadyimeout)*time.Millisecond)
67-
logger.Tf(ctx, "Wait for API ready with %v, apiReadyimeout=%vms", options(), *apiReadyimeout)
68110
defer cancel()
69111

70112
for {
@@ -88,7 +130,6 @@ func waitForServiceReady(ctx context.Context) error {
88130

89131
func initSystemPassword(ctx context.Context) error {
90132
ctx, cancel := context.WithTimeout(ctx, time.Duration(*srsTimeout)*time.Millisecond)
91-
logger.Tf(ctx, "Wait for API ready with %v", options())
92133
defer cancel()
93134

94135
// Initialize the system by password.
@@ -129,42 +170,6 @@ func initSystemPassword(ctx context.Context) error {
129170
return nil
130171
}
131172

132-
func TestMain(m *testing.M) {
133-
ctx := logger.WithContext(context.Background())
134-
135-
if err := prepareTest(ctx); err != nil {
136-
logger.Ef(ctx, "Prepare test fail, err %+v", err)
137-
os.Exit(-1)
138-
}
139-
140-
// Disable the logger during all tests.
141-
if *srsLog == false {
142-
olw := logger.Switch(ioutil.Discard)
143-
defer func() {
144-
logger.Switch(olw)
145-
}()
146-
}
147-
148-
// Init rand seed.
149-
rand.Seed(time.Now().UnixNano())
150-
151-
// Wait for the service ready.
152-
if *waitReady {
153-
if err := waitForServiceReady(ctx); err != nil {
154-
os.Exit(-1)
155-
}
156-
}
157-
158-
if *initPassword {
159-
if err := initSystemPassword(ctx); err != nil {
160-
logger.Ef(ctx, "Init system fail, err %+v", err)
161-
os.Exit(-1)
162-
}
163-
}
164-
165-
os.Exit(m.Run())
166-
}
167-
168173
// Filter the test error, ignore context.Canceled
169174
func filterTestError(errs ...error) error {
170175
var filteredErrors []error

0 commit comments

Comments
 (0)