forked from megaease/easeprobe
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstatus_test.go
128 lines (106 loc) · 3.14 KB
/
status_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
* Copyright (c) 2022, MegaEase
* All rights reserved.
*
* 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 probe
import (
"encoding/json"
"testing"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
)
func testMarshalUnmarshal(t *testing.T, str string, status Status, good bool,
marshal func(in interface{}) ([]byte, error),
unmarshal func(in []byte, out interface{}) (err error)) {
var s Status
err := unmarshal([]byte(str), &s)
if good {
assert.Nil(t, err)
assert.Equal(t, status, s)
} else {
assert.Error(t, err)
assert.Equal(t, StatusUnknown, s)
}
buf, err := marshal(status)
if good {
assert.Nil(t, err)
assert.Equal(t, str, string(buf))
} else {
assert.Error(t, err)
assert.Nil(t, buf)
}
}
func testYamlJSON(t *testing.T, str string, status Status, good bool) {
testYaml(t, str+"\n", status, good)
testJSON(t, `"`+str+`"`, status, good)
}
func testYaml(t *testing.T, str string, status Status, good bool) {
testMarshalUnmarshal(t, str, status, good, yaml.Marshal, yaml.Unmarshal)
}
func testJSON(t *testing.T, str string, status Status, good bool) {
testMarshalUnmarshal(t, str, status, good, json.Marshal, json.Unmarshal)
}
func TestYamlJSON(t *testing.T) {
testYamlJSON(t, "init", StatusInit, true)
testYamlJSON(t, "up", StatusUp, true)
testYamlJSON(t, "down", StatusDown, true)
testYamlJSON(t, "unknown", StatusUnknown, true)
testYamlJSON(t, "bad", StatusBad, true)
testYamlJSON(t, "xxx", 10, false)
testYaml(t, "- xxx", 10, false)
testJSON(t, `{"x":"y"}`, 10, false)
}
func TestStatus(t *testing.T) {
s := StatusUp
assert.Equal(t, "up", s.String())
s.Status("down")
assert.Equal(t, StatusDown, s)
assert.Equal(t, "❌", s.Emoji())
s.Status("up")
assert.Equal(t, StatusUp, s)
assert.Equal(t, "✅", s.Emoji())
s.Status("xxx")
assert.Equal(t, StatusUnknown, s)
s = 10
assert.Equal(t, "⛔️", s.Emoji())
err := yaml.Unmarshal([]byte("down"), &s)
assert.Nil(t, err)
assert.Equal(t, StatusDown, s)
buf, err := yaml.Marshal(&s)
assert.Nil(t, err)
assert.Equal(t, "down\n", string(buf))
buf, err = json.Marshal(s)
assert.Nil(t, err)
assert.Equal(t, "\"down\"", string(buf))
err = yaml.Unmarshal([]byte("xxx"), &s)
assert.Error(t, err)
assert.Equal(t, StatusUnknown, s)
err = yaml.Unmarshal([]byte{1, 2}, &s)
assert.NotNil(t, err)
}
func TestStatusTitle(t *testing.T) {
s := StatusInit
assert.Equal(t, "Initialization", s.Title())
s = StatusUp
assert.Equal(t, "Success", s.Title())
s = StatusDown
assert.Equal(t, "Error", s.Title())
s = StatusUnknown
assert.Equal(t, "Unknown", s.Title())
s = StatusBad
assert.Equal(t, "Bad", s.Title())
s = -1
assert.Equal(t, "Unknown", s.Title())
}