mirror of
https://github.com/mochi-mqtt/server.git
synced 2025-09-27 04:26:23 +08:00

* Implement file-based configuration * Implement file-based configuration * Replace DefaultServerCapabilities with NewDefaultServerCapabilities() to avoid data race (#360) Co-authored-by: JB <28275108+mochi-co@users.noreply.github.com> * Only pass a copy of system.Info to hooks (#365) * Only pass a copy of system.Info to hooks * Rename Itoa to Int64toa --------- Co-authored-by: JB <28275108+mochi-co@users.noreply.github.com> * Allow configurable max stored qos > 0 messages (#359) * Allow configurable max stored qos > 0 messages * Only rollback Inflight if QoS > 0 * Only rollback Inflight if QoS > 0 * Minor refactor * Update server version * Implement file-based configuration * Implement file-based configuration * update configs with maximum_inflight value * update docker configuration * fix tests --------- Co-authored-by: mochi-co <moumochi@icloud.com> Co-authored-by: thedevop <60499013+thedevop@users.noreply.github.com>
125 lines
2.3 KiB
Go
125 lines
2.3 KiB
Go
// SPDX-License-Identifier: MIT
|
|
// SPDX-FileCopyrightText: 2022 mochi-mqtt, mochi-co
|
|
// SPDX-FileContributor: mochi-co
|
|
|
|
package listeners
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNewTCP(t *testing.T) {
|
|
l := NewTCP(basicConfig)
|
|
require.Equal(t, "t1", l.id)
|
|
require.Equal(t, testAddr, l.address)
|
|
}
|
|
|
|
func TestTCPID(t *testing.T) {
|
|
l := NewTCP(basicConfig)
|
|
require.Equal(t, "t1", l.ID())
|
|
}
|
|
|
|
func TestTCPAddress(t *testing.T) {
|
|
l := NewTCP(basicConfig)
|
|
require.Equal(t, testAddr, l.Address())
|
|
}
|
|
|
|
func TestTCPProtocol(t *testing.T) {
|
|
l := NewTCP(basicConfig)
|
|
require.Equal(t, "tcp", l.Protocol())
|
|
}
|
|
|
|
func TestTCPProtocolTLS(t *testing.T) {
|
|
l := NewTCP(tlsConfig)
|
|
_ = l.Init(logger)
|
|
defer l.listen.Close()
|
|
require.Equal(t, "tcp", l.Protocol())
|
|
}
|
|
|
|
func TestTCPInit(t *testing.T) {
|
|
l := NewTCP(basicConfig)
|
|
err := l.Init(logger)
|
|
l.Close(MockCloser)
|
|
require.NoError(t, err)
|
|
|
|
l2 := NewTCP(tlsConfig)
|
|
err = l2.Init(logger)
|
|
l2.Close(MockCloser)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, l2.config.TLSConfig)
|
|
}
|
|
|
|
func TestTCPServeAndClose(t *testing.T) {
|
|
l := NewTCP(basicConfig)
|
|
err := l.Init(logger)
|
|
require.NoError(t, err)
|
|
|
|
o := make(chan bool)
|
|
go func(o chan bool) {
|
|
l.Serve(MockEstablisher)
|
|
o <- true
|
|
}(o)
|
|
|
|
time.Sleep(time.Millisecond)
|
|
|
|
var closed bool
|
|
l.Close(func(id string) {
|
|
closed = true
|
|
})
|
|
|
|
require.True(t, closed)
|
|
<-o
|
|
|
|
l.Close(MockCloser) // coverage: close closed
|
|
l.Serve(MockEstablisher) // coverage: serve closed
|
|
}
|
|
|
|
func TestTCPServeTLSAndClose(t *testing.T) {
|
|
l := NewTCP(tlsConfig)
|
|
err := l.Init(logger)
|
|
require.NoError(t, err)
|
|
|
|
o := make(chan bool)
|
|
go func(o chan bool) {
|
|
l.Serve(MockEstablisher)
|
|
o <- true
|
|
}(o)
|
|
|
|
time.Sleep(time.Millisecond)
|
|
|
|
var closed bool
|
|
l.Close(func(id string) {
|
|
closed = true
|
|
})
|
|
|
|
require.Equal(t, true, closed)
|
|
<-o
|
|
}
|
|
|
|
func TestTCPEstablishThenEnd(t *testing.T) {
|
|
l := NewTCP(basicConfig)
|
|
err := l.Init(logger)
|
|
require.NoError(t, err)
|
|
|
|
o := make(chan bool)
|
|
established := make(chan bool)
|
|
go func() {
|
|
l.Serve(func(id string, c net.Conn) error {
|
|
established <- true
|
|
return errors.New("ending") // return an error to exit immediately
|
|
})
|
|
o <- true
|
|
}()
|
|
|
|
time.Sleep(time.Millisecond)
|
|
_, _ = net.Dial("tcp", l.listen.Addr().String())
|
|
require.Equal(t, true, <-established)
|
|
l.Close(MockCloser)
|
|
<-o
|
|
}
|