Skip to content

Commit ea4237e

Browse files
authored
Dependency upgrade and MQTT breaking fix (#869)
* Update dependecies and fix MQTT breaking changes * fixed nullable possible return
1 parent 75eb52b commit ea4237e

File tree

21 files changed

+37
-40
lines changed

21 files changed

+37
-40
lines changed

src/AppModel/NetDaemon.AppModel.Tests/NetDaemon.AppModel.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
</None>
1313
</ItemGroup>
1414
<ItemGroup>
15-
<PackageReference Include="FluentAssertions" Version="6.10.0" />
15+
<PackageReference Include="FluentAssertions" Version="6.11.0" />
1616
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
1717
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
1818
<PackageReference Include="System.Reactive" Version="5.0.0" />

src/AppModel/NetDaemon.AppModel/NetDaemon.AppModel.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.5.0" />
3131
<PackageReference Include="System.Reactive" Version="5.0.0" />
3232
<PackageReference Include="System.IO.Pipelines" Version="7.0.0" />
33-
<PackageReference Include="Roslynator.Analyzers" Version="4.2.0">
33+
<PackageReference Include="Roslynator.Analyzers" Version="4.3.0">
3434
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
3535
<PrivateAssets>all</PrivateAssets>
3636
</PackageReference>

src/Client/NetDaemon.HassClient.Debug/NetDaemon.HassClient.Debug.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
3535
<PackageReference Include="System.Reactive" Version="5.0.0" />
3636
<PackageReference Include="System.IO.Pipelines" Version="7.0.0" />
37-
<PackageReference Include="Roslynator.Analyzers" Version="4.2.0">
37+
<PackageReference Include="Roslynator.Analyzers" Version="4.3.0">
3838
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
3939
<PrivateAssets>all</PrivateAssets>
4040
</PackageReference>

src/Client/NetDaemon.HassClient.Tests/ExtensionsTest/MqttEntityManagerTests/MessageSenderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public async Task TopicAndPayloadAreSet()
1313
await mqttSetup.MessageSender.SendMessageAsync("topic", "payload", true, MqttQualityOfServiceLevel.AtMostOnce);
1414
var publishedMessage = mqttSetup.LastPublishedMessage;
1515

16-
var payloadAsText = System.Text.Encoding.Default.GetString(publishedMessage.Payload);
16+
var payloadAsText = System.Text.Encoding.Default.GetString(publishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
1717

1818
publishedMessage.Topic.Should().Be("topic");
1919
payloadAsText.Should().Be("payload");

src/Client/NetDaemon.HassClient.Tests/ExtensionsTest/MqttEntityManagerTests/MqttEntityManagerTester.cs

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using NetDaemon.Extensions.MqttEntityManager;
2-
using NetDaemon.Extensions.MqttEntityManager.Models;
32
using NetDaemon.HassClient.Tests.ExtensionsTest.MqttEntityManagerTests.TestHelpers;
43

54
namespace NetDaemon.HassClient.Tests.ExtensionsTest.MqttEntityManagerTests;
@@ -23,7 +22,7 @@ public async Task CreateWithNoOptionsSetsBaseConfig()
2322
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
2423

2524
await entityManager.CreateAsync("domain.sensor");
26-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
25+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>() );
2726

2827
payload?.Count.Should().Be(6);
2928
payload?["name"].ToString().Should().Be("sensor");
@@ -41,7 +40,7 @@ public async Task CreateWithDefaultOptionsSetsBaseConfig()
4140
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
4241

4342
await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions());
44-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
43+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
4544

4645
payload?.Count.Should().Be(6);
4746
payload?["name"].ToString().Should().Be("sensor");
@@ -59,7 +58,7 @@ public async Task CreateCanSetUniqueId()
5958
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
6059

6160
await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions(UniqueId: "my_id"));
62-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
61+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
6362

6463
payload?["unique_id"].ToString().Should().Be("my_id");
6564
}
@@ -71,7 +70,7 @@ public async Task CreateSetsObjectId()
7170
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
7271

7372
await entityManager.CreateAsync("domain.the_id");
74-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
73+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
7574

