mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-15 00:15:15 +08:00
180 lines
7.8 KiB
C#
180 lines
7.8 KiB
C#
// Licensed to the .NET Foundation under one or more agreements.
|
|
// The .NET Foundation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using MQTTnet.Client;
|
|
using System;
|
|
using System.Security.Authentication;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using MQTTnet.Formatter;
|
|
using MQTTnet.Internal;
|
|
using MQTTnet.Protocol;
|
|
|
|
namespace MQTTnet.TestApp
|
|
{
|
|
public static class PublicBrokerTest
|
|
{
|
|
public static async Task RunAsync()
|
|
{
|
|
// MqttNetConsoleLogger.ForwardToConsole();
|
|
|
|
// For most of these connections to work, set output target to Net5.0.
|
|
|
|
#if NET5_0_OR_GREATER
|
|
// TLS13 is only available in Net5.0
|
|
var unsafeTls13 = new MqttClientOptionsBuilderTlsParameters
|
|
{
|
|
UseTls = true,
|
|
SslProtocol = SslProtocols.Tls13,
|
|
// Don't use this in production code. This handler simply allows any invalid certificate to work.
|
|
CertificateValidationHandler = w => true
|
|
};
|
|
#endif
|
|
|
|
// Also defining TLS12 for servers that don't seem no to support TLS13.
|
|
var unsafeTls12 = new MqttClientOptionsBuilderTlsParameters
|
|
{
|
|
UseTls = true,
|
|
SslProtocol = SslProtocols.Tls12,
|
|
// Don't use this in production code. This handler simply allows any invalid certificate to work.
|
|
CertificateValidationHandler = w => true
|
|
};
|
|
|
|
// mqtt.eclipseprojects.io
|
|
await ExecuteTestAsync("mqtt.eclipseprojects.io TCP",
|
|
new MqttClientOptionsBuilder().WithTcpServer("mqtt.eclipseprojects.io", 1883)
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
await ExecuteTestAsync("mqtt.eclipseprojects.io WS",
|
|
new MqttClientOptionsBuilder().WithWebSocketServer("mqtt.eclipseprojects.io:80/mqtt")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
#if NET5_0_OR_GREATER
|
|
await ExecuteTestAsync("mqtt.eclipseprojects.io WS TLS13",
|
|
new MqttClientOptionsBuilder().WithWebSocketServer("mqtt.eclipseprojects.io:443/mqtt")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls13).Build());
|
|
#endif
|
|
|
|
// test.mosquitto.org
|
|
await ExecuteTestAsync("test.mosquitto.org TCP",
|
|
new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 1883)
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
await ExecuteTestAsync("test.mosquitto.org TCP - Authenticated",
|
|
new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 1884)
|
|
.WithCredentials("rw", "readwrite")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
await ExecuteTestAsync("test.mosquitto.org TCP TLS12",
|
|
new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 8883)
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
|
|
|
|
#if NET5_0_OR_GREATER
|
|
await ExecuteTestAsync("test.mosquitto.org TCP TLS13",
|
|
new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 8883)
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls13).Build());
|
|
#endif
|
|
|
|
await ExecuteTestAsync("test.mosquitto.org TCP TLS12 - Authenticated",
|
|
new MqttClientOptionsBuilder().WithTcpServer("test.mosquitto.org", 8885)
|
|
.WithCredentials("rw", "readwrite")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
|
|
|
|
await ExecuteTestAsync("test.mosquitto.org WS",
|
|
new MqttClientOptionsBuilder().WithWebSocketServer("test.mosquitto.org:8080/mqtt")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
await ExecuteTestAsync("test.mosquitto.org WS TLS12",
|
|
new MqttClientOptionsBuilder().WithWebSocketServer("test.mosquitto.org:8081/mqtt")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
|
|
|
|
// broker.emqx.io
|
|
await ExecuteTestAsync("broker.emqx.io TCP",
|
|
new MqttClientOptionsBuilder().WithTcpServer("broker.emqx.io", 1883)
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
await ExecuteTestAsync("broker.emqx.io TCP TLS12",
|
|
new MqttClientOptionsBuilder().WithTcpServer("broker.emqx.io", 8883)
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
|
|
|
|
#if NET5_0_OR_GREATER
|
|
await ExecuteTestAsync("broker.emqx.io TCP TLS13",
|
|
new MqttClientOptionsBuilder().WithTcpServer("broker.emqx.io", 8883)
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls13).Build());
|
|
#endif
|
|
|
|
await ExecuteTestAsync("broker.emqx.io WS",
|
|
new MqttClientOptionsBuilder().WithWebSocketServer("broker.emqx.io:8083/mqtt")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
await ExecuteTestAsync("broker.emqx.io WS TLS12",
|
|
new MqttClientOptionsBuilder().WithWebSocketServer("broker.emqx.io:8084/mqtt")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).WithTls(unsafeTls12).Build());
|
|
|
|
|
|
// broker.hivemq.com
|
|
await ExecuteTestAsync("broker.hivemq.com TCP",
|
|
new MqttClientOptionsBuilder().WithTcpServer("broker.hivemq.com", 1883)
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
await ExecuteTestAsync("broker.hivemq.com WS",
|
|
new MqttClientOptionsBuilder().WithWebSocketServer("broker.hivemq.com:8000/mqtt")
|
|
.WithProtocolVersion(MqttProtocolVersion.V311).Build());
|
|
|
|
// mqtt.swifitch.cz: Does not seem to operate any more
|
|
|
|
// cloudmqtt.com: Cannot test because it does not offer a free plan any more.
|
|
|
|
Write("Finished.", ConsoleColor.White);
|
|
Console.ReadLine();
|
|
}
|
|
|
|
static async Task ExecuteTestAsync(string name, MqttClientOptions options)
|
|
{
|
|
try
|
|
{
|
|
Write("Testing '" + name + "'... ", ConsoleColor.Gray);
|
|
var factory = new MqttFactory();
|
|
//factory.UseWebSocket4Net();
|
|
var client = factory.CreateMqttClient();
|
|
var topic = Guid.NewGuid().ToString();
|
|
|
|
MqttApplicationMessage receivedMessage = null;
|
|
client.ApplicationMessageReceivedAsync += e =>
|
|
{
|
|
receivedMessage = e.ApplicationMessage;
|
|
return CompletedTask.Instance;
|
|
};
|
|
|
|
await client.ConnectAsync(options);
|
|
await client.SubscribeAsync(topic, MqttQualityOfServiceLevel.AtLeastOnce);
|
|
await client.PublishStringAsync(topic, "Hello_World", MqttQualityOfServiceLevel.AtLeastOnce);
|
|
|
|
SpinWait.SpinUntil(() => receivedMessage != null, 5000);
|
|
|
|
if (receivedMessage?.Topic != topic || receivedMessage?.ConvertPayloadToString() != "Hello_World")
|
|
{
|
|
throw new Exception("Message invalid.");
|
|
}
|
|
|
|
await client.UnsubscribeAsync(topic);
|
|
await client.DisconnectAsync();
|
|
|
|
Write("[OK]\n", ConsoleColor.Green);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Write("[FAILED] " + e.Message + "\n", ConsoleColor.Red);
|
|
}
|
|
}
|
|
|
|
static void Write(string message, ConsoleColor color)
|
|
{
|
|
Console.ForegroundColor = color;
|
|
Console.Write(message);
|
|
}
|
|
|
|
}
|
|
}
|