Add ActiveDevice + DeviceRegistry + HubEnvelopes + IDeviceClient/Channel implementations
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
using System.Net.WebSockets;
|
||||
using backend.DeviceHub;
|
||||
using FluentAssertions;
|
||||
using Xunit;
|
||||
|
||||
namespace backend.tests;
|
||||
|
||||
public class DeviceRegistryTests
|
||||
{
|
||||
[Fact]
|
||||
public void Register_unregister_round_trip()
|
||||
{
|
||||
var reg = new DeviceRegistry();
|
||||
var id = Guid.NewGuid();
|
||||
var dev = new ActiveDevice(id, new ClientWebSocket());
|
||||
reg.TryRegister(dev).Should().BeTrue();
|
||||
reg.TryRegister(dev).Should().BeFalse();
|
||||
reg.IsOnline(id).Should().BeTrue();
|
||||
reg.OnlineCount.Should().Be(1);
|
||||
|
||||
reg.Unregister(id).Should().BeTrue();
|
||||
reg.IsOnline(id).Should().BeFalse();
|
||||
reg.OnlineCount.Should().Be(0);
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,28 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Text.Json;
|
||||
using backend.DeviceHub;
|
||||
using backend.Tools;
|
||||
|
||||
namespace backend.tests;
|
||||
|
||||
// Slim version for Tasks 9-15. Task 16 reopens this file to add IDeviceClient + envelope sending.
|
||||
public class FakeDeviceChannel : IDeviceChannel
|
||||
public class FakeDeviceChannel : IDeviceChannel, IDeviceClient
|
||||
{
|
||||
public List<HubEnvelope> SentEnvelopes { get; } = new();
|
||||
public List<byte[]> SentBinary { get; } = new();
|
||||
public ConcurrentQueue<JsonElement> PiToolReplies { get; } = new();
|
||||
|
||||
public Task SendEnvelopeAsync<T>(T envelope, CancellationToken ct) where T : HubEnvelope
|
||||
{
|
||||
SentEnvelopes.Add(envelope);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task SendBinaryAsync(ReadOnlyMemory<byte> bytes, CancellationToken ct)
|
||||
{
|
||||
SentBinary.Add(bytes.ToArray());
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task<JsonElement> CallPiToolAsync(string name, JsonElement args, CancellationToken ct)
|
||||
{
|
||||
if (PiToolReplies.TryDequeue(out var reply))
|
||||
|
||||
Reference in New Issue
Block a user