7675
payload?["object_id"].ToString().Should().Be("the_id");
7776
}
@@ -83,7 +82,7 @@ public async Task CreateCanSetDeviceClass()
8382
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
8483

8584
await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions(DeviceClass: "classy"));
86-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
85+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
8786

8887
payload?["device_class"].ToString().Should().Be("classy");
8988
}
@@ -95,7 +94,7 @@ public async Task CreateCanSetName()
9594
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
9695

9796
await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions(Name: "george"));
98-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
97+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
9998

10099
payload?["name"].ToString().Should().Be("george");
101100
}
@@ -131,7 +130,7 @@ public async Task CreateCanSetAdditionalOptions()
131130
var otherOptions = new { sub_class = "lights", up_state = "live" };
132131

133132
await entityManager.CreateAsync("domain.sensor", additionalConfig: otherOptions);
134-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
133+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
135134

136135
payload?["sub_class"].ToString().Should().Be("lights");
137136
payload?["up_state"].ToString().Should().Be("live");
@@ -146,7 +145,7 @@ public async Task CreateCanOverrideBaseConfig()
146145
var otherOptions = new { command_topic = "my/topic" };
147146

148147
await entityManager.CreateAsync("domain.sensor", additionalConfig: otherOptions);
149-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
148+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
150149

151150
payload?["command_topic"].ToString().Should().Be("my/topic");
152151
}
@@ -158,7 +157,7 @@ public async Task CreateAvailabilityTopicOffByDefault()
158157
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
159158

160159
await entityManager.CreateAsync("domain.sensor");
161-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
160+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
162161

163162
payload?.ContainsKey("availability_topic").Should().BeFalse();
164163
}
@@ -170,7 +169,7 @@ public async Task CreateAvailabilityTopicSetForAvailUp()
170169
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
171170

172171
await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions(PayloadAvailable: "up"));
173-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
172+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
174173

175174
payload?.ContainsKey("availability_topic").Should().BeTrue();
176175
payload?["availability_topic"].ToString().Should().Be("homeassistant/domain/sensor/availability");
@@ -184,7 +183,7 @@ public async Task CreateAvailabilityTopicSetForAvailDown()
184183
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
185184

186185
await entityManager.CreateAsync("domain.sensor", new EntityCreationOptions(PayloadNotAvailable: "down"));
187-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
186+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
188187

189188
payload?.ContainsKey("availability_topic").Should().BeTrue();
190189
payload?["availability_topic"].ToString().Should().Be("homeassistant/domain/sensor/availability");
@@ -199,7 +198,7 @@ public async Task CanRemove()
199198

200199
await entityManager.RemoveAsync("domain.sensor");
201200

202-
mqttSetup.LastPublishedMessage.Payload.Should().BeNull();
201+
mqttSetup.LastPublishedMessage.PayloadSegment.Should().BeEmpty();
203202
}
204203

205204
[Fact]
@@ -209,7 +208,7 @@ public async Task CanSetState()
209208
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
210209

211210
await entityManager.SetStateAsync("domain.sensor", "NewState");
212-
var payload = System.Text.Encoding.Default.GetString(mqttSetup.LastPublishedMessage.Payload);
211+
var payload = Encoding.Default.GetString(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
213212

214213
mqttSetup.LastPublishedMessage.Topic.Should().Be("homeassistant/domain/sensor/state");
215214
payload.Should().Be("NewState");
@@ -224,7 +223,7 @@ public async Task CanSetStateToBlank()
224223
await entityManager.SetStateAsync("domain.sensor", "");
225224

226225
mqttSetup.LastPublishedMessage.Topic.Should().Be("homeassistant/domain/sensor/state");
227-
mqttSetup.LastPublishedMessage.Payload.Should().BeNull();
226+
mqttSetup.LastPublishedMessage.PayloadSegment.Should().BeEmpty();
228227
}
229228

230229
[Fact]
@@ -235,7 +234,7 @@ public async Task CanSetAttributes()
235234

