Implemented MQTT events and added additional test cases

This commit is contained in:
Ziver Koc 2024-09-25 00:16:07 +02:00
parent 3ef524accd
commit a980bc4946
15 changed files with 364 additions and 26 deletions

View file

@ -2,6 +2,7 @@ package se.hal.plugin.mqtt.detector;
import org.junit.Test;
import se.hal.plugin.mqtt.device.HalMqttDeviceConfig;
import se.hal.plugin.mqtt.device.HalMqttOnOffEventConfig;
import se.hal.plugin.mqtt.device.HalMqttParticularMatterDeviceConfig;
import se.hal.test.MockHalDeviceReportListener;
@ -22,6 +23,11 @@ public class Zigbee2mqttDetectorTest {
devices = detector.parseTopic("invalid/topic", new byte[]{});
assertEquals(0, devices.size());
devices = detector.parseTopic("zigbee2mqtt/Kitchen Plant Light", "{\"power\":10.48,\"state\":\"ON\"}".getBytes(StandardCharsets.UTF_8));
assertEquals(1, devices.size());
assertEquals(new HalMqttOnOffEventConfig("zigbee2mqtt/Kitchen Plant Light", "$.state"), devices.get(0));
}
/*
@Test

View file

@ -0,0 +1,25 @@
package se.hal.plugin.mqtt.device;
import org.junit.Test;
import se.hal.struct.devicedata.HumiditySensorData;
import se.hal.struct.devicedata.TemperatureSensorData;
import zutil.converter.Converter;
import java.nio.charset.StandardCharsets;
import static org.junit.Assert.*;
import static se.hal.test.HalAssert.assertEqualsIgnoreTimestamp;
public class HalMqttHumidityDeviceConfigTest {
@Test
public void getDeviceDataRaw() {
HalMqttHumidityDeviceConfig config = new HalMqttHumidityDeviceConfig();
assertEqualsIgnoreTimestamp(null, config.getDeviceData(null));
assertEqualsIgnoreTimestamp(null, config.getDeviceData("".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(new HumiditySensorData(0, 0), config.getDeviceData(Converter.toBytes(0)));
assertEqualsIgnoreTimestamp(new HumiditySensorData(10, 0), config.getDeviceData(Converter.toBytes(10)));
}
}

View file

@ -0,0 +1,56 @@
package se.hal.plugin.mqtt.device;
import org.junit.Test;
import se.hal.struct.devicedata.OnOffEventData;
import java.nio.charset.StandardCharsets;
import static se.hal.test.HalAssert.assertEqualsIgnoreTimestamp;
public class HalMqttOnOffEventConfigTest {
private static final OnOffEventData ON_EVENT = new OnOffEventData(true, 0);
private static final OnOffEventData OFF_EVENT = new OnOffEventData(false, 0);
@Test
public void getDeviceDataRaw() {
HalMqttOnOffEventConfig config = new HalMqttOnOffEventConfig();
assertEqualsIgnoreTimestamp(null, config.getDeviceData(null));
assertEqualsIgnoreTimestamp(null, config.getDeviceData("".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(null, config.getDeviceData("unknown".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(OFF_EVENT, config.getDeviceData("OFF".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(OFF_EVENT, config.getDeviceData("off".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(ON_EVENT, config.getDeviceData("ON".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(ON_EVENT, config.getDeviceData("on".getBytes(StandardCharsets.UTF_8)));
config.setValueOnString("online");
config.setValueOffString("offline");
assertEqualsIgnoreTimestamp(OFF_EVENT, config.getDeviceData("OFFLINE".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(OFF_EVENT, config.getDeviceData("offline".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(ON_EVENT, config.getDeviceData("ONLINE".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(ON_EVENT, config.getDeviceData("online".getBytes(StandardCharsets.UTF_8)));
}
@Test
public void getDeviceDataJson() {
HalMqttOnOffEventConfig config = new HalMqttOnOffEventConfig();
config.setJsonPath("$.state");
assertEqualsIgnoreTimestamp(null, config.getDeviceData("{\"power\":10.48,\"state\":\"\"}".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(null, config.getDeviceData("{\"power\":10.48,\"state\":\"unknown\"}".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(OFF_EVENT, config.getDeviceData("{\"power\":10.48,\"state\":\"OFF\"}".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(OFF_EVENT, config.getDeviceData("{\"power\":10.48,\"state\":\"off\"}".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(ON_EVENT, config.getDeviceData("{\"power\":10.48,\"state\":\"ON\"}".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(ON_EVENT, config.getDeviceData("{\"power\":10.48,\"state\":\"on\"}".getBytes(StandardCharsets.UTF_8)));
config.setValueOnString("online");
config.setValueOffString("offline");
assertEqualsIgnoreTimestamp(OFF_EVENT, config.getDeviceData("{\"power\":10.48,\"state\":\"OFFLINE\"}".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(OFF_EVENT, config.getDeviceData("{\"power\":10.48,\"state\":\"offline\"}".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(ON_EVENT, config.getDeviceData("{\"power\":10.48,\"state\":\"ONLINE\"}".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(ON_EVENT, config.getDeviceData("{\"power\":10.48,\"state\":\"online\"}".getBytes(StandardCharsets.UTF_8)));
}
}

View file

@ -0,0 +1,25 @@
package se.hal.plugin.mqtt.device;
import org.junit.Test;
import se.hal.struct.devicedata.HumiditySensorData;
import se.hal.struct.devicedata.ParticulateMatterSensorData;
import zutil.converter.Converter;
import java.nio.charset.StandardCharsets;
import static org.junit.Assert.*;
import static se.hal.test.HalAssert.assertEqualsIgnoreTimestamp;
public class HalMqttParticularMatterDeviceConfigTest {
@Test
public void getDeviceDataRaw() {
HalMqttParticularMatterDeviceConfig config = new HalMqttParticularMatterDeviceConfig();
assertEqualsIgnoreTimestamp(null, config.getDeviceData(null));
assertEqualsIgnoreTimestamp(null, config.getDeviceData("".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(new ParticulateMatterSensorData(0, 0), config.getDeviceData(Converter.toBytes(0)));
assertEqualsIgnoreTimestamp(new ParticulateMatterSensorData(10, 0), config.getDeviceData(Converter.toBytes(10)));
}
}

View file

@ -0,0 +1,24 @@
package se.hal.plugin.mqtt.device;
import org.junit.Test;
import se.hal.struct.devicedata.TemperatureSensorData;
import zutil.converter.Converter;
import java.nio.charset.StandardCharsets;
import static org.junit.Assert.*;
import static se.hal.test.HalAssert.assertEqualsIgnoreTimestamp;
public class HalMqttTemperatureDeviceConfigTest {
@Test
public void getDeviceDataRaw() {
HalMqttTemperatureDeviceConfig config = new HalMqttTemperatureDeviceConfig();
assertEqualsIgnoreTimestamp(null, config.getDeviceData(null));
assertEqualsIgnoreTimestamp(null, config.getDeviceData("".getBytes(StandardCharsets.UTF_8)));
assertEqualsIgnoreTimestamp(new TemperatureSensorData(0, 0), config.getDeviceData(Converter.toBytes(0)));
assertEqualsIgnoreTimestamp(new TemperatureSensorData(10, 0), config.getDeviceData(Converter.toBytes(10)));
}
}