feat: add preferred debug port planning

This commit is contained in:
QiuSW
2026-07-27 09:29:10 +08:00
parent 3f382a431d
commit 79630e0d48
10 changed files with 518 additions and 74 deletions
+36 -4
View File
@@ -38,6 +38,30 @@ func TestInstanceStarterBuildsLaunchSpecFromInstanceAndSettings(t *testing.T) {
}
}
func TestInstanceStarterUsesPreferredPortAndSkipsOtherInstancesReservations(t *testing.T) {
launcher := &fakeProcessLauncher{handle: fakeProcessHandle{pid: 4242}}
remote := &fakeRemoteDebugInspector{
endpoint: browser.RemoteDebugEndpoint{Port: 9668},
inspectErr: browser.ErrRemoteDebugEndpointUnavailable,
allocatedPorts: []int{9667, 9668},
}
starter := instanceStarter{
launcher: launcher,
resolver: &fakeExecutableResolver{path: `C:\Browser\chrome.exe`},
managedProfiles: fakeManagedProfileInspector{},
externalProfiles: fakeExternalProfileInspector{},
remoteDebug: remote,
portAllocator: remote,
}
outcome, err := starter.Start(context.Background(), ui.InstanceRow{ID: "chrome-a", Browser: "Chrome", UserDataDir: `C:\profiles\chrome-a`, PreferredRemoteDebugPort: 9666}, ui.SettingsState{RemoteDebugStartPort: 9777, ReservedRemoteDebugPorts: []int{9667}}, 1)
if err != nil || outcome.RemoteDebugPort != 9668 || launcher.spec.RemoteDebugPort != 9668 {
t.Fatalf("Start() = %#v, launch = %#v, error = %v", outcome, launcher.spec, err)
}
if len(remote.allocationStarts) != 2 || remote.allocationStarts[0] != 9666 || remote.allocationStarts[1] != 9668 {
t.Fatalf("allocator starts = %#v", remote.allocationStarts)
}
}
func TestInstanceStarterResolvesSelectedProxyAtLaunch(t *testing.T) {
launcher := &fakeProcessLauncher{handle: fakeProcessHandle{pid: 4242}}
resolver := &fakeExecutableResolver{path: `C:\Browser\chrome.exe`}
@@ -341,10 +365,12 @@ func (i fakeExternalProfileInspector) InspectProfile(context.Context, domain.Bro
}
type fakeRemoteDebugInspector struct {
endpoint browser.RemoteDebugEndpoint
inspectErr error
waitErr error
port int
endpoint browser.RemoteDebugEndpoint
inspectErr error
waitErr error
port int
allocatedPorts []int
allocationStarts []int
}
func (i *fakeRemoteDebugInspector) InspectRemoteDebugEndpoint(context.Context, domain.BrowserKind, string) (browser.RemoteDebugEndpoint, error) {
@@ -364,6 +390,12 @@ func (i *fakeRemoteDebugInspector) WaitForRemoteDebugPort(context.Context, domai
}
func (i *fakeRemoteDebugInspector) FindAvailableRemoteDebugPort(_ context.Context, start int) (int, error) {
i.allocationStarts = append(i.allocationStarts, start)
if len(i.allocatedPorts) > 0 {
port := i.allocatedPorts[0]
i.allocatedPorts = i.allocatedPorts[1:]
return port, nil
}
if i.port != 0 {
return i.port, nil
}