mirror of
https://github.com/Gu1llaum-3/sshm.git
synced 2026-03-14 03:41:27 +01:00
- Modified the NewPingManager function to include a configFile argument for better SSH configuration management. - Updated all relevant tests to reflect the new function signature. - Enhanced ping functionality to support ProxyJump and ProxyCommand using an external SSH command. - Adjusted UI initialization to pass the config file to the PingManager. This change improves flexibility in managing SSH connections and enhances the overall functionality of the ping manager.
145 lines
3.7 KiB
Go
145 lines
3.7 KiB
Go
package connectivity
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/Gu1llaum-3/sshm/internal/config"
|
|
)
|
|
|
|
func TestNewPingManager(t *testing.T) {
|
|
pm := NewPingManager(5*time.Second, "")
|
|
if pm == nil {
|
|
t.Error("NewPingManager() returned nil")
|
|
}
|
|
if pm.results == nil {
|
|
t.Error("PingManager.results map not initialized")
|
|
}
|
|
}
|
|
|
|
func TestPingManager_PingHost(t *testing.T) {
|
|
pm := NewPingManager(1*time.Second, "")
|
|
ctx := context.Background()
|
|
|
|
// Test ping method exists and doesn't panic
|
|
host := config.SSHHost{Name: "test", Hostname: "127.0.0.1", Port: "22"}
|
|
result := pm.PingHost(ctx, host)
|
|
if result == nil {
|
|
t.Error("Expected ping result to be returned")
|
|
}
|
|
|
|
// Test with invalid host
|
|
invalidHost := config.SSHHost{Name: "invalid", Hostname: "invalid.host.12345", Port: "22"}
|
|
result = pm.PingHost(ctx, invalidHost)
|
|
if result == nil {
|
|
t.Error("Expected ping result to be returned even for invalid host")
|
|
}
|
|
}
|
|
|
|
func TestPingManager_GetStatus(t *testing.T) {
|
|
pm := NewPingManager(1*time.Second, "")
|
|
|
|
// Test unknown host
|
|
status := pm.GetStatus("unknown.host")
|
|
if status != StatusUnknown {
|
|
t.Errorf("Expected StatusUnknown for unknown host, got %v", status)
|
|
}
|
|
|
|
// Test after ping
|
|
ctx := context.Background()
|
|
host := config.SSHHost{Name: "test", Hostname: "127.0.0.1", Port: "22"}
|
|
pm.PingHost(ctx, host)
|
|
status = pm.GetStatus("test")
|
|
if status == StatusUnknown {
|
|
t.Error("Expected status to be set after ping")
|
|
}
|
|
}
|
|
|
|
func TestPingManager_PingMultipleHosts(t *testing.T) {
|
|
pm := NewPingManager(1*time.Second, "")
|
|
hosts := []config.SSHHost{
|
|
{Name: "localhost", Hostname: "127.0.0.1", Port: "22"},
|
|
{Name: "invalid", Hostname: "invalid.host.12345", Port: "22"},
|
|
}
|
|
|
|
ctx := context.Background()
|
|
|
|
// Ping each host individually
|
|
for _, host := range hosts {
|
|
result := pm.PingHost(ctx, host)
|
|
if result == nil {
|
|
t.Errorf("Expected ping result for host %s", host.Name)
|
|
}
|
|
|
|
// Check that status was set
|
|
status := pm.GetStatus(host.Name)
|
|
if status == StatusUnknown {
|
|
t.Errorf("Expected status to be set for host %s after ping", host.Name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPingManager_GetResult(t *testing.T) {
|
|
pm := NewPingManager(1*time.Second, "")
|
|
ctx := context.Background()
|
|
|
|
// Test getting result for unknown host
|
|
result, exists := pm.GetResult("unknown")
|
|
if exists || result != nil {
|
|
t.Error("Expected no result for unknown host")
|
|
}
|
|
|
|
// Test after ping
|
|
host := config.SSHHost{Name: "test", Hostname: "127.0.0.1", Port: "22"}
|
|
pm.PingHost(ctx, host)
|
|
|
|
result, exists = pm.GetResult("test")
|
|
if !exists || result == nil {
|
|
t.Error("Expected result to exist after ping")
|
|
}
|
|
if result.HostName != "test" {
|
|
t.Errorf("Expected hostname 'test', got '%s'", result.HostName)
|
|
}
|
|
}
|
|
|
|
func TestPingStatus_String(t *testing.T) {
|
|
tests := []struct {
|
|
status PingStatus
|
|
expected string
|
|
}{
|
|
{StatusUnknown, "unknown"},
|
|
{StatusConnecting, "connecting"},
|
|
{StatusOnline, "online"},
|
|
{StatusOffline, "offline"},
|
|
{PingStatus(999), "unknown"}, // Invalid status
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.expected, func(t *testing.T) {
|
|
if got := tt.status.String(); got != tt.expected {
|
|
t.Errorf("PingStatus.String() = %v, want %v", got, tt.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPingHost_Basic(t *testing.T) {
|
|
// Test that the ping functionality exists
|
|
pm := NewPingManager(1*time.Second, "")
|
|
ctx := context.Background()
|
|
host := config.SSHHost{Name: "test", Hostname: "127.0.0.1", Port: "22"}
|
|
|
|
// Just ensure the function doesn't panic
|
|
result := pm.PingHost(ctx, host)
|
|
if result == nil {
|
|
t.Error("Expected ping result to be returned")
|
|
}
|
|
|
|
// Test that status is set
|
|
status := pm.GetStatus("test")
|
|
if status == StatusUnknown {
|
|
t.Error("Expected status to be set after ping attempt")
|
|
}
|
|
}
|