FILE / ScuroNeko/est

internal/ssh/tunnel_test.go

Исходный файл и его история в репозитории.
FILE bb2fa57bbeb0f317d4fdfd94520057bcdeeb37c7
Files
est/internal/ssh/tunnel_test.go
T
ScuroNeko bb2fa57bbe
Golang lint / docker-smoke (push) Successful in 17s
Golang lint / lint (push) Failing after 18s
v1.0.0
2026-08-06 12:22:44 +03:00

85 lines
1.8 KiB
Go

package ssh
import (
"context"
"errors"
"testing"
"time"
)
func TestRunWithRetryStopsAfterConfiguredRetries(t *testing.T) {
wantErr := errors.New("ssh exited")
calls := 0
err := runWithRetry(context.Background(), 2, 0, func() error {
calls++
return wantErr
}, nil)
if !errors.Is(err, wantErr) {
t.Fatalf("runWithRetry() error = %v, want %v", err, wantErr)
}
if calls != 3 {
t.Errorf("run() calls = %d, want 3", calls)
}
}
func TestRunWithRetryDoesNotRetryWhenDisabled(t *testing.T) {
wantErr := errors.New("ssh exited")
calls := 0
err := runWithRetry(context.Background(), 0, 0, func() error {
calls++
return wantErr
}, nil)
if !errors.Is(err, wantErr) {
t.Fatalf("runWithRetry() error = %v, want %v", err, wantErr)
}
if calls != 1 {
t.Errorf("run() calls = %d, want 1", calls)
}
}
func TestRunWithRetryRetriesIndefinitelyUntilSuccess(t *testing.T) {
calls := 0
err := runWithRetry(context.Background(), -1, 0, func() error {
calls++
if calls < 4 {
return errors.New("temporary ssh failure")
}
return nil
}, nil)
if err != nil {
t.Fatalf("runWithRetry() error = %v, want nil", err)
}
if calls != 4 {
t.Errorf("run() calls = %d, want 4", calls)
}
}
func TestRunWithRetryStopsWaitingWhenContextCancelled(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
firstCall := make(chan struct{})
done := make(chan error, 1)
go func() {
done <- runWithRetry(ctx, -1, time.Hour, func() error {
close(firstCall)
return errors.New("temporary ssh failure")
}, nil)
}()
<-firstCall
cancel()
select {
case err := <-done:
if !errors.Is(err, context.Canceled) {
t.Errorf("runWithRetry() error = %v, want context cancellation", err)
}
case <-time.After(time.Second):
t.Fatal("runWithRetry() did not stop after context cancellation")
}
}