mirror of https://github.com/cirruslabs/tart.git
fix(control-socket): use .path instead of .path() for stale socket cleanup
Use URL's .path property instead of .path() method when removing stale
control sockets in ControlSocket.run(). The .path() method returns only
the relative component ('control.sock') while .path resolves to the
full absolute path. Since the cwd change happens after the cleanup,
removeItem silently failed to find the socket.
Add unit tests verifying controlSocketURL resolves correctly for both
absolute cleanup and relative binding use cases.
Fixes: https://github.com/cirruslabs/tart/issues/1220
This commit is contained in:
parent
5287b597a1
commit
3f1624e31a
|
|
@ -19,7 +19,7 @@ class ControlSocket {
|
|||
func run() async throws {
|
||||
// Remove control socket file from previous "tart run" invocations,
|
||||
// if any, otherwise we may get the "address already in use" error
|
||||
try? FileManager.default.removeItem(atPath: controlSocketURL.path())
|
||||
try? FileManager.default.removeItem(atPath: controlSocketURL.path)
|
||||
|
||||
// Change the current working directory to a VM's base directory
|
||||
// to work around Unix domain socket 104 byte limitation [1]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
import XCTest
|
||||
@testable import tart
|
||||
|
||||
final class ControlSocketURLTests: XCTestCase {
|
||||
func testControlSocketURLResolvesToAbsolutePath() throws {
|
||||
let baseURL = URL(fileURLWithPath: "/Users/test/.tart/vms/myvm/")
|
||||
let vmDir = VMDirectory(baseURL: baseURL)
|
||||
|
||||
// The .path property resolves relative URLs to absolute paths,
|
||||
// which is required for stale socket cleanup in ControlSocket.run()
|
||||
// since it happens before the working directory is changed.
|
||||
XCTAssertEqual(
|
||||
vmDir.controlSocketURL.path,
|
||||
"/Users/test/.tart/vms/myvm/control.sock"
|
||||
)
|
||||
}
|
||||
|
||||
func testControlSocketURLRelativePathIsJustFilename() throws {
|
||||
let baseURL = URL(fileURLWithPath: "/Users/test/.tart/vms/myvm/")
|
||||
let vmDir = VMDirectory(baseURL: baseURL)
|
||||
|
||||
// The .relativePath is used for socket binding after cwd is changed
|
||||
XCTAssertEqual(
|
||||
vmDir.controlSocketURL.relativePath,
|
||||
"control.sock"
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue