Skip to content

Commit 302614e

Browse files
authored
tests: fix for arm64 environment and stabilize (hybridgroup#1115)
1 parent c1a11a6 commit 302614e

6 files changed

+61
-37
lines changed

api/api_test.go

+8-14
Original file line numberDiff line numberDiff line change
@@ -401,24 +401,18 @@ func TestRobotDeviceEvent(t *testing.T) {
401401
Event("TestEvent")
402402

403403
go func() {
404-
time.Sleep(time.Millisecond * 5)
404+
time.Sleep(time.Millisecond * 10) // wait some time, so select below is ready
405405
a.manager.Robot("Robot1").
406406
Device("Device1").(gobot.Eventer).Publish(event, "event-data")
407407
}()
408408

409-
done := false
410-
411-
for !done {
412-
select {
413-
case resp := <-respc:
414-
reader := bufio.NewReader(resp.Body)
415-
data, _ := reader.ReadString('\n')
416-
assert.Equal(t, "data: \"event-data\"\n", data)
417-
done = true
418-
case <-time.After(200 * time.Millisecond):
419-
t.Error("Not receiving data")
420-
done = true
421-
}
409+
select {
410+
case resp := <-respc:
411+
reader := bufio.NewReader(resp.Body)
412+
data, _ := reader.ReadString('\n')
413+
assert.Equal(t, "data: \"event-data\"\n", data)
414+
case <-time.After(50 * time.Millisecond):
415+
t.Error("Not receiving data")
422416
}
423417

424418
server.CloseClientConnections()

drivers/aio/analog_sensor_driver_test.go

+11-8
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func TestAnalogSensorRead_SetScaler(t *testing.T) {
144144
got, err := d.Read()
145145
// assert
146146
require.NoError(t, err)
147-
assert.InDelta(t, tc.want, got, 0.0)
147+
assert.InDelta(t, tc.want, got, 1.0e-14)
148148
})
149149
}
150150
}
@@ -157,7 +157,7 @@ func TestAnalogSensor_WithSensorCyclicRead(t *testing.T) {
157157
semData := make(chan bool)
158158
semDone := make(chan bool)
159159
nextVal := make(chan int)
160-
readTimeout := 1 * time.Second
160+
readTimeout := time.Second
161161
a.analogReadFunc = func() (int, error) {
162162
val := 100
163163
var err error
@@ -172,23 +172,26 @@ func TestAnalogSensor_WithSensorCyclicRead(t *testing.T) {
172172
}
173173
}
174174

175-
// act (start cyclic reading)
176-
require.NoError(t, d.Start())
177-
178175
// arrange: expect raw value to be received
179-
_ = d.Once(d.Event(Data), func(data interface{}) {
176+
_ = d.Once(Data, func(data interface{}) { // we can't use d.Event(Data) here, because not registered yet
180177
assert.Equal(t, 100, data.(int))
181178
semData <- true
182179
})
183180

184181
// arrange: expect scaled value to be received
185-
_ = d.Once(d.Event(Value), func(value interface{}) {
182+
_ = d.Once(Value, func(value interface{}) { // we can't use d.Event(Value) here, because not registered yet
186183
assert.InDelta(t, 10000.0, value.(float64), 0.0)
187184
<-semData // wait for data is finished
188185
semDone <- true
189186
nextVal <- -1 // arrange: error in read function
190187
})
191188

189+
// wait some time to ensure the cyclic go routine is working
190+
time.Sleep(15 * time.Millisecond)
191+
192+
// act (start cyclic reading)
193+
require.NoError(t, d.Start())
194+
192195
// assert: both events within timeout
193196
select {
194197
case <-semDone:
@@ -227,7 +230,7 @@ func TestAnalogSensor_WithSensorCyclicRead(t *testing.T) {
227230
require.Fail(t, "AnalogSensor Event for data should not published")
228231
case <-semDone:
229232
require.Fail(t, "AnalogSensor Event for value should not published")
230-
case <-time.After(readTimeout):
233+
case <-time.After(100 * time.Millisecond):
231234
}
232235
}
233236

drivers/aio/grove_temperature_sensor_driver_test.go

+18-6
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
package aio
33

44
import (
5-
"fmt"
65
"strings"
76
"testing"
87
"time"
@@ -100,24 +99,37 @@ func TestGroveTemperatureSensor_publishesTemperatureInCelsius(t *testing.T) {
10099
a := newAioTestAdaptor()
101100
d := NewGroveTemperatureSensorDriver(a, "1", WithSensorCyclicRead(10*time.Millisecond))
102101

102+
// 584: 31.52208881030674, 585: 31.61532462352477
103+
lastRawValue := 584
103104
a.analogReadFunc = func() (int, error) {
104-
return 585, nil
105+
// ensure a changed value on each read, otherwise no event will be published
106+
lastRawValue++
107+
if lastRawValue > 585 {
108+
lastRawValue = 584
109+
}
110+
return lastRawValue, nil
105111
}
106112

107113
// act: start cyclic reading
108114
require.NoError(t, d.Start())
109115

116+
// wait some time to ensure the cyclic go routine is working
117+
time.Sleep(15 * time.Millisecond)
118+
119+
var eventValue float64
110120
_ = d.Once(d.Event(Value), func(data interface{}) {
111-
assert.Equal(t, "31.62", fmt.Sprintf("%.2f", data.(float64)))
121+
eventValue = data.(float64)
112122
sem <- true
113123
})
114124

115-
// assert: value was published
125+
// assert: value was published and is in expected delta
116126
select {
117127
case <-sem:
118-
case <-time.After(1 * time.Second):
128+
require.NoError(t, d.Halt())
129+
case <-time.After(100 * time.Millisecond):
119130
require.Fail(t, "Grove Temperature Sensor Event \"Value\" was not published")
120131
}
121132

122-
assert.InDelta(t, 31.61532462352477, d.Temperature(), 0.0)
133+
assert.InDelta(t, eventValue, d.Temperature(), 0.0)
134+
assert.InDelta(t, 31.61532462352477, d.Temperature(), 31.61532462352477-31.52208881030674)
123135
}

drivers/aio/temperature_sensor_driver_test.go

+22-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package aio
33

44
import (
55
"errors"
6-
"fmt"
76
"strings"
87
"testing"
98
"time"
@@ -123,7 +122,7 @@ func TestTemperatureSensorDriver_LinearScaler(t *testing.T) {
123122
got, err := d.Read()
124123
// assert
125124
require.NoError(t, err)
126-
assert.InDelta(t, tc.want, got, 0.0)
125+
assert.InDelta(t, tc.want, got, 1.0e-14)
127126
})
128127
}
129128
}
@@ -136,23 +135,39 @@ func TestTemperatureSensorWithSensorCyclicRead_PublishesTemperatureInCelsius(t *
136135
ntc := TemperatureSensorNtcConf{TC0: 25, R0: 10000.0, B: 3975} // Ohm, R25=10k
137136
d.SetNtcScaler(1023, 10000, false, ntc) // Ohm, reference value: 1023, series R: 10k
138137

138+
// 584: 31.52208881030674, 585: 31.61532462352477
139+
lastRawValue := 585
139140
a.analogReadFunc = func() (int, error) {
140-
return 585, nil
141+
// ensure a changed value on each read, otherwise no event will be published
142+
lastRawValue++
143+
if lastRawValue > 585 {
144+
lastRawValue = 584
145+
}
146+
return lastRawValue, nil
141147
}
142148

149+
// act: start cyclic reading
143150
require.NoError(t, d.Start())
151+
152+
// wait some time to ensure the cyclic go routine is working
153+
time.Sleep(15 * time.Millisecond)
154+
155+
var eventValue float64
144156
_ = d.Once(d.Event(Value), func(data interface{}) {
145-
assert.Equal(t, "31.62", fmt.Sprintf("%.2f", data.(float64)))
157+
eventValue = data.(float64)
146158
sem <- true
147159
})
148160

161+
// assert: value was published and is in expected delta
149162
select {
150163
case <-sem:
151-
case <-time.After(1 * time.Second):
152-
require.Fail(t, " Temperature Sensor Event \"Data\" was not published")
164+
require.NoError(t, d.Halt())
165+
case <-time.After(100 * time.Millisecond):
166+
require.Fail(t, "Grove Temperature Sensor Event \"Value\" was not published")
153167
}
154168

155-
assert.InDelta(t, 31.61532462352477, d.Value(), 0.0)
169+
assert.InDelta(t, eventValue, d.Temperature(), 0.0)
170+
assert.InDelta(t, 31.61532462352477, d.Value(), 31.61532462352477-31.52208881030674)
156171
}
157172

158173
func TestTemperatureSensorWithSensorCyclicRead_PublishesError(t *testing.T) {

drivers/i2c/mpl115a2_driver_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func TestMPL115A2ReadData(t *testing.T) {
9090
assert.Equal(t, uint8(0x12), a.written[3])
9191
assert.Equal(t, uint8(0x00), a.written[4])
9292
assert.Equal(t, uint8(0x00), a.written[5])
93-
assert.InDelta(t, float32(96.585915), press, 0.0)
93+
assert.InDelta(t, float32(96.585915), press, 1.0e-5)
9494
assert.InDelta(t, float32(23.317757), temp, 0.0)
9595
}
9696

drivers/i2c/sht2x_driver_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func TestSHT2xMeasurements(t *testing.T) {
7878
_ = d.Start()
7979
temp, err := d.Temperature()
8080
require.NoError(t, err)
81-
assert.InDelta(t, float32(18.809052), temp, 0.0)
81+
assert.InDelta(t, float32(18.809052), temp, 1.0e-5)
8282
hum, err := d.Humidity()
8383
require.NoError(t, err)
8484
assert.InDelta(t, float32(40.279907), hum, 0.0)

0 commit comments

Comments
 (0)