forked from quhar/bme280
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbme280_test.go
212 lines (197 loc) · 3.91 KB
/
bme280_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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
package bme280
import (
"errors"
"fmt"
"sync"
"testing"
)
type fakeBus struct {
data map[byte][]byte
wErr map[byte]error
rErr map[byte]error
sync.Mutex
}
var goodData = map[byte][]byte{
IDAddr: []byte{IDVal},
TempCompAddr: make([]byte, 6),
PressCompAddr: make([]byte, 18),
H1CompAddr: []byte{0},
H2CompAddr: make([]byte, 7),
DataAddr: make([]byte, 8),
}
func (fb *fakeBus) ReadReg(a byte, data []byte) error {
fb.Lock()
defer fb.Unlock()
if err, ok := fb.rErr[a]; ok {
return err
}
ldata, ok := fb.data[a]
if !ok {
return fmt.Errorf("no data for registry: %X", a)
}
for i, d := range ldata {
data[i] = d
}
return nil
}
func (fb *fakeBus) WriteReg(a byte, d []byte) error {
fb.Lock()
defer fb.Unlock()
if err, ok := fb.wErr[a]; ok {
return err
}
return nil
}
func (fb *fakeBus) set(data map[byte][]byte, rErr, wErr map[byte]error) {
fb.data = data
fb.rErr = rErr
fb.wErr = wErr
}
func TestInit(t *testing.T) {
testData := []struct {
desc string
data map[byte][]byte
rErr map[byte]error
wErr map[byte]error
wantErr bool
}{
{
desc: "Failed to read ID data",
rErr: map[byte]error{
IDAddr: errors.New("error reading ID"),
},
wantErr: true,
},
{
desc: "Bad ID data",
data: map[byte][]byte{
IDAddr: []byte{0},
},
wantErr: true,
},
{
desc: "Failed to write config data.",
data: goodData,
wErr: map[byte]error{
ConfigAddr: errors.New("error"),
},
wantErr: true,
},
{
desc: "Failed to write control humidity data",
data: goodData,
wErr: map[byte]error{
CtrlHumAddr: errors.New("error"),
},
wantErr: true,
},
{
desc: "Failed to write control measurment data",
data: goodData,
wErr: map[byte]error{
CtrlMeasAddr: errors.New("error"),
},
wantErr: true,
},
{
desc: "Failed to read temperature compensation data",
data: goodData,
rErr: map[byte]error{
TempCompAddr: errors.New("error"),
},
wantErr: true,
},
{
desc: "Failed to read pressure compensation data",
data: goodData,
rErr: map[byte]error{
PressCompAddr: errors.New("error"),
},
wantErr: true,
},
{
desc: "Failed to read first humidity compensation data",
data: goodData,
rErr: map[byte]error{
H1CompAddr: errors.New("error"),
},
wantErr: true,
},
{
desc: "Failed to read second humidity compensation data",
data: goodData,
rErr: map[byte]error{
H2CompAddr: errors.New("error"),
},
wantErr: true,
},
{
desc: "Success",
data: goodData,
},
}
fb := &fakeBus{}
b := &BME280{
dev: fb,
}
for i, tc := range testData {
fb.set(tc.data, tc.rErr, tc.wErr)
err := b.Init()
if (err == nil) != !tc.wantErr {
t.Errorf("Test(%d) Desc(%s): Init => unexpected error got(%v) want(%v)", i, tc.desc, err, tc.wantErr)
}
}
}
func TestEnvData(t *testing.T) {
testData := []struct {
desc string
mode byte
data map[byte][]byte
rErr map[byte]error
wErr map[byte]error
wantErr bool
}{
{
desc: "Failed to read sensor data",
data: goodData,
rErr: map[byte]error{
DataAddr: errors.New("error reading data"),
},
wantErr: true,
},
{
desc: "Forced mode, failed to write control humidity data.",
mode: ForcedMode,
data: goodData,
wErr: map[byte]error{
CtrlHumAddr: errors.New("error reading data"),
},
wantErr: true,
},
{
desc: "Forced mode, failed to write control measurment data",
mode: ForcedMode,
data: goodData,
wErr: map[byte]error{
CtrlMeasAddr: errors.New("error"),
},
wantErr: true,
},
{
desc: "Success",
data: goodData,
},
}
fb := &fakeBus{}
b := &BME280{
dev: fb,
}
for i, tc := range testData {
fb.set(tc.data, tc.rErr, tc.wErr)
b.mode = tc.mode
_, _, _, err := b.EnvData()
if (err == nil) != !tc.wantErr {
t.Errorf("Test(%d) Desc(%s): Init => unexpected error got(%v) want(%v)", i, tc.desc, err, tc.wantErr)
}
}
}