@@ -23,9 +23,8 @@ func TestResolveProcessPID(t *testing.T) {
2323 require .NoError (t , err )
2424 defer listener .Close ()
2525
26- pid , confirmed , err := ResolveProcessPID (socketPath )
26+ pid , err := ResolveProcessPID (socketPath )
2727 require .NoError (t , err )
28- require .True (t , confirmed )
2928 require .Equal (t , os .Getpid (), pid )
3029}
3130
@@ -46,13 +45,12 @@ func TestResolveProcessPIDIgnoresConnectedSocketEntries(t *testing.T) {
4645 require .NoError (t , err )
4746 defer accepted .Close ()
4847
49- pid , confirmed , err := ResolveProcessPID (socketPath )
48+ pid , err := ResolveProcessPID (socketPath )
5049 require .NoError (t , err )
51- require .True (t , confirmed )
5250 require .Equal (t , os .Getpid (), pid )
5351}
5452
55- func TestResolveProcessPIDIsUnconfirmedForDuplicateSocketPaths (t * testing.T ) {
53+ func TestResolveProcessPIDFailsForDuplicateSocketPaths (t * testing.T ) {
5654 oldProcDir := procDir
5755 procDir = t .TempDir ()
5856 t .Cleanup (func () { procDir = oldProcDir })
@@ -63,9 +61,8 @@ func TestResolveProcessPIDIsUnconfirmedForDuplicateSocketPaths(t *testing.T) {
6361 "00000000: 00000002 00000000 00010000 0001 01 12345 " + socketPath + "\n " +
6462 "00000000: 00000002 00000000 00010000 0001 01 67890 " + socketPath + "\n " ), 0o644 ))
6563
66- _ , confirmed , err := ResolveProcessPID (socketPath )
64+ _ , err := ResolveProcessPID (socketPath )
6765 require .ErrorContains (t , err , "multiple socket inodes found" )
68- require .False (t , confirmed )
6966}
7067
7168func TestResolveProcessPIDToleratesExitedProcess (t * testing.T ) {
@@ -81,9 +78,8 @@ func TestResolveProcessPIDToleratesExitedProcess(t *testing.T) {
8178 require .NoError (t , os .MkdirAll (fdDir , 0o755 ))
8279 require .NoError (t , os .Symlink ("socket:[12345]" , filepath .Join (fdDir , "3" )))
8380
84- pid , confirmed , err := ResolveProcessPID (socketPath )
81+ pid , err := ResolveProcessPID (socketPath )
8582 require .NoError (t , err )
86- require .True (t , confirmed )
8783 require .Equal (t , 200 , pid )
8884}
8985
@@ -101,13 +97,11 @@ func TestResolveProcessPIDForOwnerPrefersExpectedProcess(t *testing.T) {
10197 require .NoError (t , os .Symlink ("socket:[12345]" , filepath .Join (fdDir , "3" )))
10298 }
10399
104- _ , confirmed , err := ResolveProcessPID (socketPath )
100+ _ , err := ResolveProcessPID (socketPath )
105101 require .ErrorContains (t , err , "multiple owning processes found" )
106- require .False (t , confirmed )
107102
108- pid , confirmed , err := ResolveProcessPIDForOwner (socketPath , 101 )
103+ pid , err := ResolveProcessPIDForOwner (socketPath , 101 )
109104 require .NoError (t , err )
110- require .True (t , confirmed )
111105 require .Equal (t , 101 , pid )
112106}
113107
@@ -121,9 +115,8 @@ func TestResolveProcessPIDReportsNoOwnerAfterExitedProcesses(t *testing.T) {
121115 require .NoError (t , os .WriteFile (filepath .Join (procDir , "net" , "unix" ), []byte ("00000000: 00000002 00000000 00010000 0001 01 12345 " + socketPath + "\n " ), 0o644 ))
122116 require .NoError (t , os .MkdirAll (filepath .Join (procDir , "100" ), 0o755 ))
123117
124- _ , confirmed , err := ResolveProcessPID (socketPath )
118+ _ , err := ResolveProcessPID (socketPath )
125119 require .ErrorIs (t , err , ErrNoOwningProcess )
126- require .False (t , confirmed )
127120 require .NotContains (t , err .Error (), "inspect process fds" )
128121}
129122
@@ -135,9 +128,8 @@ func TestResolveProcessPIDReportsMissingSocket(t *testing.T) {
135128 require .NoError (t , os .MkdirAll (filepath .Join (procDir , "net" ), 0o755 ))
136129 require .NoError (t , os .WriteFile (filepath .Join (procDir , "net" , "unix" ), nil , 0o644 ))
137130
138- _ , confirmed , err := ResolveProcessPID ("/tmp/missing.sock" )
131+ _ , err := ResolveProcessPID ("/tmp/missing.sock" )
139132 require .ErrorIs (t , err , ErrNoOwningProcess )
140- require .False (t , confirmed )
141133}
142134
143135func TestResolveProcessPIDFailsWhenFDIsUnreadable (t * testing.T ) {
@@ -152,9 +144,8 @@ func TestResolveProcessPIDFailsWhenFDIsUnreadable(t *testing.T) {
152144 require .NoError (t , os .MkdirAll (fdDir , 0o755 ))
153145 require .NoError (t , os .WriteFile (filepath .Join (fdDir , "3" ), nil , 0o644 ))
154146
155- _ , confirmed , err := ResolveProcessPID (socketPath )
147+ _ , err := ResolveProcessPID (socketPath )
156148 require .Error (t , err )
157- require .False (t , confirmed )
158149 require .ErrorContains (t , err , "inspect process fds" )
159150 require .False (t , errors .Is (err , ErrNoOwningProcess ))
160151}
@@ -177,9 +168,8 @@ func TestResolveProcessPIDForOwnerConfirmsCandidateWithoutFullScan(t *testing.T)
177168 require .NoError (t , os .MkdirAll (siblingFDDir , 0o755 ))
178169 require .NoError (t , os .WriteFile (filepath .Join (siblingFDDir , "3" ), nil , 0o644 ))
179170
180- pid , confirmed , err := ResolveProcessPIDForOwner (socketPath , 100 )
171+ pid , err := ResolveProcessPIDForOwner (socketPath , 100 )
181172 require .NoError (t , err )
182- require .True (t , confirmed )
183173 require .Equal (t , 100 , pid )
184174}
185175
@@ -199,9 +189,8 @@ func TestResolveProcessPIDForOwnerSkipsUnreadableCandidateFD(t *testing.T) {
199189 require .NoError (t , os .WriteFile (filepath .Join (fdDir , "1" ), nil , 0o644 ))
200190 require .NoError (t , os .Symlink ("socket:[12345]" , filepath .Join (fdDir , "3" )))
201191
202- pid , confirmed , err := ResolveProcessPIDForOwner (socketPath , 100 )
192+ pid , err := ResolveProcessPIDForOwner (socketPath , 100 )
203193 require .NoError (t , err )
204- require .True (t , confirmed )
205194 require .Equal (t , 100 , pid )
206195}
207196
@@ -222,9 +211,8 @@ func TestResolveProcessPIDForOwnerFallsThroughWhenCandidateLacksSocket(t *testin
222211 require .NoError (t , os .MkdirAll (ownerFDDir , 0o755 ))
223212 require .NoError (t , os .Symlink ("socket:[12345]" , filepath .Join (ownerFDDir , "3" )))
224213
225- pid , confirmed , err := ResolveProcessPIDForOwner (socketPath , 999 )
214+ pid , err := ResolveProcessPIDForOwner (socketPath , 999 )
226215 require .NoError (t , err )
227- require .True (t , confirmed )
228216 require .Equal (t , 200 , pid )
229217}
230218
@@ -241,9 +229,8 @@ func TestResolveProcessPIDForOwnerFallsThroughWhenCandidateIsGone(t *testing.T)
241229 require .NoError (t , os .MkdirAll (ownerFDDir , 0o755 ))
242230 require .NoError (t , os .Symlink ("socket:[12345]" , filepath .Join (ownerFDDir , "3" )))
243231
244- pid , confirmed , err := ResolveProcessPIDForOwner (socketPath , 999 )
232+ pid , err := ResolveProcessPIDForOwner (socketPath , 999 )
245233 require .NoError (t , err )
246- require .True (t , confirmed )
247234 require .Equal (t , 200 , pid )
248235}
249236
@@ -255,9 +242,8 @@ func TestResolveProcessPIDForOwnerReportsMissingSocket(t *testing.T) {
255242 require .NoError (t , os .MkdirAll (filepath .Join (procDir , "net" ), 0o755 ))
256243 require .NoError (t , os .WriteFile (filepath .Join (procDir , "net" , "unix" ), []byte ("00000000: 00000002 00000000 00010000 0001 01 12345 /tmp/other.sock\n " ), 0o644 ))
257244
258- _ , confirmed , err := ResolveProcessPIDForOwner ("/tmp/missing.sock" , 100 )
245+ _ , err := ResolveProcessPIDForOwner ("/tmp/missing.sock" , 100 )
259246 require .ErrorIs (t , err , ErrNoOwningProcess )
260- require .False (t , confirmed )
261247}
262248
263249func TestResolveProcessPIDForOwnerReportsMissingSocketWithHeaderOnlyUnixTable (t * testing.T ) {
@@ -268,9 +254,8 @@ func TestResolveProcessPIDForOwnerReportsMissingSocketWithHeaderOnlyUnixTable(t
268254 require .NoError (t , os .MkdirAll (filepath .Join (procDir , "net" ), 0o755 ))
269255 require .NoError (t , os .WriteFile (filepath .Join (procDir , "net" , "unix" ), []byte ("Num RefCount Protocol Flags Type St Inode Path\n " ), 0o644 ))
270256
271- _ , confirmed , err := ResolveProcessPIDForOwner ("/tmp/missing.sock" , 100 )
257+ _ , err := ResolveProcessPIDForOwner ("/tmp/missing.sock" , 100 )
272258 require .ErrorIs (t , err , ErrNoOwningProcess )
273- require .False (t , confirmed )
274259}
275260
276261func TestResolveProcessPIDForOwnerReportsDuplicateSocketInodes (t * testing.T ) {
@@ -288,9 +273,8 @@ func TestResolveProcessPIDForOwnerReportsDuplicateSocketInodes(t *testing.T) {
288273 require .NoError (t , os .MkdirAll (fdDir , 0o755 ))
289274 require .NoError (t , os .Symlink ("socket:[12345]" , filepath .Join (fdDir , "3" )))
290275
291- _ , confirmed , err := ResolveProcessPIDForOwner (socketPath , 100 )
276+ _ , err := ResolveProcessPIDForOwner (socketPath , 100 )
292277 require .ErrorContains (t , err , "multiple socket inodes found" )
293- require .False (t , confirmed )
294278}
295279
296280func TestResolveProcessPIDForOwnerConfirmsLiveListener (t * testing.T ) {
@@ -301,12 +285,29 @@ func TestResolveProcessPIDForOwnerConfirmsLiveListener(t *testing.T) {
301285 require .NoError (t , err )
302286 defer listener .Close ()
303287
304- pid , confirmed , err := ResolveProcessPIDForOwner (socketPath , os .Getpid ())
288+ pid , err := ResolveProcessPIDForOwner (socketPath , os .Getpid ())
305289 require .NoError (t , err )
306- require .True (t , confirmed )
307290 require .Equal (t , os .Getpid (), pid )
308291}
309292
293+ func TestResolveProcessPIDIgnoresCommandLineBystander (t * testing.T ) {
294+ socketPath := filepath .Join (t .TempDir (), "test.sock" )
295+ require .NoError (t , os .WriteFile (socketPath , nil , 0o600 ))
296+
297+ // A process carrying the socket path in its command line (e.g. a debug
298+ // client like ch-remote) without holding the listener must not resolve
299+ // as the owner; a missing listener is proof the hypervisor is gone.
300+ bystander := exec .Command ("sh" , "-c" , "sleep 30" , "sh" , socketPath )
301+ require .NoError (t , bystander .Start ())
302+ t .Cleanup (func () {
303+ _ = bystander .Process .Kill ()
304+ _ = bystander .Wait ()
305+ })
306+
307+ _ , err := ResolveProcessPID (socketPath )
308+ require .ErrorIs (t , err , ErrNoOwningProcess )
309+ }
310+
310311func TestResolveProcessPIDDuringProcessChurn (t * testing.T ) {
311312 socketPath := filepath .Join (t .TempDir (), "test.sock" )
312313 listener , err := net .Listen ("unix" , socketPath )
@@ -328,9 +329,8 @@ func TestResolveProcessPIDDuringProcessChurn(t *testing.T) {
328329
329330 deadline := time .Now ().Add (2 * time .Second )
330331 for time .Now ().Before (deadline ) {
331- pid , confirmed , err := ResolveProcessPIDForOwner (socketPath , os .Getpid ())
332+ pid , err := ResolveProcessPIDForOwner (socketPath , os .Getpid ())
332333 require .NoError (t , err )
333- require .True (t , confirmed )
334334 require .Equal (t , os .Getpid (), pid )
335335 }
336336}
0 commit comments