未验证 提交 cf106473 编写于 作者: P polinasok 提交者: GitHub

service/dap: fix test setup for forcing server stop, add extra test (#2702)

Co-authored-by: NPolina Sokolova <polinasok@users.noreply.github.com>
上级 ab38d711
......@@ -68,13 +68,13 @@ func startDapServerWithClient(t *testing.T, serverStopped chan struct{}) *daptes
return client
}
func startDapServer(t *testing.T, serverStopped chan struct{}) (listener net.Listener, disconnectChan chan struct{}) {
func startDapServer(t *testing.T, serverStopped chan struct{}) (listener net.Listener, forceStop chan struct{}) {
// Start the DAP server.
listener, err := net.Listen("tcp", ":0")
if err != nil {
t.Fatal(err)
}
disconnectChan = make(chan struct{})
disconnectChan := make(chan struct{})
server := NewServer(&service.Config{
Listener: listener,
DisconnectChan: disconnectChan,
......@@ -86,43 +86,47 @@ func startDapServer(t *testing.T, serverStopped chan struct{}) (listener net.Lis
// Run a goroutine that stops the server when disconnectChan is signaled.
// This helps us test that certain events cause the server to stop as
// expected.
forceStop = make(chan struct{})
go func() {
defer func() {
if serverStopped != nil {
close(serverStopped)
}
}()
<-disconnectChan
select {
case <-disconnectChan: // Stop triggered internally
case <-forceStop: // Stop triggered externally
}
server.Stop()
}()
return listener, disconnectChan
return listener, forceStop
}
func TestForceQuitNoClient(t *testing.T) {
func TestForceStopNoClient(t *testing.T) {
serverStopped := make(chan struct{})
_, disconnectChan := startDapServer(t, serverStopped)
close(disconnectChan) // trigger server.Stop()
_, forceStop := startDapServer(t, serverStopped)
close(forceStop)
<-serverStopped
}
func TestForceQuitNoTarget(t *testing.T) {
func TestForceStopNoTarget(t *testing.T) {
serverStopped := make(chan struct{})
listener, disconnectChan := startDapServer(t, serverStopped)
listener, forceStop := startDapServer(t, serverStopped)
client := daptest.NewClient(listener.Addr().String())
defer client.Close()
defer client.Close() // does not trigger Stop
client.InitializeRequest()
client.ExpectInitializeResponseAndCapabilities(t)
close(disconnectChan)
close(forceStop)
<-serverStopped
}
func TestForceQuitWithTarget(t *testing.T) {
func TestForceStopWithTarget(t *testing.T) {
serverStopped := make(chan struct{})
listener, disconnectChan := startDapServer(t, serverStopped)
listener, forceStop := startDapServer(t, serverStopped)
client := daptest.NewClient(listener.Addr().String())
defer client.Close()
defer client.Close() // does not trigger Stop
client.InitializeRequest()
client.ExpectInitializeResponseAndCapabilities(t)
......@@ -130,7 +134,23 @@ func TestForceQuitWithTarget(t *testing.T) {
client.LaunchRequest("exec", fixture.Path, stopOnEntry)
client.ExpectInitializedEvent(t)
client.ExpectLaunchResponse(t)
close(disconnectChan)
close(forceStop)
<-serverStopped
}
func TestForceStopWhileStopping(t *testing.T) {
serverStopped := make(chan struct{})
listener, forceStop := startDapServer(t, serverStopped)
client := daptest.NewClient(listener.Addr().String())
client.InitializeRequest()
client.ExpectInitializeResponseAndCapabilities(t)
fixture := protest.BuildFixture("increment", protest.AllNonOptimized)
client.LaunchRequest("exec", fixture.Path, stopOnEntry)
client.ExpectInitializedEvent(t)
client.Close() // depending on timing may trigger Stop()
time.Sleep(time.Microsecond)
close(forceStop) // depending on timing may trigger Stop()
<-serverStopped
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册