Skip to content

Commit f3c5281

Browse files
committed
Add Weather Data Test Validation
1 parent abcbb23 commit f3c5281

4 files changed

Lines changed: 75 additions & 15 deletions

File tree

‎build.gradle‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ dependencies {
4242

4343
testImplementation project(':sensorhub-driver-ffmpeg')
4444
testImplementation project(':sensorhub-driver-fakegps')
45+
testImplementation project(':sensorhub-driver-fakeweather')
4546

4647

4748
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
@@ -68,10 +69,19 @@ jar {
6869
test {
6970
useJUnitPlatform()
7071
forkEvery = 1
72+
maxParallelForks = 1
7173
}
7274

7375
project(':sensorhub-driver-fakegps') {
7476
tasks.named('test') {
7577
enabled = false
7678
}
77-
}
79+
}
80+
81+
82+
project(':sensorhub-driver-fakeweather') {
83+
tasks.named('test') {
84+
enabled = false
85+
}
86+
}
87+

‎settings.gradle‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ project(":sensorhub-driver-ffmpeg").projectDir = file("submodules/osh-addons/sen
1212

1313
include(":sensorhub-driver-fakegps")
1414
project(":sensorhub-driver-fakegps").projectDir = file("submodules/osh-addons/sensors/simulated/sensorhub-driver-fakegps")
15+
16+
include(":sensorhub-driver-fakeweather")
17+
project(":sensorhub-driver-fakeweather").projectDir = file("submodules/osh-addons/sensors/simulated/sensorhub-driver-fakeweather")

‎src/main/resources/testconfig.json‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,5 +264,20 @@
264264
"autoStart": true,
265265
"moduleClass": "org.sensorhub.impl.sensor.fakegps.FakeGpsSensor",
266266
"name": "New Simulated GPS Sensor"
267+
},
268+
{
269+
"objClass": "org.sensorhub.impl.sensor.fakeweather.FakeWeatherConfig",
270+
"serialNumber": "0123456879",
271+
"location": {
272+
"objClass": "org.sensorhub.api.sensor.PositionConfig$LLALocation",
273+
"lat": 34.8038,
274+
"lon": -86.7228,
275+
"alt": 0.0
276+
},
277+
"lastUpdated": "2025-11-10T12:35:33.187-0600",
278+
"id": "9e2849b2-16a1-4f59-817c-590d13845869",
279+
"autoStart": true,
280+
"moduleClass": "org.sensorhub.impl.sensor.fakeweather.FakeWeatherSensor",
281+
"name": "New Simulated Weather Sensor"
267282
}
268-
]
283+
]

