mirror of
https://github.com/mochi-mqtt/server.git
synced 2025-09-26 20:21:12 +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>
103 lines
2.0 KiB
Go
103 lines
2.0 KiB
Go
// SPDX-License-Identifier: MIT
|
|
// SPDX-FileCopyrightText: 2022 mochi-mqtt, mochi-co
|
|
// SPDX-FileContributor: jason@zgwit.com
|
|
|
|
package listeners
|
|
|
|
import (
|
|
"errors"
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
const testUnixAddr = "mochi.sock"
|
|
|
|
var (
|
|
unixConfig = Config{ID: "t1", Address: testUnixAddr}
|
|
)
|
|
|
|
func TestNewUnixSock(t *testing.T) {
|
|
l := NewUnixSock(unixConfig)
|
|
require.Equal(t, "t1", l.id)
|
|
require.Equal(t, testUnixAddr, l.address)
|
|
}
|
|
|
|
func TestUnixSockID(t *testing.T) {
|
|
l := NewUnixSock(unixConfig)
|
|
require.Equal(t, "t1", l.ID())
|
|
}
|
|
|
|
func TestUnixSockAddress(t *testing.T) {
|
|
l := NewUnixSock(unixConfig)
|
|
require.Equal(t, testUnixAddr, l.Address())
|
|
}
|
|
|
|
func TestUnixSockProtocol(t *testing.T) {
|
|
l := NewUnixSock(unixConfig)
|
|
require.Equal(t, "unix", l.Protocol())
|
|
}
|
|
|
|
func TestUnixSockInit(t *testing.T) {
|
|
l := NewUnixSock(unixConfig)
|
|
err := l.Init(logger)
|
|
l.Close(MockCloser)
|
|
require.NoError(t, err)
|
|
|
|
t2Config := unixConfig
|
|
t2Config.ID = "t2"
|
|
l2 := NewUnixSock(t2Config)
|
|
err = l2.Init(logger)
|
|
l2.Close(MockCloser)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestUnixSockServeAndClose(t *testing.T) {
|
|
l := NewUnixSock(unixConfig)
|
|
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 TestUnixSockEstablishThenEnd(t *testing.T) {
|
|
l := NewUnixSock(unixConfig)
|
|
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("unix", l.listen.Addr().String())
|
|
require.Equal(t, true, <-established)
|
|
l.Close(MockCloser)
|
|
<-o
|
|
}
|