mirror of
https://github.com/apernet/hysteria.git
synced 2025-04-03 04:27:39 +03:00
110 lines
1.7 KiB
Go
110 lines
1.7 KiB
Go
package proxymux
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestListenSOCKS(t *testing.T) {
|
|
address := "127.2.39.129:11081"
|
|
|
|
sl, err := ListenSOCKS(address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
defer func() {
|
|
sl.Close()
|
|
}()
|
|
|
|
hl, err := ListenHTTP(address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
defer hl.Close()
|
|
|
|
_, err = ListenSOCKS(address)
|
|
if !assert.ErrorIs(t, err, ErrProtocolInUse) {
|
|
return
|
|
}
|
|
sl.Close()
|
|
|
|
sl, err = ListenSOCKS(address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
}
|
|
|
|
func TestListenHTTP(t *testing.T) {
|
|
address := "127.2.39.129:11082"
|
|
|
|
hl, err := ListenHTTP(address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
defer func() {
|
|
hl.Close()
|
|
}()
|
|
|
|
sl, err := ListenSOCKS(address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
defer sl.Close()
|
|
|
|
_, err = ListenHTTP(address)
|
|
if !assert.ErrorIs(t, err, ErrProtocolInUse) {
|
|
return
|
|
}
|
|
hl.Close()
|
|
|
|
hl, err = ListenHTTP(address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
}
|
|
|
|
func TestRelease(t *testing.T) {
|
|
address := "127.2.39.129:11083"
|
|
|
|
hl, err := ListenHTTP(address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
sl, err := ListenSOCKS(address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
|
|
if !assert.True(t, globalMuxManager.testAddressExists(address)) {
|
|
return
|
|
}
|
|
_, err = net.Listen("tcp", address)
|
|
if !assert.Error(t, err) {
|
|
return
|
|
}
|
|
|
|
hl.Close()
|
|
sl.Close()
|
|
|
|
// Wait for muxListener released
|
|
time.Sleep(time.Second)
|
|
if !assert.False(t, globalMuxManager.testAddressExists(address)) {
|
|
return
|
|
}
|
|
lis, err := net.Listen("tcp", address)
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
defer lis.Close()
|
|
}
|
|
|
|
func (m *muxManager) testAddressExists(address string) bool {
|
|
m.lock.Lock()
|
|
defer m.lock.Unlock()
|
|
|
|
_, ok := m.listeners[address]
|
|
return ok
|
|
}
|