gdbclient/internal/pool/gdb_test_server.go (60 lines of code) (raw):

/* * (C) 2019-present Alibaba Group Holding Limited. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ /** * @author : Liu Jianping * @date : 2020/3/23 */ package pool import ( "github.com/gorilla/websocket" "net/http" "net/http/httptest" "strings" ) const requestIdMatchStr = "\"requestId\":\"" const requestIdEndMatchStr = "\",\"op\":" const respPrefix = `{"requestId": "` const respSuffix = `", "result": { "data": { "@type": "g:List", "@value": [ { "@type": "g:Int64", "@value": 0 } ] }, "meta": { "@type": "g:Map", "@value": [] } }, "status": { "attributes": { "@type": "g:Map", "@value": [] }, "code": 200, "message": "" } } ` type testGdbEchoServer struct { wsUpgrader websocket.Upgrader wsServer *httptest.Server wsEchoFun http.HandlerFunc WsUrl string WsMakeResponseFunc func(requestId string) []byte } func StartGdbTestServer() *testGdbEchoServer { server := &testGdbEchoServer{ wsUpgrader: websocket.Upgrader{}, } // make default response server.WsMakeResponseFunc = func(requestId string) []byte { response := respPrefix + requestId + respSuffix return []byte(response) } server.wsEchoFun = func(writer http.ResponseWriter, request *http.Request) { c, err := server.wsUpgrader.Upgrade(writer, request, nil) if err != nil { return } defer c.Close() for { mt, message, err := c.ReadMessage() if err != nil { break } msg := string(message) var response []byte idIdx := strings.Index(msg, requestIdMatchStr) if idIdx > 0 { idEndIdx := strings.Index(msg, requestIdEndMatchStr) requestId := msg[idIdx+len(requestIdMatchStr) : idEndIdx] response = server.WsMakeResponseFunc(requestId) } else { response = []byte(msg) } err = c.WriteMessage(mt, response) if err != nil { break } } } server.wsServer = httptest.NewServer(server.wsEchoFun) server.WsUrl = "ws" + strings.TrimPrefix(server.wsServer.URL, "http") return server } func (server *testGdbEchoServer) CloseGdbTestServer() { server.wsServer.Close() }