File tree Expand file tree Collapse file tree 2 files changed +28
-2
lines changed
crates/core/tedge_agent/src/entity_manager Expand file tree Collapse file tree 2 files changed +28
-2
lines changed Original file line number Diff line number Diff line change @@ -149,7 +149,7 @@ impl Server for EntityStoreServer {
149
149
}
150
150
151
151
impl EntityStoreServer {
152
- async fn process_mqtt_message ( & mut self , message : MqttMessage ) {
152
+ pub ( crate ) async fn process_mqtt_message ( & mut self , message : MqttMessage ) {
153
153
if let Ok ( ( topic_id, channel) ) = self . mqtt_schema . entity_channel_of ( & message. topic ) {
154
154
if let Channel :: EntityMetadata = channel {
155
155
self . process_entity_registration ( topic_id, message. payload_bytes ( ) )
@@ -219,7 +219,11 @@ impl EntityStoreServer {
219
219
}
220
220
221
221
if let Channel :: EntityTwinData { fragment_key } = channel {
222
- let fragment_value = serde_json:: from_slice ( message. payload_bytes ( ) ) ?;
222
+ let fragment_value = if message. payload ( ) . is_empty ( ) {
223
+ Value :: Null
224
+ } else {
225
+ serde_json:: from_slice ( message. payload_bytes ( ) ) ?
226
+ } ;
223
227
let twin_message = EntityTwinMessage :: new ( topic_id, fragment_key, fragment_value) ;
224
228
self . entity_store . update_twin_fragment ( twin_message) ?;
225
229
}
Original file line number Diff line number Diff line change @@ -18,6 +18,7 @@ use tedge_actors::Sender;
18
18
use tedge_actors:: Server ;
19
19
use tedge_api:: entity:: EntityMetadata ;
20
20
use tedge_api:: entity:: EntityType ;
21
+ use tedge_api:: mqtt_topics:: EntityTopicId ;
21
22
use tedge_mqtt_ext:: test_helpers:: assert_received_contains_str;
22
23
use tedge_mqtt_ext:: MqttConnection ;
23
24
use tedge_mqtt_ext:: MqttConnector ;
@@ -191,6 +192,27 @@ async fn delete_entity_tree_clears_entities_bottom_up() {
191
192
. await ;
192
193
}
193
194
195
+ #[ tokio:: test]
196
+ async fn clear_entity_twin_data ( ) {
197
+ let ( mut entity_store, _mqtt_box, _mqtt_sender) = entity:: server ( "device-under-test" ) ;
198
+
199
+ entity_store
200
+ . process_mqtt_message ( MqttMessage :: from ( ( "te/device/main///twin/x" , "9" ) ) . with_retain ( ) )
201
+ . await ;
202
+ let entity = entity_store
203
+ . get ( & "device/main//" . parse :: < EntityTopicId > ( ) . unwrap ( ) )
204
+ . unwrap ( ) ;
205
+ assert_eq ! ( entity. twin_data. get( "x" ) , Some ( & 9 . into( ) ) ) ;
206
+
207
+ entity_store
208
+ . process_mqtt_message ( MqttMessage :: from ( ( "te/device/main///twin/x" , "" ) ) . with_retain ( ) )
209
+ . await ;
210
+ let entity = entity_store
211
+ . get ( & "device/main//" . parse :: < EntityTopicId > ( ) . unwrap ( ) )
212
+ . unwrap ( ) ;
213
+ assert_eq ! ( entity. twin_data. get( "x" ) , None ) ;
214
+ }
215
+
194
216
proptest ! {
195
217
//#![proptest_config(proptest::prelude::ProptestConfig::with_cases(1000))]
196
218
#[ test]
You can’t perform that action at this time.
0 commit comments