-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdetect_test.go
More file actions
150 lines (123 loc) · 4.17 KB
/
detect_test.go
File metadata and controls
150 lines (123 loc) · 4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package main
import (
"context"
"net"
"testing"
)
func TestCheckBrowserAvailability_SSH_NoDisplay(t *testing.T) {
t.Setenv("SSH_TTY", "/dev/pts/0")
t.Setenv("SSH_CLIENT", "")
t.Setenv("SSH_CONNECTION", "")
t.Setenv("DISPLAY", "")
t.Setenv("WAYLAND_DISPLAY", "")
avail := checkBrowserAvailability(context.Background(), 18888)
if avail.Available {
t.Error("expected browser unavailable in SSH session without display")
}
if avail.Reason == "" {
t.Error("expected non-empty reason when browser is unavailable")
}
}
func TestCheckBrowserAvailability_SSHClient_NoDisplay(t *testing.T) {
t.Setenv("SSH_TTY", "")
t.Setenv("SSH_CLIENT", "192.168.1.1 12345 22")
t.Setenv("SSH_CONNECTION", "")
t.Setenv("DISPLAY", "")
t.Setenv("WAYLAND_DISPLAY", "")
avail := checkBrowserAvailability(context.Background(), 18888)
if avail.Available {
t.Error("expected browser unavailable when SSH_CLIENT set and no display")
}
}
func TestCheckBrowserAvailability_SSHConnection_NoDisplay(t *testing.T) {
t.Setenv("SSH_TTY", "")
t.Setenv("SSH_CLIENT", "")
t.Setenv("SSH_CONNECTION", "192.168.1.1 12345 192.168.1.2 22")
t.Setenv("DISPLAY", "")
t.Setenv("WAYLAND_DISPLAY", "")
avail := checkBrowserAvailability(context.Background(), 18888)
if avail.Available {
t.Error("expected browser unavailable when SSH_CONNECTION set and no display")
}
}
func TestCheckBrowserAvailability_SSH_WithX11(t *testing.T) {
// SSH with X11 forwarding: SSH_TTY is set but DISPLAY is also set.
t.Setenv("SSH_TTY", "/dev/pts/0")
t.Setenv("DISPLAY", ":10.0")
t.Setenv("WAYLAND_DISPLAY", "")
// Use a port that is definitely free (bind to :0 and get the port,
// then close it; the brief gap is acceptable for a unit test).
ln, err := (&net.ListenConfig{}).Listen(context.Background(), "tcp", "127.0.0.1:0")
if err != nil {
t.Skip("cannot allocate test port")
}
port := ln.Addr().(*net.TCPAddr).Port
ln.Close()
avail := checkBrowserAvailability(context.Background(), port)
// X11 forwarding over SSH should be detected as browser-capable
// (DISPLAY is set, port is free).
if !avail.Available {
t.Errorf("expected browser available with SSH+X11 forwarding, got reason: %s", avail.Reason)
}
}
func TestCheckBrowserAvailability_PortUnavailable(t *testing.T) {
// Bind a port and keep it busy during the test.
ln, err := (&net.ListenConfig{}).Listen(context.Background(), "tcp", "127.0.0.1:0")
if err != nil {
t.Skip("cannot bind test port")
}
defer ln.Close()
port := ln.Addr().(*net.TCPAddr).Port
// Clear SSH vars so we reach the port-check stage.
t.Setenv("SSH_TTY", "")
t.Setenv("SSH_CLIENT", "")
t.Setenv("SSH_CONNECTION", "")
// Pretend we have a display so the display check is bypassed.
t.Setenv("DISPLAY", ":0")
t.Setenv("WAYLAND_DISPLAY", "")
avail := checkBrowserAvailability(context.Background(), port)
if avail.Available {
t.Errorf("expected browser unavailable when port %d is busy", port)
}
if avail.Reason == "" {
t.Error("expected non-empty reason for busy port")
}
}
func TestCheckBrowserAvailability_PortAvailable(t *testing.T) {
// Find a free port.
ln, err := (&net.ListenConfig{}).Listen(context.Background(), "tcp", "127.0.0.1:0")
if err != nil {
t.Skip("cannot allocate test port")
}
port := ln.Addr().(*net.TCPAddr).Port
ln.Close()
t.Setenv("SSH_TTY", "")
t.Setenv("SSH_CLIENT", "")
t.Setenv("SSH_CONNECTION", "")
t.Setenv("DISPLAY", ":0")
t.Setenv("WAYLAND_DISPLAY", "")
avail := checkBrowserAvailability(context.Background(), port)
if !avail.Available {
t.Errorf(
"expected browser available with no SSH and free port, got reason: %s",
avail.Reason,
)
}
}
func TestCheckBrowserAvailability_ReasonIsEmptyWhenAvailable(t *testing.T) {
ln, err := (&net.ListenConfig{}).Listen(context.Background(), "tcp", "127.0.0.1:0")
if err != nil {
t.Skip("cannot allocate test port")
}
port := ln.Addr().(*net.TCPAddr).Port
ln.Close()
t.Setenv("SSH_TTY", "")
t.Setenv("SSH_CLIENT", "")
t.Setenv("SSH_CONNECTION", "")
t.Setenv("DISPLAY", ":0")
t.Setenv("WAYLAND_DISPLAY", "")
avail := checkBrowserAvailability(context.Background(), port)
if avail.Available && avail.Reason != "" {
t.Errorf("expected empty reason when browser is available, got: %s", avail.Reason)
}
}