wsproxy mode tested.
This commit is contained in:
parent
0801310542
commit
e31ab7176b
@ -11,6 +11,8 @@ import (
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
@ -111,6 +113,10 @@ type TestClient struct {
|
||||
serverSIdeConn iowrappers.ReadWriteAddrCloser
|
||||
publicId models.RendezVousId
|
||||
clientId models.ClientId
|
||||
|
||||
// for wsproxy mode
|
||||
serverProtocol comms.ProtocolVersion
|
||||
clientConnectionInfo comms.ClientConnectionInfo
|
||||
}
|
||||
|
||||
func NewTestClient(ctx context.Context) *TestClient {
|
||||
@ -127,6 +133,26 @@ func (c *TestClient) Disconnect() {
|
||||
c.clientSideConn.Close()
|
||||
}
|
||||
|
||||
func (c *TestClient) WsproxyInit() error {
|
||||
channel := comms.NewGOBChannel(c.clientSideConn)
|
||||
serverProtocol, err := comms.ReceiveWithTimeout[comms.ProtocolVersion](channel)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.serverProtocol = serverProtocol
|
||||
|
||||
clientConnectionInfo, err := comms.ReceiveWithTimeout[comms.ClientConnectionInfo](channel)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
c.clientConnectionInfo = clientConnectionInfo
|
||||
err = comms.SendWithTimeout(channel, comms.NewEnvironmentInfo(os.Getenv("SHELL")))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *MatchMakerTestSuite) Test_newMatchMaker() {
|
||||
s.checkState(0, 0)
|
||||
}
|
||||
@ -152,7 +178,7 @@ func (s *MatchMakerTestSuite) Test_singleAgentAndClient() {
|
||||
waitForAgentFunc := s.registerAgent(publicId, agent)
|
||||
go waitForAgentFunc()
|
||||
|
||||
client, err := s.connectClient(publicId)
|
||||
client, err := s.connectClient(publicId, false)
|
||||
s.Nil(err)
|
||||
|
||||
s.checkState(1, 1)
|
||||
@ -174,9 +200,8 @@ func (s *MatchMakerTestSuite) Test_singleAgentAndClient() {
|
||||
func (s *MatchMakerTestSuite) Test_ConnectCLientToUnknownAgent() {
|
||||
publicId := models.RendezVousId("abc")
|
||||
|
||||
client, err := s.connectClient(publicId)
|
||||
_, err := s.connectClient(publicId, false)
|
||||
s.NotNil(err)
|
||||
s.Nil(client)
|
||||
}
|
||||
|
||||
func (s *MatchMakerTestSuite) Test_multipleAgentsAndClients() {
|
||||
@ -194,7 +219,7 @@ func (s *MatchMakerTestSuite) Test_multipleAgentsAndClients() {
|
||||
testClients := make([]*TestClient, 0)
|
||||
for publicId, nclients := range clients {
|
||||
for range nclients {
|
||||
client, err := s.connectClient(models.RendezVousId(publicId))
|
||||
client, err := s.connectClient(models.RendezVousId(publicId), false)
|
||||
s.Require().Nil(err)
|
||||
testClients = append(testClients, client)
|
||||
}
|
||||
@ -220,14 +245,14 @@ func (s *MatchMakerTestSuite) Test_multipleAgentsAndClients() {
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func (s *MatchMakerTestSuite) connectClient(publicId models.RendezVousId) (*TestClient, error) {
|
||||
func (s *MatchMakerTestSuite) connectClient(publicId models.RendezVousId, wsproxyMode bool) (*TestClient, error) {
|
||||
client := NewTestClient(s.ctx)
|
||||
var clientId models.ClientId
|
||||
res := testsupport.RunAndWait(
|
||||
&s.Suite,
|
||||
func() any {
|
||||
//server
|
||||
clientIdCreated, synchronizer, err := s.matchMaker.Connect(false, publicId, client.serverSIdeConn)
|
||||
clientIdCreated, synchronizer, err := s.matchMaker.Connect(wsproxyMode, publicId, client.serverSIdeConn)
|
||||
clientId = clientIdCreated
|
||||
if err == nil {
|
||||
log.Println("test: synchronizing streams.")
|
||||
@ -236,12 +261,14 @@ func (s *MatchMakerTestSuite) connectClient(publicId models.RendezVousId) (*Test
|
||||
return err
|
||||
},
|
||||
func() any {
|
||||
// client, nothing to do with wsproxy mode off.
|
||||
if wsproxyMode {
|
||||
client.WsproxyInit()
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if res[0] != nil {
|
||||
return nil, res[0].(error)
|
||||
return client, res[0].(error)
|
||||
}
|
||||
client.publicId = publicId
|
||||
client.clientId = clientId
|
||||
@ -287,3 +314,40 @@ func (s *MatchMakerTestSuite) registerAgent(publicId models.RendezVousId, agent
|
||||
}
|
||||
return res[0].(WaitForAgentFunc)
|
||||
}
|
||||
|
||||
func (s *MatchMakerTestSuite) Test_ConnectWsproxyMode() {
|
||||
publicId := models.RendezVousId("abc")
|
||||
agent := NewTestAgent(s.ctx)
|
||||
|
||||
waitForAgentFunc := s.registerAgent(publicId, agent)
|
||||
go waitForAgentFunc()
|
||||
|
||||
client, err := s.connectClient(publicId, true)
|
||||
s.Nil(err)
|
||||
|
||||
s.checkState(1, 1)
|
||||
|
||||
agentClientSideConn, err := agent.listener.GetConnection(string(client.clientId))
|
||||
log.Printf("Agent side conn %v", agentClientSideConn)
|
||||
s.Nil(err)
|
||||
testsupport.BidirectionalConnectionCheck(
|
||||
&s.Suite, "testmsg",
|
||||
client.clientSideConn,
|
||||
agentClientSideConn)
|
||||
|
||||
s.True(client.clientConnectionInfo.Ok)
|
||||
|
||||
client.Disconnect()
|
||||
// It is the agents choice to exit> The test agent does not exit by default when
|
||||
// there are no more connections.
|
||||
s.checkState(1, 0)
|
||||
}
|
||||
|
||||
func (s *MatchMakerTestSuite) Test_ConnectWsproxyModeAgentNotFound() {
|
||||
publicId := models.RendezVousId("abc")
|
||||
|
||||
client, err := s.connectClient(publicId, true)
|
||||
s.NotNil(err)
|
||||
s.True(strings.Contains(err.Error(), "No agent found for rendez-vous id"))
|
||||
s.False(client.clientConnectionInfo.Ok)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user