‎src/test/java/org/sensorhub/oshconnect/LiveTest.java‎

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,14 @@ public class LiveTest {
3434
final private AtomicInteger testNumFrames = new AtomicInteger(5);
3535

3636
final private AtomicInteger testNumGpsCoordinates = new AtomicInteger(2);
37+
final private AtomicInteger testNumWeatherCoordinates = new AtomicInteger(2);
3738

3839
final private AtomicBoolean failed = new AtomicBoolean(false);
3940

4041
private OSHConnect oshConnect = null;
4142

4243
private enum SystemType {
43-
FRAME, GPS
44+
FRAME, GPS, WEATHER
4445
}
4546

4647
private Thread thread = null;
@@ -73,7 +74,7 @@ void createNode() {
7374
String lUrl = "http://127.0.0.1:8181/sensorhub";
7475
node = oshConnect.createNode(lUrl, isSecure, "anonymous", "anonymous");
7576

76-
//mstinson:testing - this is only for adding configurations
77+
//mstinson:testing - this is for adding configurations
7778
// thread.join();
7879
} catch (InterruptedException e) {
7980
throw new RuntimeException(e);
@@ -85,6 +86,26 @@ void removeNode() {
8586
oshConnect.shutdown();
8687
}
8788

89+
void validateWeatherData( byte[] data ) {
90+
var dataObject = new JSONObject(new String(data));
91+
assertFalse(dataObject.isEmpty());
92+
93+
var result = dataObject.optJSONObject("result");
94+
assertFalse(result.isEmpty());
95+
96+
var temperature = result.getFloat("temperature");
97+
assertFalse( temperature < 0.0 );
98+
99+
var pressure = result.getFloat("pressure");
100+
assertFalse( pressure < 0.0 );
101+
102+
var windDirection = result.getFloat("windDirection");
103+
assertFalse( windDirection < 0.0 );
104+
105+
var windSpeed = result.getFloat("windSpeed");
106+
assertFalse( windSpeed < 0.0 );
107+
108+
}
88109

89110
void validateGpsData( byte[] data ) {
90111

@@ -109,8 +130,6 @@ void validateGpsData( byte[] data ) {
109130
var lonDelta = Math.abs(-86.60 - lon);
110131
assertFalse( lonDelta > 0.1);
111132

112-
testNumGpsCoordinates.set(testNumGpsCoordinates.get() - 1);
113-
114133
System.out.println("Gps Data: Lat: " + lat + " Lon: " + lon + "\n");
115134
}
116135

@@ -152,8 +171,6 @@ void validateFrame( byte[] data ) {
152171
failed.set(true);
153172
}
154173

155-
testNumFrames.set(testNumFrames.get()-1);
156-
157174
System.out.println("CLIENT Timestamp: " + instant.toString() + " CLIENT Framesize: " + frameSize + "\n");
158175
} catch (JSONException e) {
159176
throw new RuntimeException(e);
@@ -176,6 +193,13 @@ void TestGps() {
176193
TestSystem(systemId, SystemType.GPS, testNumGpsCoordinates);
177194
}
178195

196+
@Test
197+
void TestWeather() {
198+
String systemId = "03ie1mkrr9r0"; //weather driver system id
199+
200+
TestSystem(systemId, SystemType.WEATHER, testNumWeatherCoordinates);
201+
}
202+
179203
private void TestSystem( String systemId, SystemType systemType, AtomicInteger sampleCount ) {
180204
assert null != oshConnect;
181205

@@ -198,15 +222,23 @@ private void TestSystem( String systemId, SystemType systemType, AtomicInteger s
198222
var dataStreamManager = oshConnect.getDataStreamManager();
199223
StreamHandler streamHandler = dataStreamManager.createDataStreamHandler(( args ) -> {
200224

201-
switch (systemType) {
202-
case FRAME -> validateFrame(args.getData());
203-
case GPS -> validateGpsData(args.getData());
225+
if ( sampleCount.get() > 0 ) {
226+
227+
switch (systemType) {
228+
case FRAME -> validateFrame(args.getData());
229+
case GPS -> validateGpsData(args.getData());
230+
case WEATHER -> validateWeatherData(args.getData());
231+
}
232+
233+
sampleCount.set(sampleCount.get()-1);
204234
}
235+
205236
});
206237

207238
switch (systemType) {
208239
case FRAME -> streamHandler.setRequestFormat(RequestFormat.SWE_BINARY);
209240
case GPS -> streamHandler.setRequestFormat(RequestFormat.OM_JSON);
241+
case WEATHER -> streamHandler.setRequestFormat(RequestFormat.OM_JSON);
210242
}
211243

212244
OSHSystem cSystem = systemsResult.get(0);
@@ -217,10 +249,10 @@ private void TestSystem( String systemId, SystemType systemType, AtomicInteger s
217249
try {
218250
var dataStreams = cSystem.discoverDataStreams();
219251

220-
var aDs = dataStreams.get(0);
221-
222-
assert aDs != null;
223-
streamHandler.addDataStreamListener(aDs);
252+
for ( var dStream : dataStreams ) {
253+
assert dStream != null;
254+
streamHandler.addDataStreamListener(dStream);
255+
}
224256

225257
} catch (ExecutionException | InterruptedException e) {
226258
throw new RuntimeException(e);

0 commit comments

Comments
 (0)