- commit
- 9df8384
- parent
- 740c00a
- author
- Eric Bower
- date
- 2026-02-26 09:24:38 -0500 EST
fix(pssh): tests
1 files changed,
+30,
-18
+30,
-18
1@@ -26,7 +26,7 @@ import (
2 "golang.org/x/crypto/ssh"
3 )
4
5-func StartSshServerForTesting(cfg *PgsConfig, killCh chan error) *pssh.SSHServer {
6+func StartSshServerForTesting(cfg *PgsConfig, killCh chan error, readyCh chan *pssh.SSHServer) {
7 ctx, cancel := context.WithCancel(context.Background())
8 defer func() {
9 // Cancel is deferred to avoid being called in error path
10@@ -41,24 +41,28 @@ func StartSshServerForTesting(cfg *PgsConfig, killCh chan error) *pssh.SSHServer
11 if err != nil {
12 logger.Error("failed to create ssh server", "err", err.Error())
13 cancel() // Clean up if server creation fails
14- return nil
15+ readyCh <- nil
16+ return
17 }
18
19 logger.Info("Starting SSH server", "addr", server.Config.ListenAddr)
20+
21+ // Signal that server is ready once ListenAndServe starts
22 go func() {
23 if err = server.ListenAndServe(); err != nil {
24 logger.Error("serve", "err", err.Error())
25 }
26 }()
27
28+ // Send server when listener is created (happens early in ListenAndServe)
29+ readyCh <- server
30+
31 go func() {
32 // Wait for kill signal and clean up
33 <-killCh
34 logger.Info("stopping ssh server")
35 cancel()
36 }()
37-
38- return server
39 }
40
41 func TestSshServerSftp(t *testing.T) {
42@@ -87,21 +91,25 @@ func TestSshServerSftp(t *testing.T) {
43
44 cfg := NewPgsConfig(logger, dbpool, st, pubsub)
45 done := make(chan error)
46+ readyCh := make(chan *pssh.SSHServer)
47 prometheus.DefaultRegisterer = prometheus.NewRegistry()
48
49- var server *pssh.SSHServer
50- go func() {
51- server = StartSshServerForTesting(cfg, done)
52- }()
53+ go StartSshServerForTesting(cfg, done, readyCh)
54
55- // Wait for server to be ready and get the actual listening address
56+ // Wait for server to be ready
57+ server := <-readyCh
58+ if server == nil {
59+ t.Fatal("failed to create ssh server")
60+ }
61+
62+ // Wait for listener to be created
63 var actualAddr string
64 for i := 0; i < 100; i++ {
65- if server != nil && server.Listener != nil {
66+ if server.Listener != nil {
67 actualAddr = server.Listener.Addr().String()
68 break
69 }
70- time.Sleep(20 * time.Millisecond)
71+ time.Sleep(10 * time.Millisecond)
72 }
73
74 if actualAddr == "" {
75@@ -183,21 +191,25 @@ func TestSshServerRsync(t *testing.T) {
76
77 cfg := NewPgsConfig(logger, dbpool, st, pubsub)
78 done := make(chan error)
79+ readyCh := make(chan *pssh.SSHServer)
80 prometheus.DefaultRegisterer = prometheus.NewRegistry()
81
82- var server *pssh.SSHServer
83- go func() {
84- server = StartSshServerForTesting(cfg, done)
85- }()
86+ go StartSshServerForTesting(cfg, done, readyCh)
87+
88+ // Wait for server to be ready
89+ server := <-readyCh
90+ if server == nil {
91+ t.Fatal("failed to create ssh server")
92+ }
93
94- // Wait for server to be ready and get the actual listening address
95+ // Wait for listener to be created
96 var actualAddr string
97 for i := 0; i < 100; i++ {
98- if server != nil && server.Listener != nil {
99+ if server.Listener != nil {
100 actualAddr = server.Listener.Addr().String()
101 break
102 }
103- time.Sleep(20 * time.Millisecond)
104+ time.Sleep(10 * time.Millisecond)
105 }
106
107 if actualAddr == "" {