Skip to content

Commit 2eeefa0

Browse files
author
Alexander Menzhinsky
committed
Add MQTT-over-WebSocket tests and client option
1 parent 71e0667 commit 2eeefa0

File tree

3 files changed

+9
-6
lines changed

3 files changed

+9
-6
lines changed

cmd/iothub-device/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818

1919
var transports = map[string]func() (transport.Transport, error){
2020
"mqtt": func() (transport.Transport, error) {
21-
return mqtt.New(), nil
21+
return mqtt.New(mqtt.WithWebSocket(wsFlag)), nil
2222
},
2323
"amqp": func() (transport.Transport, error) {
2424
return nil, errors.New("not implemented")
@@ -29,6 +29,7 @@ var transports = map[string]func() (transport.Transport, error){
2929
}
3030

3131
var (
32+
wsFlag bool
3233
debugFlag bool
3334
formatFlag string
3435
quiteFlag bool
@@ -63,6 +64,7 @@ $IOTHUB_DEVICE_CONNECTION_STRING environment variable is required unless you use
6364
func run() error {
6465
ctx := context.Background()
6566
return internal.New(help, func(f *flag.FlagSet) {
67+
f.BoolVar(&wsFlag, "ws", false, "enable MQTT-over-WebSocket transport")
6668
f.BoolVar(&debugFlag, "debug", false, "enable debug mode")
6769
f.StringVar(&formatFlag, "format", "json-pretty", "data output format <json|json-pretty>")
6870
f.StringVar(&transportFlag, "transport", "mqtt", "transport to use <mqtt|amqp|http>")

iotdevice/transport/mqtt/mqtt.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ func WithClientOptionsConfig(fn func(opts *mqtt.ClientOptions)) TransportOption
4949

5050
// WithWebSocket makes the mqtt client use MQTT over WebSockets on port 443,
5151
// which is great if e.g. port 8883 is blocked.
52-
func WithWebSocket() TransportOption {
52+
func WithWebSocket(enable bool) TransportOption {
5353
return func(tr *Transport) {
54-
tr.webSocket = true
54+
tr.webSocket = enable
5555
}
5656
}
5757

@@ -82,7 +82,7 @@ type Transport struct {
8282

8383
logger logger.Logger
8484
cocfg func(opts *mqtt.ClientOptions)
85-
85+
8686
webSocket bool
8787
}
8888

@@ -105,7 +105,7 @@ func (tr *Transport) Connect(ctx context.Context, creds transport.Credentials) e
105105
}
106106

107107
tlsCfg := &tls.Config{
108-
RootCAs: common.RootCAs(),
108+
RootCAs: common.RootCAs(),
109109
Renegotiation: tls.RenegotiateOnceAsClient,
110110
}
111111
if crt := creds.GetCertificate(); crt != nil {

tests/end2end_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ func TestEnd2End(t *testing.T) {
6666
}
6767

6868
for name, mktransport := range map[string]func() transport.Transport{
69-
"mqtt": func() transport.Transport { return mqtt.New() },
69+
"mqtt": func() transport.Transport { return mqtt.New() },
70+
"mqtt-ws": func() transport.Transport { return mqtt.New(mqtt.WithWebSocket(true)) },
7071
// TODO: "amqp": func() transport.Transport { return amqp.New() },
7172
// TODO: "http": func() transport.Transport { return http.New() },
7273
} {

0 commit comments

Comments
 (0)