Skip to content

Commit 3cb78b5

Browse files
authored
Add more PubSub tests (#82)
1 parent 014bee9 commit 3cb78b5

File tree

1 file changed

+37
-38
lines changed

1 file changed

+37
-38
lines changed

Tests/HiveMQtt.Test/HiveMQClient/HiveMQClientPubSubTest.cs

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -55,41 +55,39 @@ public async Task QoS1PubSubAsync()
5555
var testPayload = new string(/*lang=json,strict*/ "{\"interference\": \"1029384\"}");
5656
var client = new HiveMQClient();
5757
var taskCompletionSource = new TaskCompletionSource<bool>();
58+
var messagesReceived = 0;
5859

5960
var connectResult = await client.ConnectAsync().ConfigureAwait(false);
6061
Assert.True(connectResult.ReasonCode == ConnAckReasonCode.Success);
6162

63+
// Subscribe with QoS1
64+
var subResult = await client.SubscribeAsync(testTopic, QualityOfService.AtLeastOnceDelivery).ConfigureAwait(false);
65+
Assert.NotEmpty(subResult.Subscriptions);
66+
Assert.Equal(SubAckReasonCode.GrantedQoS1, subResult.Subscriptions[0].SubscribeReasonCode);
67+
6268
// Set the event handler for the message received event
6369
client.OnMessageReceived += (sender, args) =>
6470
{
71+
messagesReceived++;
6572
Assert.Equal(QualityOfService.AtLeastOnceDelivery, args.PublishMessage.QoS);
6673
Assert.Equal(testTopic, args.PublishMessage.Topic);
6774
Assert.Equal(testPayload, args.PublishMessage.PayloadAsString);
6875

69-
// Disconnect after receiving the message
70-
if (sender != null)
71-
{
72-
var client = (HiveMQClient)sender;
73-
74-
var disconnect = Task.Run(async () =>
75-
{
76-
var disconnectResult = await client.DisconnectAsync().ConfigureAwait(false);
77-
Assert.True(disconnectResult);
78-
return disconnectResult;
79-
});
80-
Assert.True(disconnect.Result);
76+
if (messagesReceived >= 5) {
77+
taskCompletionSource.SetResult(true);
8178
}
82-
taskCompletionSource.SetResult(true);
8379
};
8480

85-
// Subscribe with QoS1
86-
var subResult = await client.SubscribeAsync(testTopic, QualityOfService.AtLeastOnceDelivery).ConfigureAwait(false);
87-
Assert.NotEmpty(subResult.Subscriptions);
88-
Assert.Equal(SubAckReasonCode.GrantedQoS1, subResult.Subscriptions[0].SubscribeReasonCode);
81+
Client.Results.PublishResult result;
8982

90-
// Publish a QoS1 message
91-
var result = await client.PublishAsync(testTopic, testPayload, QualityOfService.AtLeastOnceDelivery).ConfigureAwait(false);
92-
await taskCompletionSource.Task.WaitAsync(TimeSpan.FromSeconds(5)).ConfigureAwait(false);
83+
// Publish 10 messages
84+
for (var i = 0; i < 5; i++)
85+
{
86+
result = await client.PublishAsync(testTopic, testPayload, QualityOfService.AtLeastOnceDelivery).ConfigureAwait(false);
87+
Assert.IsType<Client.Results.PublishResult>(result);
88+
Assert.NotNull(result.QoS1ReasonCode);
89+
Assert.Equal(PubAckReasonCode.Success, result?.QoS1ReasonCode);
90+
}
9391

9492
var taskResult = await taskCompletionSource.Task.WaitAsync(TimeSpan.FromSeconds(5)).ConfigureAwait(false);
9593
Assert.True(taskResult);
@@ -105,37 +103,38 @@ public async Task QoS2PubSubAsync()
105103
var taskCompletionSource = new TaskCompletionSource<bool>();
106104
var connectResult = await client.ConnectAsync().ConfigureAwait(false);
107105
Assert.True(connectResult.ReasonCode == ConnAckReasonCode.Success);
106+
var messagesReceived = 0;
107+
108+
// Subscribe with QoS2
109+
var subResult = await client.SubscribeAsync(testTopic, QualityOfService.ExactlyOnceDelivery).ConfigureAwait(false);
110+
Assert.NotEmpty(subResult.Subscriptions);
111+
Assert.Equal(SubAckReasonCode.GrantedQoS2, subResult.Subscriptions[0].SubscribeReasonCode);
108112

109113
// Set the event handler for the message received event
110114
client.OnMessageReceived += (sender, args) =>
111115
{
116+
messagesReceived++;
112117
Assert.Equal(QualityOfService.ExactlyOnceDelivery, args.PublishMessage.QoS);
113118
Assert.Equal(testTopic, args.PublishMessage.Topic);
114119
Assert.Equal(testPayload, args.PublishMessage.PayloadAsString);
115120

116121
Assert.NotNull(sender);
117122

118-
// Disconnect after receiving the message
119-
var client = (HiveMQClient)sender;
120-
121-
var disconnect = Task.Run(async () =>
122-
{
123-
var disconnectResult = await client.DisconnectAsync().ConfigureAwait(false);
124-
Assert.True(disconnectResult);
125-
return disconnectResult;
126-
});
127-
Assert.True(disconnect.Result);
128-
taskCompletionSource.SetResult(true);
123+
if (messagesReceived >= 5) {
124+
taskCompletionSource.SetResult(true);
125+
}
129126
};
130127

131-
// Subscribe with QoS1
132-
var subResult = await client.SubscribeAsync(testTopic, QualityOfService.ExactlyOnceDelivery).ConfigureAwait(false);
133-
Assert.NotEmpty(subResult.Subscriptions);
134-
Assert.Equal(SubAckReasonCode.GrantedQoS2, subResult.Subscriptions[0].SubscribeReasonCode);
128+
Client.Results.PublishResult result;
135129

136-
// Publish a QoS1 message
137-
var result = await client.PublishAsync(testTopic, testPayload, QualityOfService.ExactlyOnceDelivery).ConfigureAwait(false);
138-
await taskCompletionSource.Task.WaitAsync(TimeSpan.FromSeconds(5)).ConfigureAwait(false);
130+
// Publish 10 messages
131+
for (var i = 0; i < 5; i++)
132+
{
133+
result = await client.PublishAsync(testTopic, testPayload, QualityOfService.ExactlyOnceDelivery).ConfigureAwait(false);
134+
Assert.IsType<Client.Results.PublishResult>(result);
135+
Assert.NotNull(result.QoS2ReasonCode);
136+
Assert.Equal(PubRecReasonCode.Success, result?.QoS2ReasonCode);
137+
}
139138

140139
var taskResult = await taskCompletionSource.Task.WaitAsync(TimeSpan.FromSeconds(5)).ConfigureAwait(false);
141140
Assert.True(taskResult);

0 commit comments

Comments
 (0)