236235
var attributes = new { colour = "purple", ziggy = "stardust" };
237236
await entityManager.SetAttributesAsync("domain.sensor", attributes);
238-
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.Payload);
237+
var payload = PayloadToDictionary(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
239238

240239
mqttSetup.LastPublishedMessage.Topic.Should().Be("homeassistant/domain/sensor/attributes");
241240
payload?["colour"].ToString().Should().Be("purple");
@@ -249,7 +248,7 @@ public async Task CanSetAvailability()
249248
var entityManager = new MqttEntityManager(mqttSetup.MessageSender, null!, GetOptions());
250249

251250
await entityManager.SetAvailabilityAsync("domain.sensor", "up");
252-
var payload = System.Text.Encoding.Default.GetString(mqttSetup.LastPublishedMessage.Payload);
251+
var payload = Encoding.Default.GetString(mqttSetup.LastPublishedMessage.PayloadSegment.Array ?? Array.Empty<byte>());
253252

254253
mqttSetup.LastPublishedMessage.Topic.Should().Be("homeassistant/domain/sensor/availability");
255254
payload.Should().Be("up");
@@ -259,7 +258,7 @@ public async Task CanSetAvailability()
259258
private Dictionary<string, object>? PayloadToDictionary(byte[] payload)
260259
{
261260
return JsonSerializer.Deserialize<Dictionary<string, object>>(
262-
System.Text.Encoding.Default.GetString(payload)
261+
Encoding.Default.GetString(payload)
263262
);
264263
}
265264

src/Client/NetDaemon.HassClient.Tests/ExtensionsTest/MqttEntityManagerTests/TestHelpers/MockMqttMessageSenderSetup.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ public MockMqttMessageSenderSetup()
2828
// ReSharper disable once MemberCanBePrivate.Global
2929
public void SetupMessageReceiver()
3030
{
31-
var publishResult = new MqttClientPublishResult() { ReasonCode = MqttClientPublishReasonCode.Success };
32-
3331
// Ensure that when the MQTT Client is called its published message is saved
3432
MqttClient.Setup(m => m.EnqueueAsync(It.IsAny<MqttApplicationMessage>()))
3533
.Callback<MqttApplicationMessage>((message) =>

src/Client/NetDaemon.HassClient.Tests/NetDaemon.HassClient.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<IsPackable>false</IsPackable>
88
</PropertyGroup>
99
<ItemGroup>
10-
<PackageReference Include="FluentAssertions" Version="6.10.0" />
10+
<PackageReference Include="FluentAssertions" Version="6.11.0" />
1111
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
1212
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
1313
<PackageReference Include="System.Reactive" Version="5.0.0" />

src/Client/NetDaemon.HassClient/NetDaemon.Client.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
2727
<PackageReference Include="System.Reactive" Version="5.0.0" />
2828
<PackageReference Include="System.IO.Pipelines" Version="7.0.0" />
29-
<PackageReference Include="Roslynator.Analyzers" Version="4.2.0">
29+
<PackageReference Include="Roslynator.Analyzers" Version="4.3.0">
3030
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
3131
<PrivateAssets>all</PrivateAssets>
3232
</PackageReference>

src/Extensions/NetDaemon.Extensions.Logging/NetDaemon.Extensions.Logging.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
2626
<PackageReference Include="Serilog.AspNetCore" Version="6.1.0" />
2727
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
28-
<PackageReference Include="Roslynator.Analyzers" Version="4.2.0">
28+
<PackageReference Include="Roslynator.Analyzers" Version="4.3.0">
2929
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
3030
<PrivateAssets>all</PrivateAssets>
3131
</PackageReference>

src/Extensions/NetDaemon.Extensions.MqttEntityManager/MessageSubscriber.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ private Task OnMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs msg)
100100
{
101101
try
102102
{
103-
var payload = ByteArrayHelper.SafeToString(msg.ApplicationMessage.Payload);
103+
var payload = ByteArrayHelper.SafeToString(msg.ApplicationMessage.PayloadSegment.Array ?? Array.Empty<byte>());
104104
var topic = msg.ApplicationMessage.Topic;
105105
_logger.LogTrace("Subscription received {Payload} from {Topic}", payload, topic);
106106

0 commit comments

Comments
 (0)