mirror of
				https://github.com/mochi-mqtt/server.git
				synced 2025-10-31 19:42:38 +08:00 
			
		
		
		
	More tests, connecting MQTT
This commit is contained in:
		
							
								
								
									
										7
									
								
								mqtt.go
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								mqtt.go
									
									
									
									
									
								
							| @@ -229,7 +229,6 @@ DONE: | ||||
| 			cl.p.RefreshDeadline(cl.keepalive) | ||||
|  | ||||
| 			// Read in the fixed header of the packet. | ||||
| 			//fh := new(packets.FixedHeader) | ||||
| 			err = cl.p.ReadFixedHeader(fh) | ||||
| 			if err != nil { | ||||
| 				return ErrReadFixedHeader | ||||
| @@ -245,12 +244,10 @@ DONE: | ||||
| 			pk, err = cl.p.Read() | ||||
| 			if err != nil { | ||||
| 				fmt.Println("RC READ ERR", err) | ||||
| 				//return ErrReadPacketPayload | ||||
| 				return nil | ||||
| 				return ErrReadPacketPayload | ||||
| 				//return nil | ||||
| 			} | ||||
|  | ||||
| 			fmt.Println("READ PACKET", pk) | ||||
|  | ||||
| 			// Validate the packet if necessary. | ||||
| 			_, err = pk.Validate() | ||||
| 			if err != nil { | ||||
|   | ||||
							
								
								
									
										115
									
								
								mqtt_test.go
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								mqtt_test.go
									
									
									
									
									
								
							| @@ -54,13 +54,10 @@ func (q *quietWriter) Flush() error { | ||||
| func setupClient(id string) (s *Server, r net.Conn, w net.Conn, cl *client) { | ||||
| 	r, w = net.Pipe() | ||||
| 	s = New() | ||||
| 	cl = newClient( // new(MockNetConn) | ||||
| 		NewProcessor(r, circ.NewReader(bufferSize, blockSize), circ.NewWriter(bufferSize, blockSize)), | ||||
| 		&packets.ConnectPacket{ | ||||
| 			ClientIdentifier: id, | ||||
| 		}, | ||||
| 		new(auth.Allow), | ||||
| 	) | ||||
| 	p := NewProcessor(r, circ.NewReader(bufferSize, blockSize), circ.NewWriter(bufferSize, blockSize)) | ||||
| 	p.Start() | ||||
| 	cl = newClient(p, &packets.ConnectPacket{ClientIdentifier: id}, new(auth.Allow)) | ||||
|  | ||||
| 	return | ||||
| } | ||||
|  | ||||
| @@ -475,6 +472,78 @@ func TestServerReadClientOK(t *testing.T) { | ||||
| 			'a', '/', 'b', '/', 'c', // Topic Name | ||||
| 			'h', 'e', 'l', 'l', 'o', ' ', 'm', 'o', 'c', 'h', 'i', // Payload | ||||
| 		}) | ||||
| 	}() | ||||
|  | ||||
| 	o := make(chan error) | ||||
| 	go func() { | ||||
| 		time.Sleep(time.Millisecond * 10) | ||||
| 		o <- s.readClient(cl) | ||||
| 	}() | ||||
|  | ||||
| 	w.Close() | ||||
| 	r.Close() | ||||
| 	require.NoError(t, <-o) | ||||
| } | ||||
|  | ||||
| func TestServerReadClientNoConn(t *testing.T) { | ||||
| 	s, r, _, cl := setupClient("zen") | ||||
| 	cl.p.Conn.Close() | ||||
| 	cl.p.Conn = nil | ||||
| 	r.Close() | ||||
|  | ||||
| 	err := s.readClient(cl) | ||||
| 	require.Error(t, err) | ||||
| 	require.Equal(t, ErrConnectionClosed, err) | ||||
| } | ||||
|  | ||||
| func TestServerReadClientBadFixedHeader(t *testing.T) { | ||||
| 	s, r, w, cl := setupClient("zen") | ||||
|  | ||||
| 	go func() { | ||||
| 		close(cl.end) | ||||
| 		w.Write([]byte{99}) | ||||
| 	}() | ||||
|  | ||||
| 	o := make(chan error) | ||||
| 	go func() { | ||||
| 		time.Sleep(time.Millisecond * 10) | ||||
| 		o <- s.readClient(cl) | ||||
| 	}() | ||||
|  | ||||
| 	w.Close() | ||||
| 	r.Close() | ||||
| 	require.NoError(t, <-o) | ||||
| } | ||||
|  | ||||
| func TestServerReadClientDisconnect(t *testing.T) { | ||||
| 	s, r, w, cl := setupClient("zen") | ||||
|  | ||||
| 	go func() { | ||||
| 		w.Write([]byte{packets.Disconnect << 4, 0}) | ||||
| 		close(cl.end) | ||||
| 	}() | ||||
|  | ||||
| 	o := make(chan error) | ||||
| 	go func() { | ||||
| 		time.Sleep(time.Millisecond * 10) | ||||
| 		o <- s.readClient(cl) | ||||
| 	}() | ||||
|  | ||||
| 	w.Close() | ||||
| 	r.Close() | ||||
| 	require.NoError(t, <-o) | ||||
| } | ||||
|  | ||||
| func TestServerReadClientBadPacketPayload(t *testing.T) { | ||||
| 	s, r, w, cl := setupClient("zen") | ||||
|  | ||||
| 	go func() { | ||||
| 		w.Write([]byte{ | ||||
| 			byte(packets.Publish << 4), 6, // Fixed header | ||||
| 			0, 5, // Topic Name - LSB+MSB | ||||
| 			'a', '/', | ||||
| 			0, 11, // Packet ID - LSB+MSB, // malformed packet id. | ||||
| 		}) | ||||
|  | ||||
| 	}() | ||||
|  | ||||
| @@ -483,9 +552,39 @@ func TestServerReadClientOK(t *testing.T) { | ||||
| 		o <- s.readClient(cl) | ||||
| 	}() | ||||
|  | ||||
| 	err := <-o | ||||
| 	require.Error(t, err) | ||||
| 	require.Equal(t, ErrReadPacketPayload, err) | ||||
| 	w.Close() | ||||
| 	r.Close() | ||||
|  | ||||
| } | ||||
|  | ||||
| func TestServerReadClientBadPacketValidation(t *testing.T) { | ||||
| 	s, r, w, cl := setupClient("zen") | ||||
|  | ||||
| 	go func() { | ||||
| 		w.Write([]byte{ | ||||
| 			byte(packets.Publish<<4) | 2, 14, // Fixed header | ||||
| 			0, 5, // Topic Name - LSB+MSB | ||||
| 			'a', '/', 'b', '/', 'c', // Topic Name | ||||
| 			0, 0, // Packet ID - LSB+MSB | ||||
| 			'h', 'e', 'l', 'l', 'o', // Payload | ||||
| 		}) | ||||
|  | ||||
| 	}() | ||||
|  | ||||
| 	o := make(chan error) | ||||
| 	go func() { | ||||
| 		o <- s.readClient(cl) | ||||
| 	}() | ||||
|  | ||||
| 	err := <-o | ||||
| 	require.Error(t, err) | ||||
| 	require.Equal(t, ErrReadPacketValidation, err) | ||||
|  | ||||
| 	w.Close() | ||||
| 	r.Close() | ||||
| 	require.NoError(t, <-o) | ||||
| } | ||||
|  | ||||
| /* | ||||
|   | ||||
| @@ -72,6 +72,7 @@ func (p *Processor) Start() { | ||||
| 		p.R.ReadFrom(p.Conn) | ||||
| 	}(p.started, p.endedR) | ||||
| 	p.endedR.Add(1) | ||||
| 	fmt.Println("Starting processor...") | ||||
|  | ||||
| 	p.started.Wait() | ||||
| 	fmt.Println("Started OK") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Mochi
					Mochi