mirror of
https://github.com/lukaszraczylo/kportal.git
synced 2026-07-05 06:05:39 +00:00
Cleanup and refactor.
This commit is contained in:
@@ -139,11 +139,6 @@ func (m *Manager) SetMDNSPublisher(publisher *mdns.Publisher) {
|
||||
m.mdnsPublisher = publisher
|
||||
}
|
||||
|
||||
// GetEventBus returns the event bus for subscribing to manager events
|
||||
func (m *Manager) GetEventBus() *events.Bus {
|
||||
return m.eventBus
|
||||
}
|
||||
|
||||
// Start initializes and starts all port-forwards from the configuration.
|
||||
func (m *Manager) Start(cfg *config.Config) error {
|
||||
if cfg == nil {
|
||||
@@ -493,27 +488,6 @@ func (m *Manager) stopWorkerInternal(id string, removeFromUI bool) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetActiveForwards returns a list of all active forward IDs.
|
||||
func (m *Manager) GetActiveForwards() []string {
|
||||
m.workersMu.RLock()
|
||||
defer m.workersMu.RUnlock()
|
||||
|
||||
ids := make([]string, 0, len(m.workers))
|
||||
for id := range m.workers {
|
||||
ids = append(ids, id)
|
||||
}
|
||||
|
||||
return ids
|
||||
}
|
||||
|
||||
// GetWorkerCount returns the number of active workers.
|
||||
func (m *Manager) GetWorkerCount() int {
|
||||
m.workersMu.RLock()
|
||||
defer m.workersMu.RUnlock()
|
||||
|
||||
return len(m.workers)
|
||||
}
|
||||
|
||||
// GetWorker returns a worker by ID, or nil if not found.
|
||||
func (m *Manager) GetWorker(id string) *ForwardWorker {
|
||||
m.workersMu.RLock()
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/nvm/kportal/internal/config"
|
||||
"github.com/nvm/kportal/internal/events"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// TestNewManager tests manager creation
|
||||
@@ -53,41 +52,6 @@ func TestManager_SetStatusUI(t *testing.T) {
|
||||
assert.Equal(t, mockUI, manager.statusUI)
|
||||
}
|
||||
|
||||
// TestManager_GetEventBus tests getting the event bus
|
||||
func TestManager_GetEventBus(t *testing.T) {
|
||||
manager, err := NewManager(false)
|
||||
if err != nil {
|
||||
t.Skip("Skipping test - no kubeconfig available")
|
||||
}
|
||||
defer manager.Stop()
|
||||
|
||||
bus := manager.GetEventBus()
|
||||
assert.NotNil(t, bus)
|
||||
}
|
||||
|
||||
// TestManager_GetWorkerCount tests worker count tracking
|
||||
func TestManager_GetWorkerCount(t *testing.T) {
|
||||
manager, err := NewManager(false)
|
||||
if err != nil {
|
||||
t.Skip("Skipping test - no kubeconfig available")
|
||||
}
|
||||
defer manager.Stop()
|
||||
|
||||
assert.Equal(t, 0, manager.GetWorkerCount())
|
||||
}
|
||||
|
||||
// TestManager_GetActiveForwards tests getting active forwards
|
||||
func TestManager_GetActiveForwards(t *testing.T) {
|
||||
manager, err := NewManager(false)
|
||||
if err != nil {
|
||||
t.Skip("Skipping test - no kubeconfig available")
|
||||
}
|
||||
defer manager.Stop()
|
||||
|
||||
forwards := manager.GetActiveForwards()
|
||||
assert.Empty(t, forwards)
|
||||
}
|
||||
|
||||
// TestManager_GetWorker tests getting a worker by ID
|
||||
func TestManager_GetWorker(t *testing.T) {
|
||||
manager, err := NewManager(false)
|
||||
@@ -362,12 +326,8 @@ func TestManager_EventBusIntegration(t *testing.T) {
|
||||
// Event bus should be wired to health checker and watchdog
|
||||
assert.NotNil(t, manager.eventBus)
|
||||
|
||||
// Get event bus
|
||||
bus := manager.GetEventBus()
|
||||
require.NotNil(t, bus)
|
||||
|
||||
// SubscribeAll should work (no return value in this API)
|
||||
bus.SubscribeAll(func(event events.Event) {
|
||||
manager.eventBus.SubscribeAll(func(event events.Event) {
|
||||
// Handler
|
||||
})
|
||||
}
|
||||
|
||||
@@ -336,6 +336,11 @@ func (w *ForwardWorker) establishForward(podName string) error {
|
||||
// Start port forwarding in a goroutine
|
||||
errChan := make(chan error, 1)
|
||||
go func() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
errChan <- fmt.Errorf("port forward panicked: %v", r)
|
||||
}
|
||||
}()
|
||||
errChan <- w.portForwarder.Forward(forwardCtx, req)
|
||||
}()
|
||||
|
||||
@@ -409,6 +414,14 @@ func (w *ForwardWorker) startHTTPProxy() error {
|
||||
// Calculate internal port for k8s tunnel
|
||||
targetPort := w.forward.LocalPort + httpLogPortOffset
|
||||
|
||||
// Validate that the target port is available before attempting to bind
|
||||
portChecker := NewPortChecker()
|
||||
if !portChecker.isPortAvailable(targetPort) {
|
||||
usedBy := portChecker.getProcessUsingPort(targetPort)
|
||||
return fmt.Errorf("HTTP proxy target port %d is already in use by %s (forward port %d + offset %d)",
|
||||
targetPort, usedBy, w.forward.LocalPort, httpLogPortOffset)
|
||||
}
|
||||
|
||||
proxy, err := httplog.NewProxy(&w.forward, targetPort)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create HTTP proxy: %w", err)
|
||||
|
||||
Reference in New Issue
Block a user