package fields

import (
	"strconv"
	"testing"

	. "github.com/yusing/go-proxy/internal/utils/testing"
)

var validPorts = []string{
	"1234:5678",
	"0:2345",
	"2345",
}

var invalidPorts = []string{
	"",
	"123:",
	"0:",
	":1234",
	"qwerty",
	"asdfgh:asdfgh",
	"1234:asdfgh",
}

var outOfRangePorts = []string{
	"-1:1234",
	"1234:-1",
	"65536",
	"0:65536",
}

var tooManyColonsPorts = []string{
	"1234:1234:1234",
}

func TestStreamPort(t *testing.T) {
	for _, port := range validPorts {
		_, err := ValidateStreamPort(port)
		ExpectNoError(t, err)
	}
	for _, port := range invalidPorts {
		_, err := ValidateStreamPort(port)
		ExpectError2(t, port, strconv.ErrSyntax, err)
	}
	for _, port := range outOfRangePorts {
		_, err := ValidateStreamPort(port)
		ExpectError2(t, port, ErrPortOutOfRange, err)
	}
	for _, port := range tooManyColonsPorts {
		_, err := ValidateStreamPort(port)
		ExpectError2(t, port, ErrStreamPortTooManyColons, err)
	}
}