mirror of
				https://github.com/mochi-mqtt/server.git
				synced 2025-11-01 03:52:39 +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) | 			cl.p.RefreshDeadline(cl.keepalive) | ||||||
|  |  | ||||||
| 			// Read in the fixed header of the packet. | 			// Read in the fixed header of the packet. | ||||||
| 			//fh := new(packets.FixedHeader) |  | ||||||
| 			err = cl.p.ReadFixedHeader(fh) | 			err = cl.p.ReadFixedHeader(fh) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return ErrReadFixedHeader | 				return ErrReadFixedHeader | ||||||
| @@ -245,12 +244,10 @@ DONE: | |||||||
| 			pk, err = cl.p.Read() | 			pk, err = cl.p.Read() | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				fmt.Println("RC READ ERR", err) | 				fmt.Println("RC READ ERR", err) | ||||||
| 				//return ErrReadPacketPayload | 				return ErrReadPacketPayload | ||||||
| 				return nil | 				//return nil | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			fmt.Println("READ PACKET", pk) |  | ||||||
|  |  | ||||||
| 			// Validate the packet if necessary. | 			// Validate the packet if necessary. | ||||||
| 			_, err = pk.Validate() | 			_, err = pk.Validate() | ||||||
| 			if err != nil { | 			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) { | func setupClient(id string) (s *Server, r net.Conn, w net.Conn, cl *client) { | ||||||
| 	r, w = net.Pipe() | 	r, w = net.Pipe() | ||||||
| 	s = New() | 	s = New() | ||||||
| 	cl = newClient( // new(MockNetConn) | 	p := NewProcessor(r, circ.NewReader(bufferSize, blockSize), circ.NewWriter(bufferSize, blockSize)) | ||||||
| 		NewProcessor(r, circ.NewReader(bufferSize, blockSize), circ.NewWriter(bufferSize, blockSize)), | 	p.Start() | ||||||
| 		&packets.ConnectPacket{ | 	cl = newClient(p, &packets.ConnectPacket{ClientIdentifier: id}, new(auth.Allow)) | ||||||
| 			ClientIdentifier: id, |  | ||||||
| 		}, |  | ||||||
| 		new(auth.Allow), |  | ||||||
| 	) |  | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -475,6 +472,78 @@ func TestServerReadClientOK(t *testing.T) { | |||||||
| 			'a', '/', 'b', '/', 'c', // Topic Name | 			'a', '/', 'b', '/', 'c', // Topic Name | ||||||
| 			'h', 'e', 'l', 'l', 'o', ' ', 'm', 'o', 'c', 'h', 'i', // Payload | 			'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) | 		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() | 	w.Close() | ||||||
| 	r.Close() | 	r.Close() | ||||||
| 	require.NoError(t, <-o) |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|   | |||||||
| @@ -72,6 +72,7 @@ func (p *Processor) Start() { | |||||||
| 		p.R.ReadFrom(p.Conn) | 		p.R.ReadFrom(p.Conn) | ||||||
| 	}(p.started, p.endedR) | 	}(p.started, p.endedR) | ||||||
| 	p.endedR.Add(1) | 	p.endedR.Add(1) | ||||||
|  | 	fmt.Println("Starting processor...") | ||||||
|  |  | ||||||
| 	p.started.Wait() | 	p.started.Wait() | ||||||
| 	fmt.Println("Started OK") | 	fmt.Println("Started OK") | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Mochi
					Mochi