- 新增 backend/.golangci.yml 配置 12 个 linter(forbidigo、errorlint、errcheck、staticcheck、revive、gocritic、gosec、bodyclose、noctx、nilerr、goimports、gocyclo) - 新增 lefthook.yml 配置 pre-commit hook 自动运行 lint - 修复存量代码违规:errors.Is/As 替换、zap.Error 替换、import 排序、errcheck 修复 - 更新 README 补充编码规范说明 - 归档 backend-code-lint 变更
76 lines
1.4 KiB
Go
76 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"net"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestCheckPortAvailable(t *testing.T) {
|
|
port := 19826
|
|
|
|
err := checkPortAvailable(port)
|
|
if err != nil {
|
|
t.Fatalf("端口 %d 应该可用: %v", port, err)
|
|
}
|
|
|
|
t.Log("端口可用测试通过")
|
|
}
|
|
|
|
func TestCheckPortOccupied(t *testing.T) {
|
|
port := 19827
|
|
|
|
listener, err := net.Listen("tcp", "127.0.0.1:19827")
|
|
if err != nil {
|
|
t.Fatalf("无法启动测试服务器: %v", err)
|
|
}
|
|
defer listener.Close()
|
|
|
|
go func() {
|
|
conn, err := listener.Accept()
|
|
if err == nil {
|
|
conn.Close()
|
|
}
|
|
}()
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
err = checkPortAvailable(port)
|
|
if err == nil {
|
|
t.Fatal("端口被占用时应该返回错误")
|
|
}
|
|
|
|
t.Log("端口占用检测测试通过")
|
|
}
|
|
|
|
func TestCheckPortAvailableAfterClose(t *testing.T) {
|
|
port := 19828
|
|
|
|
listener, err := net.Listen("tcp", "127.0.0.1:19828")
|
|
if err != nil {
|
|
t.Fatalf("无法启动测试服务器: %v", err)
|
|
}
|
|
|
|
server := &http.Server{ReadHeaderTimeout: time.Second}
|
|
defer server.Close()
|
|
go func() {
|
|
err := server.Serve(listener)
|
|
if err != nil && err != http.ErrServerClosed {
|
|
t.Errorf("serve failed: %v", err)
|
|
}
|
|
}()
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
listener.Close()
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
err = checkPortAvailable(port)
|
|
if err != nil {
|
|
t.Fatalf("端口关闭后应该可用: %v", err)
|
|
}
|
|
|
|
t.Log("端口关闭后可用测试通过")
|
|
}
|