Commit 9df8384
Eric Bower
·
2026-02-26 09:24:38 -0500 EST
parent 740c00a
fix(pssh): tests
1 files changed,
+30,
-18
+30,
-18
| ... | ... | @@ -26,7 +26,7 @@ import ( | |
| 26 | 26 | "golang.org/x/crypto/ssh" | |
| 27 | 27 | ) | |
| 28 | 28 | ||
| 29 | - | func StartSshServerForTesting(cfg *PgsConfig, killCh chan error) *pssh.SSHServer { | |
| 29 | + | func StartSshServerForTesting(cfg *PgsConfig, killCh chan error, readyCh chan *pssh.SSHServer) { | |
| 30 | 30 | ctx, cancel := context.WithCancel(context.Background()) | |
| 31 | 31 | defer func() { | |
| 32 | 32 | // Cancel is deferred to avoid being called in error path |
| ... | ... | @@ -41,24 +41,28 @@ func StartSshServerForTesting(cfg *PgsConfig, killCh chan error) *pssh.SSHServer | |
| 41 | 41 | if err != nil { | |
| 42 | 42 | logger.Error("failed to create ssh server", "err", err.Error()) | |
| 43 | 43 | cancel() // Clean up if server creation fails | |
| 44 | - | return nil | |
| 44 | + | readyCh <- nil | |
| 45 | + | return | |
| 45 | 46 | } | |
| 46 | 47 | ||
| 47 | 48 | logger.Info("Starting SSH server", "addr", server.Config.ListenAddr) | |
| 49 | + | ||
| 50 | + | // Signal that server is ready once ListenAndServe starts | |
| 48 | 51 | go func() { | |
| 49 | 52 | if err = server.ListenAndServe(); err != nil { | |
| 50 | 53 | logger.Error("serve", "err", err.Error()) | |
| 51 | 54 | } | |
| 52 | 55 | }() | |
| 53 | 56 | ||
| 57 | + | // Send server when listener is created (happens early in ListenAndServe) | |
| 58 | + | readyCh <- server | |
| 59 | + | ||
| 54 | 60 | go func() { | |
| 55 | 61 | // Wait for kill signal and clean up | |
| 56 | 62 | <-killCh | |
| 57 | 63 | logger.Info("stopping ssh server") | |
| 58 | 64 | cancel() | |
| 59 | 65 | }() | |
| 60 | - | ||
| 61 | - | return server | |
| 62 | 66 | } | |
| 63 | 67 | ||
| 64 | 68 | func TestSshServerSftp(t *testing.T) { |
| ... | ... | @@ -87,21 +91,25 @@ func TestSshServerSftp(t *testing.T) { | |
| 87 | 91 | ||
| 88 | 92 | cfg := NewPgsConfig(logger, dbpool, st, pubsub) | |
| 89 | 93 | done := make(chan error) | |
| 94 | + | readyCh := make(chan *pssh.SSHServer) | |
| 90 | 95 | prometheus.DefaultRegisterer = prometheus.NewRegistry() | |
| 91 | 96 | ||
| 92 | - | var server *pssh.SSHServer | |
| 93 | - | go func() { | |
| 94 | - | server = StartSshServerForTesting(cfg, done) | |
| 95 | - | }() | |
| 97 | + | go StartSshServerForTesting(cfg, done, readyCh) | |
| 96 | 98 | ||
| 97 | - | // Wait for server to be ready and get the actual listening address | |
| 99 | + | // Wait for server to be ready | |
| 100 | + | server := <-readyCh | |
| 101 | + | if server == nil { | |
| 102 | + | t.Fatal("failed to create ssh server") | |
| 103 | + | } | |
| 104 | + | ||
| 105 | + | // Wait for listener to be created | |
| 98 | 106 | var actualAddr string | |
| 99 | 107 | for i := 0; i < 100; i++ { | |
| 100 | - | if server != nil && server.Listener != nil { | |
| 108 | + | if server.Listener != nil { | |
| 101 | 109 | actualAddr = server.Listener.Addr().String() | |
| 102 | 110 | break | |
| 103 | 111 | } | |
| 104 | - | time.Sleep(20 * time.Millisecond) | |
| 112 | + | time.Sleep(10 * time.Millisecond) | |
| 105 | 113 | } | |
| 106 | 114 | ||
| 107 | 115 | if actualAddr == "" { |
| ... | ... | @@ -183,21 +191,25 @@ func TestSshServerRsync(t *testing.T) { | |
| 183 | 191 | ||
| 184 | 192 | cfg := NewPgsConfig(logger, dbpool, st, pubsub) | |
| 185 | 193 | done := make(chan error) | |
| 194 | + | readyCh := make(chan *pssh.SSHServer) | |
| 186 | 195 | prometheus.DefaultRegisterer = prometheus.NewRegistry() | |
| 187 | 196 | ||
| 188 | - | var server *pssh.SSHServer | |
| 189 | - | go func() { | |
| 190 | - | server = StartSshServerForTesting(cfg, done) | |
| 191 | - | }() | |
| 197 | + | go StartSshServerForTesting(cfg, done, readyCh) | |
| 198 | + | ||
| 199 | + | // Wait for server to be ready | |
| 200 | + | server := <-readyCh | |
| 201 | + | if server == nil { | |
| 202 | + | t.Fatal("failed to create ssh server") | |
| 203 | + | } | |
| 192 | 204 | ||
| 193 | - | // Wait for server to be ready and get the actual listening address | |
| 205 | + | // Wait for listener to be created | |
| 194 | 206 | var actualAddr string | |
| 195 | 207 | for i := 0; i < 100; i++ { | |
| 196 | - | if server != nil && server.Listener != nil { | |
| 208 | + | if server.Listener != nil { | |
| 197 | 209 | actualAddr = server.Listener.Addr().String() | |
| 198 | 210 | break | |
| 199 | 211 | } | |
| 200 | - | time.Sleep(20 * time.Millisecond) | |
| 212 | + | time.Sleep(10 * time.Millisecond) | |
| 201 | 213 | } | |
| 202 | 214 | ||
| 203 | 215 | if actualAddr == "" { |