| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- // Copyright 2019 Yunion
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package getport
- import (
- "net"
- "testing"
- "time"
- "github.com/stretchr/testify/assert"
- "yunion.io/x/log"
- )
- func TestGetPort(t *testing.T) {
- t.Run("gets empty tcp port", func(t *testing.T) {
- portResult, err := GetPort(TCP, "127.0.0.1")
- assert.NoError(t, err)
- assert.Contains(t, []string{"127.0.0.1", "::1"}, portResult.IP)
- assert.Greater(t, portResult.Port, 0)
- })
- t.Run("get by empty address", func(t *testing.T) {
- result, err := GetPort(TCP4, "")
- assert.NoError(t, err)
- log.Infof("result: %#v", result)
- })
- t.Run("gets empty tcp4 port", func(t *testing.T) {
- portResult, err := GetPort(TCP4, "127.0.0.1")
- assert.NoError(t, err)
- assert.Equal(t, portResult.IP, "127.0.0.1")
- assert.Greater(t, portResult.Port, 0)
- })
- t.Run("gets empty tcp6 port", func(t *testing.T) {
- portResult, err := GetPort(TCP6, "::1")
- assert.NoError(t, err)
- assert.Equal(t, portResult.IP, "::1")
- assert.Greater(t, portResult.Port, 0)
- })
- t.Run("gets empty udp port", func(t *testing.T) {
- portResult, err := GetPort(UDP, "127.0.0.1")
- assert.NoError(t, err)
- assert.Contains(t, []string{"127.0.0.1", "::1"}, portResult.IP)
- assert.Greater(t, portResult.Port, 0)
- })
- t.Run("gets empty udp4 port", func(t *testing.T) {
- portResult, err := GetPort(UDP4, "127.0.0.1")
- assert.NoError(t, err)
- assert.Equal(t, portResult.IP, "127.0.0.1")
- assert.Greater(t, portResult.Port, 0)
- })
- t.Run("gets empty udp6 port", func(t *testing.T) {
- portResult, err := GetPort(UDP6, "::1")
- assert.NoError(t, err)
- assert.Equal(t, portResult.IP, "::1")
- assert.Greater(t, portResult.Port, 0)
- })
- t.Run("errors for bad protocol", func(t *testing.T) {
- portResult, err := GetPort(-1, "127.0.0.1")
- assert.Equal(t, portResult.IP, "")
- assert.Equal(t, portResult.Port, -1)
- assert.Error(t, err, "stack not recognized")
- })
- t.Run("get port within 30000 to 31000", func(t *testing.T) {
- portResult, err := GetPortByRange(TCP4, 30000, 31000)
- assert.NoError(t, err)
- log.Infof("port result: %#v", portResult)
- assert.Greater(t, portResult.Port, 30000)
- })
- t.Run("get port within 30000 to 30001 except 30001", func(t *testing.T) {
- var l net.Listener
- var err error
- go func() {
- l, err = net.Listen("tcp4", net.JoinHostPort("", "30001"))
- if err != nil {
- t.Fatalf("listen 30001 tcp port: %v", err)
- }
- log.Infof("listen port 30001")
- }()
- time.Sleep(1 * time.Second)
- portResult, err := GetPortByRange(TCP4, 30000, 30001)
- assert.NoError(t, err)
- log.Infof("port result: %#v", portResult)
- assert.Equal(t, portResult.Port, 30000)
- l.Close()
- })
- }
- func TestGetTcpPort(t *testing.T) {
- portResult, err := GetTcpPort()
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetTcp4Port(t *testing.T) {
- portResult, err := GetTcp4Port()
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetTcp6Port(t *testing.T) {
- portResult, err := GetTcp6Port()
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetUdpPort(t *testing.T) {
- portResult, err := GetUdpPort()
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetUdp4Port(t *testing.T) {
- portResult, err := GetUdp4Port()
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetUdp6Port(t *testing.T) {
- portResult, err := GetUdp6Port()
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetTcpPortForAddress(t *testing.T) {
- portResult, err := GetTcpPortForAddress("127.0.0.1")
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetTcp4PortForAddress(t *testing.T) {
- portResult, err := GetTcp4PortForAddress("127.0.0.1")
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetTcp6PortForAddress(t *testing.T) {
- portResult, err := GetTcp6PortForAddress("::1")
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetUdpPortForAddress(t *testing.T) {
- portResult, err := GetUdpPortForAddress("127.0.0.1")
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetUdp4PortForAddress(t *testing.T) {
- portResult, err := GetUdp4PortForAddress("127.0.0.1")
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestGetUdp6PortForAddress(t *testing.T) {
- portResult, err := GetUdp6PortForAddress("::1")
- assert.NoError(t, err)
- assert.Greater(t, portResult.Port, 0)
- }
- func TestPortResultToAddress(t *testing.T) {
- portResult := PortResult{
- IP: "::1",
- Port: 3000,
- }
- address := PortResultToAddress(portResult)
- assert.Equal(t, address, "[::1]:3000")
- }
- func TestListen(t *testing.T) {
- t.Run("errors for bad tcp stack", func(t *testing.T) {
- addr, err := listen("tcp-bad", "127.0.0.1:0")
- assert.Empty(t, addr)
- assert.Error(t, err, "listen tcp-bad: unknown network tcp-bad")
- })
- t.Run("errors for bad udp stack", func(t *testing.T) {
- addr, err := listen("udp-bad", "127.0.0.1:0")
- assert.Empty(t, addr)
- assert.Error(t, err, "listen udp-bad: unknown network udp-bad")
- })
- t.Run("errors for bad stack", func(t *testing.T) {
- addr, err := listen("unix", "127.0.0.1:0")
- assert.Empty(t, addr)
- assert.Error(t, err, "stack not recognized")
- })
- }
|