some refactoring inpraparation for multiple agents and clients.
This commit is contained in:
		
							parent
							
								
									b4fb87134a
								
							
						
					
					
						commit
						acd9f0441a
					
				| @ -17,18 +17,7 @@ import ( | |||||||
| 	"time" | 	"time" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // test cases
 | // test case
 | ||||||
| //
 |  | ||||||
| // Agent only: verify state, verify agentregistration message
 |  | ||||||
| // - Connect single agent
 |  | ||||||
| // - Connect agent, connect second agent with duplicate id
 |  | ||||||
| //    -> new id taken out
 |  | ||||||
| // - Connect more than 100 agents with the same id
 |  | ||||||
| //   -> 101th agents gets error
 |  | ||||||
| //
 |  | ||||||
| // Client connected to agent: Verify clientConnection and agentCOnnection, verify state, verify clientInfo message.
 |  | ||||||
| // - Connect agent + connect client with mmtching id
 |  | ||||||
| // - Connect agent + connect client with wrong id
 |  | ||||||
| //
 | //
 | ||||||
| // Overall:
 | // Overall:
 | ||||||
| // - Connect agent, connect 2 clients
 | // - Connect agent, connect 2 clients
 | ||||||
| @ -171,34 +160,29 @@ func (s *AdminTestSuite) Test_connectClient() { | |||||||
| 	res := testsupport.RunAndWait( | 	res := testsupport.RunAndWait( | ||||||
| 		&s.Suite, | 		&s.Suite, | ||||||
| 		func() any { | 		func() any { | ||||||
| 			// server
 | 			return s.connectClient(publicId, serverToClientRW, data) | ||||||
| 			clientConn, err := s.admin.AddClient(models.RendezVousId(publicId), |  | ||||||
| 				iowrappers.NewSimpleReadWriteAddrCloser(serverToClientRW, testsupport.DummyRemoteAddr("remoteaddr"))) |  | ||||||
| 			s.Nil(err) |  | ||||||
| 			// Connection to agent over yamux
 |  | ||||||
| 			serverToAgentYamux := clientConn.agentConnection |  | ||||||
| 			// test by sending a message to the agent.
 |  | ||||||
| 			testsupport.AssertWriteData(&s.Suite, data, serverToAgentYamux) |  | ||||||
| 			return clientConn |  | ||||||
| 		}, | 		}, | ||||||
| 		func() any { | 		func() any { | ||||||
| 			// agent
 | 			return s.clientConnection(agentRes, data) | ||||||
| 			listener := comms.NewAgentListener(agentRes.commChannel.Session) |  | ||||||
| 			//.Connection from server over yamux
 |  | ||||||
| 			agentToServerYamux, err := listener.Accept() |  | ||||||
| 			s.Nil(err) |  | ||||||
| 			// Test by receiving a message from the server
 |  | ||||||
| 			testsupport.AssertReadData(&s.Suite, data, agentToServerYamux) |  | ||||||
| 			return agentToServerYamux |  | ||||||
| 		}) | 		}) | ||||||
| 
 | 
 | ||||||
| 	// Now we need to verify bi-directional communication between client and agent through the wserv
 | 	// bidirectional communciataion check
 | ||||||
| 
 |  | ||||||
| 	clientConn := res[0].(*clientConnection) | 	clientConn := res[0].(*clientConnection) | ||||||
| 	go clientConn.Synchronize() |  | ||||||
| 
 |  | ||||||
| 	agentToServerYamux := res[1].(io.ReadWriter) | 	agentToServerYamux := res[1].(io.ReadWriter) | ||||||
|  | 	go clientConn.Synchronize() | ||||||
|  | 	s.bidirectionalConnectionCheck(clientToServerRW, agentToServerYamux) | ||||||
| 
 | 
 | ||||||
|  | 	// verify state
 | ||||||
|  | 	state := s.admin.CreateNotifification() | ||||||
|  | 	s.Equal(1, len(state.Agents)) | ||||||
|  | 	s.Equal(1, len(state.Clients)) | ||||||
|  | 	s.Equal(clientConn.Info, state.Clients[clientConn.Info.Guid]) | ||||||
|  | 
 | ||||||
|  | 	// will close the connections and as a result also th synchronize goroutine.
 | ||||||
|  | 	s.cancelFunc() | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *AdminTestSuite) bidirectionalConnectionCheck(clientToServerRW io.ReadWriteCloser, agentToServerYamux io.ReadWriter) { | ||||||
| 	data1 := "mytestdata" | 	data1 := "mytestdata" | ||||||
| 	data2 := "mytestdata-2" | 	data2 := "mytestdata-2" | ||||||
| 	testsupport.RunAndWait( | 	testsupport.RunAndWait( | ||||||
| @ -213,9 +197,6 @@ func (s *AdminTestSuite) Test_connectClient() { | |||||||
| 			testsupport.AssertWriteData(&s.Suite, data2, clientToServerRW) | 			testsupport.AssertWriteData(&s.Suite, data2, clientToServerRW) | ||||||
| 			return nil | 			return nil | ||||||
| 		}) | 		}) | ||||||
| 
 |  | ||||||
| 	// will close the connections and as a result also th synchronize goroutine.
 |  | ||||||
| 	s.cancelFunc() |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (s *AdminTestSuite) Test_connectClientUnknownRendezVousId() { | func (s *AdminTestSuite) Test_connectClientUnknownRendezVousId() { | ||||||
| @ -229,8 +210,27 @@ func (s *AdminTestSuite) Test_connectClientUnknownRendezVousId() { | |||||||
| 	_, err := s.admin.AddClient(models.RendezVousId(publicId+"sothatisunknown"), | 	_, err := s.admin.AddClient(models.RendezVousId(publicId+"sothatisunknown"), | ||||||
| 		iowrappers.NewSimpleReadWriteAddrCloser(serverToClientRW, testsupport.DummyRemoteAddr("remoteaddr"))) | 		iowrappers.NewSimpleReadWriteAddrCloser(serverToClientRW, testsupport.DummyRemoteAddr("remoteaddr"))) | ||||||
| 	s.NotNil(err) | 	s.NotNil(err) | ||||||
|  | 
 | ||||||
|  | 	// verify state
 | ||||||
|  | 	state := s.admin.CreateNotifification() | ||||||
|  | 	s.Equal(1, len(state.Agents)) | ||||||
|  | 	s.Equal(0, len(state.Clients)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Registering an agent on the server
 | ||||||
|  | 
 | ||||||
|  | func (s *AdminTestSuite) addAgent(publicId string, assignedPublicId string, serverRW io.ReadWriteCloser) (*agentConnection, error) { | ||||||
|  | 	agentConn, err := s.admin.AddAgent( | ||||||
|  | 		s.hostKey, models.RendezVousId(publicId), comms.EnvironmentInfo{}, | ||||||
|  | 		serverRW) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	s.Equal(assignedPublicId, string(agentConn.Info.PublicId)) | ||||||
|  | 	return agentConn, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Agent activities registring on the server
 | ||||||
| func (s *AdminTestSuite) agentRegistration(agentRW io.ReadWriteCloser) AgentRegisterResult { | func (s *AdminTestSuite) agentRegistration(agentRW io.ReadWriteCloser) AgentRegisterResult { | ||||||
| 	// verify registration message received
 | 	// verify registration message received
 | ||||||
| 	agentRegistration, err := comms.ReceiveRegistrationMessage(agentRW) | 	agentRegistration, err := comms.ReceiveRegistrationMessage(agentRW) | ||||||
| @ -245,13 +245,25 @@ func (s *AdminTestSuite) agentRegistration(agentRW io.ReadWriteCloser) AgentRegi | |||||||
| 	return AgentRegisterResult{registration: agentRegistration, commChannel: commChannel, err: nil} | 	return AgentRegisterResult{registration: agentRegistration, commChannel: commChannel, err: nil} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (s *AdminTestSuite) addAgent(publicId string, assignedPublicId string, serverRW io.ReadWriteCloser) (*agentConnection, error) { | func (s *AdminTestSuite) connectClient(publicId string, serverToClientRW io.ReadWriteCloser, data string) any { | ||||||
| 	agentConn, err := s.admin.AddAgent( | 	// server
 | ||||||
| 		s.hostKey, models.RendezVousId(publicId), comms.EnvironmentInfo{}, | 	clientConn, err := s.admin.AddClient(models.RendezVousId(publicId), | ||||||
| 		serverRW) | 		iowrappers.NewSimpleReadWriteAddrCloser(serverToClientRW, testsupport.DummyRemoteAddr("remoteaddr"))) | ||||||
| 	if err != nil { | 	s.Nil(err) | ||||||
| 		return nil, err | 	// Connection to agent over yamux
 | ||||||
| 	} | 	serverToAgentYamux := clientConn.agentConnection | ||||||
| 	s.Equal(assignedPublicId, string(agentConn.Info.PublicId)) | 	// test by sending a message to the agent.
 | ||||||
| 	return agentConn, nil | 	testsupport.AssertWriteData(&s.Suite, data, serverToAgentYamux) | ||||||
|  | 	return clientConn | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (s *AdminTestSuite) clientConnection(agentRes AgentRegisterResult, data string) any { | ||||||
|  | 	// agent
 | ||||||
|  | 	listener := comms.NewAgentListener(agentRes.commChannel.Session) | ||||||
|  | 	//.Connection from server over yamux
 | ||||||
|  | 	agentToServerYamux, err := listener.Accept() | ||||||
|  | 	s.Nil(err) | ||||||
|  | 	// Test by receiving a message from the server
 | ||||||
|  | 	testsupport.AssertReadData(&s.Suite, data, agentToServerYamux) | ||||||
|  | 	return agentToServerYamux | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user