Skip to content

Commit bedc647

Browse files
committed
Add unit tests for PublicKeysTruster protocol version validation
1 parent 99bba31 commit bedc647

File tree

1 file changed

+179
-0
lines changed

1 file changed

+179
-0
lines changed
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
using System.Collections.ObjectModel;
2+
using System.Text;
3+
using System.Threading;
4+
using ByteSync.Business.Communications.PublicKeysTrusting;
5+
using ByteSync.Common.Business.EndPoints;
6+
using ByteSync.Common.Business.Sessions.Cloud.Connections;
7+
using ByteSync.Common.Business.Versions;
8+
using ByteSync.Interfaces.Controls.Applications;
9+
using ByteSync.Interfaces.Controls.Communications;
10+
using ByteSync.Interfaces.Controls.Communications.Http;
11+
using ByteSync.Interfaces.Dialogs;
12+
using ByteSync.Interfaces.Factories.ViewModels;
13+
using ByteSync.Services.Communications;
14+
using ByteSync.TestsCommon;
15+
using FluentAssertions;
16+
using Microsoft.Extensions.Logging;
17+
using Moq;
18+
using NUnit.Framework;
19+
20+
namespace ByteSync.Client.UnitTests.Services.Communications;
21+
22+
[TestFixture]
23+
public class PublicKeysTrusterTests : AbstractTester
24+
{
25+
private Mock<IEnvironmentService> _environmentService = null!;
26+
private Mock<ITrustApiClient> _trustApiClient = null!;
27+
private Mock<IPublicKeysManager> _publicKeysManager = null!;
28+
private Mock<ITrustProcessPublicKeysRepository> _trustProcessPublicKeysRepository = null!;
29+
private Mock<IDialogService> _dialogService = null!;
30+
private Mock<IFlyoutElementViewModelFactory> _flyoutElementViewModelFactory = null!;
31+
private Mock<ISessionMemberApiClient> _sessionMemberApiClient = null!;
32+
private Mock<ILogger<PublicKeysTruster>> _logger = null!;
33+
private PublicKeysTruster _publicKeysTruster = null!;
34+
35+
[SetUp]
36+
public void SetUp()
37+
{
38+
_environmentService = new Mock<IEnvironmentService>();
39+
_trustApiClient = new Mock<ITrustApiClient>();
40+
_publicKeysManager = new Mock<IPublicKeysManager>();
41+
_trustProcessPublicKeysRepository = new Mock<ITrustProcessPublicKeysRepository>();
42+
_dialogService = new Mock<IDialogService>();
43+
_flyoutElementViewModelFactory = new Mock<IFlyoutElementViewModelFactory>();
44+
_sessionMemberApiClient = new Mock<ISessionMemberApiClient>();
45+
_logger = new Mock<ILogger<PublicKeysTruster>>();
46+
47+
_environmentService
48+
.Setup(e => e.ClientId)
49+
.Returns("TestClientId");
50+
51+
_environmentService
52+
.Setup(e => e.ClientInstanceId)
53+
.Returns("TestClientInstanceId");
54+
55+
_publicKeysManager
56+
.Setup(m => m.GetMyPublicKeyInfo())
57+
.Returns(new PublicKeyInfo
58+
{
59+
ClientId = "TestClientId",
60+
PublicKey = Encoding.UTF8.GetBytes("TestPublicKey"),
61+
ProtocolVersion = ProtocolVersion.Current
62+
});
63+
64+
_publicKeysTruster = new PublicKeysTruster(
65+
_environmentService.Object,
66+
_trustApiClient.Object,
67+
_publicKeysManager.Object,
68+
_trustProcessPublicKeysRepository.Object,
69+
_dialogService.Object,
70+
_flyoutElementViewModelFactory.Object,
71+
_sessionMemberApiClient.Object,
72+
_logger.Object
73+
);
74+
}
75+
76+
77+
[Test]
78+
public async Task OnTrustPublicKeyRequestedAsync_WithIncompatibleProtocolVersion_ShouldThrowInvalidOperationException()
79+
{
80+
var sessionId = "TestSessionId";
81+
var incompatibleVersion = 2;
82+
var joinerInstanceId = "JoinerInstanceId";
83+
84+
var myPublicKeyCheckData = new PublicKeyCheckData
85+
{
86+
IssuerPublicKeyInfo = new PublicKeyInfo
87+
{
88+
ClientId = "TestClientId",
89+
PublicKey = Encoding.UTF8.GetBytes("TestPublicKey"),
90+
ProtocolVersion = ProtocolVersion.Current
91+
},
92+
Salt = "TestSalt123",
93+
OtherPartyPublicKeyInfo = new PublicKeyInfo
94+
{
95+
ClientId = "JoinerClientId",
96+
PublicKey = Encoding.UTF8.GetBytes("JoinerPublicKey"),
97+
ProtocolVersion = ProtocolVersion.Current
98+
}
99+
};
100+
101+
var joinerPublicKeyCheckData = new PublicKeyCheckData
102+
{
103+
IssuerPublicKeyInfo = new PublicKeyInfo
104+
{
105+
ClientId = "JoinerClientId",
106+
PublicKey = Encoding.UTF8.GetBytes("JoinerPublicKey"),
107+
ProtocolVersion = incompatibleVersion
108+
},
109+
IssuerClientInstanceId = joinerInstanceId,
110+
Salt = "TestSalt123",
111+
ProtocolVersion = incompatibleVersion
112+
};
113+
114+
_trustProcessPublicKeysRepository
115+
.Setup(r => r.GetLocalPublicKeyCheckData(sessionId, joinerInstanceId))
116+
.ReturnsAsync(myPublicKeyCheckData);
117+
118+
var requestParameters = new RequestTrustProcessParameters(sessionId, joinerPublicKeyCheckData, joinerInstanceId);
119+
120+
await FluentActions.Invoking(async () => await _publicKeysTruster.OnTrustPublicKeyRequestedAsync(requestParameters))
121+
.Should()
122+
.ThrowAsync<InvalidOperationException>()
123+
.WithMessage("Protocol version incompatible");
124+
}
125+
126+
[Test]
127+
public async Task OnTrustPublicKeyRequestedAsync_WithCompatibleProtocolVersion_ShouldNotThrow()
128+
{
129+
var sessionId = "TestSessionId";
130+
var joinerInstanceId = "JoinerInstanceId";
131+
132+
var myPublicKeyCheckData = new PublicKeyCheckData
133+
{
134+
IssuerPublicKeyInfo = new PublicKeyInfo
135+
{
136+
ClientId = "TestClientId",
137+
PublicKey = Encoding.UTF8.GetBytes("TestPublicKey"),
138+
ProtocolVersion = ProtocolVersion.Current
139+
},
140+
Salt = "TestSalt123",
141+
OtherPartyPublicKeyInfo = new PublicKeyInfo
142+
{
143+
ClientId = "JoinerClientId",
144+
PublicKey = Encoding.UTF8.GetBytes("JoinerPublicKey"),
145+
ProtocolVersion = ProtocolVersion.Current
146+
}
147+
};
148+
149+
var joinerPublicKeyCheckData = new PublicKeyCheckData
150+
{
151+
IssuerPublicKeyInfo = new PublicKeyInfo
152+
{
153+
ClientId = "JoinerClientId",
154+
PublicKey = Encoding.UTF8.GetBytes("JoinerPublicKey"),
155+
ProtocolVersion = ProtocolVersion.Current
156+
},
157+
IssuerClientInstanceId = joinerInstanceId,
158+
Salt = "TestSalt123",
159+
ProtocolVersion = ProtocolVersion.Current
160+
};
161+
162+
var peerTrustProcessData = new PeerTrustProcessData("JoinerClientId");
163+
164+
_trustProcessPublicKeysRepository
165+
.Setup(r => r.GetLocalPublicKeyCheckData(sessionId, joinerInstanceId))
166+
.ReturnsAsync(myPublicKeyCheckData);
167+
168+
_trustProcessPublicKeysRepository
169+
.Setup(r => r.ResetPeerTrustProcessData(sessionId, "JoinerClientId"))
170+
.ReturnsAsync(peerTrustProcessData);
171+
172+
var requestParameters = new RequestTrustProcessParameters(sessionId, joinerPublicKeyCheckData, joinerInstanceId);
173+
174+
await FluentActions.Invoking(async () => await _publicKeysTruster.OnTrustPublicKeyRequestedAsync(requestParameters))
175+
.Should()
176+
.NotThrowAsync();
177+
}
178+
}
179+

0 commit comments

Comments
 (0)