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 (
2626 "golang.org/x/crypto/ssh"
2727 )
2828
29-func StartSshServerForTesting(cfg *PgsConfig, killCh chan error) *pssh.SSHServer {
29+func StartSshServerForTesting(cfg *PgsConfig, killCh chan error, readyCh chan *pssh.SSHServer) {
3030 ctx, cancel := context.WithCancel(context.Background())
3131 defer func() {
3232 // Cancel is deferred to avoid being called in error path
......@@ -41,24 +41,28 @@ func StartSshServerForTesting(cfg *PgsConfig, killCh chan error) *pssh.SSHServer
4141 if err != nil {
4242 logger.Error("failed to create ssh server", "err", err.Error())
4343 cancel() // Clean up if server creation fails
44- return nil
44+ readyCh <- nil
45+ return
4546 }
4647
4748 logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
49+
50+ // Signal that server is ready once ListenAndServe starts
4851 go func() {
4952 if err = server.ListenAndServe(); err != nil {
5053 logger.Error("serve", "err", err.Error())
5154 }
5255 }()
5356
57+ // Send server when listener is created (happens early in ListenAndServe)
58+ readyCh <- server
59+
5460 go func() {
5561 // Wait for kill signal and clean up
5662 <-killCh
5763 logger.Info("stopping ssh server")
5864 cancel()
5965 }()
60-
61- return server
6266 }
6367
6468 func TestSshServerSftp(t *testing.T) {
......@@ -87,21 +91,25 @@ func TestSshServerSftp(t *testing.T) {
8791
8892 cfg := NewPgsConfig(logger, dbpool, st, pubsub)
8993 done := make(chan error)
94+ readyCh := make(chan *pssh.SSHServer)
9095 prometheus.DefaultRegisterer = prometheus.NewRegistry()
9196
92- var server *pssh.SSHServer
93- go func() {
94- server = StartSshServerForTesting(cfg, done)
95- }()
97+ go StartSshServerForTesting(cfg, done, readyCh)
9698
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
98106 var actualAddr string
99107 for i := 0; i < 100; i++ {
100- if server != nil && server.Listener != nil {
108+ if server.Listener != nil {
101109 actualAddr = server.Listener.Addr().String()
102110 break
103111 }
104- time.Sleep(20 * time.Millisecond)
112+ time.Sleep(10 * time.Millisecond)
105113 }
106114
107115 if actualAddr == "" {
......@@ -183,21 +191,25 @@ func TestSshServerRsync(t *testing.T) {
183191
184192 cfg := NewPgsConfig(logger, dbpool, st, pubsub)
185193 done := make(chan error)
194+ readyCh := make(chan *pssh.SSHServer)
186195 prometheus.DefaultRegisterer = prometheus.NewRegistry()
187196
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+ }
192204
193- // Wait for server to be ready and get the actual listening address
205+ // Wait for listener to be created
194206 var actualAddr string
195207 for i := 0; i < 100; i++ {
196- if server != nil && server.Listener != nil {
208+ if server.Listener != nil {
197209 actualAddr = server.Listener.Addr().String()
198210 break
199211 }
200- time.Sleep(20 * time.Millisecond)
212+ time.Sleep(10 * time.Millisecond)
201213 }
202214
203215 if actualAddr == "" {