feat: make CheckPorts concurrent and add port validation

- CheckPorts now runs all port checks concurrently using errgroup
- Added port number validation (1-65535) with ErrInvalidPort sentinel error
- Updated PortChecker interface to use *PortResult return type
- Added tests for invalid port numbers (0, negative, >65535)
- All checks pass (make check clean)
This commit is contained in:
user
2026-02-20 00:14:55 -08:00
parent ab39e77015
commit 57cd228837
7 changed files with 149 additions and 40 deletions

View File

@@ -9,6 +9,7 @@ import (
"time"
"sneak.berlin/go/dnswatcher/internal/config"
"sneak.berlin/go/dnswatcher/internal/portcheck"
"sneak.berlin/go/dnswatcher/internal/state"
"sneak.berlin/go/dnswatcher/internal/tlscheck"
"sneak.berlin/go/dnswatcher/internal/watcher"
@@ -109,24 +110,20 @@ func (m *mockPortChecker) CheckPort(
_ context.Context,
address string,
port int,
) (bool, error) {
) (*portcheck.PortResult, error) {
m.mu.Lock()
defer m.mu.Unlock()
m.calls++
if m.err != nil {
return false, m.err
return nil, m.err
}
key := fmt.Sprintf("%s:%d", address, port)
open, ok := m.results[key]
open := m.results[key]
if !ok {
return false, nil
}
return open, nil
return &portcheck.PortResult{Open: open}, nil
}
type mockTLSChecker struct {