mirror of
				https://github.com/fluffle/goirc
				synced 2025-11-03 19:48:04 +00:00 
			
		
		
		
	Update tests for deadlock fix.
This commit is contained in:
		
							parent
							
								
									861f24a130
								
							
						
					
					
						commit
						e1ddd58df4
					
				
					 1 changed files with 42 additions and 5 deletions
				
			
		| 
						 | 
					@ -165,7 +165,7 @@ func TestClientAndStateTracking(t *testing.T) {
 | 
				
			||||||
	ctrl.Finish()
 | 
						ctrl.Finish()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestSend(t *testing.T) {
 | 
					func TestSendExitsOnDie(t *testing.T) {
 | 
				
			||||||
	// Passing a second value to setUp stops goroutines from starting
 | 
						// Passing a second value to setUp stops goroutines from starting
 | 
				
			||||||
	c, s := setUp(t, false)
 | 
						c, s := setUp(t, false)
 | 
				
			||||||
	defer s.tearDown()
 | 
						defer s.tearDown()
 | 
				
			||||||
| 
						 | 
					@ -208,6 +208,38 @@ func TestSend(t *testing.T) {
 | 
				
			||||||
	s.nc.ExpectNothing()
 | 
						s.nc.ExpectNothing()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestSendExitsOnWriteError(t *testing.T) {
 | 
				
			||||||
 | 
						// Passing a second value to setUp stops goroutines from starting
 | 
				
			||||||
 | 
						c, s := setUp(t, false)
 | 
				
			||||||
 | 
						// We can't use tearDown here because we're testing shutdown conditions
 | 
				
			||||||
 | 
						// (and so need to EXPECT() a call to st.Wipe() in the right place)
 | 
				
			||||||
 | 
						defer s.ctrl.Finish()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// We want to test that the a goroutine calling send will exit correctly.
 | 
				
			||||||
 | 
						exited := callCheck(t)
 | 
				
			||||||
 | 
						// send() will decrement the WaitGroup, so we must increment it.
 | 
				
			||||||
 | 
						c.wg.Add(1)
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							c.send()
 | 
				
			||||||
 | 
							exited.call()
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Send a line to be sure things are good.
 | 
				
			||||||
 | 
						c.out <- "SENT AFTER START"
 | 
				
			||||||
 | 
						s.nc.Expect("SENT AFTER START")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Now, close the underlying socket to cause write() to return an error.
 | 
				
			||||||
 | 
						// This will call shutdown() => a call to st.Wipe() will happen.
 | 
				
			||||||
 | 
						exited.assertNotCalled("Exited before signal sent.")
 | 
				
			||||||
 | 
						s.st.EXPECT().Wipe()
 | 
				
			||||||
 | 
						s.nc.Close()
 | 
				
			||||||
 | 
						// Sending more on c.out shouldn't reach the network, but we need to send
 | 
				
			||||||
 | 
						// *something* to trigger a call to write() that will fail.
 | 
				
			||||||
 | 
						c.out <- "SENT AFTER END"
 | 
				
			||||||
 | 
						exited.assertWasCalled("Didn't exit after signal.")
 | 
				
			||||||
 | 
						s.nc.ExpectNothing()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestRecv(t *testing.T) {
 | 
					func TestRecv(t *testing.T) {
 | 
				
			||||||
	// Passing a second value to setUp stops goroutines from starting
 | 
						// Passing a second value to setUp stops goroutines from starting
 | 
				
			||||||
	c, s := setUp(t, false)
 | 
						c, s := setUp(t, false)
 | 
				
			||||||
| 
						 | 
					@ -398,7 +430,9 @@ func TestWrite(t *testing.T) {
 | 
				
			||||||
	defer s.ctrl.Finish()
 | 
						defer s.ctrl.Finish()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Write should just write a line to the socket.
 | 
						// Write should just write a line to the socket.
 | 
				
			||||||
	c.write("yo momma")
 | 
						if err := c.write("yo momma"); err != nil {
 | 
				
			||||||
 | 
							t.Errorf("Write returned unexpected error %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	s.nc.Expect("yo momma")
 | 
						s.nc.Expect("yo momma")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Flood control is disabled -- setUp sets c.cfg.Flood = true -- so we should
 | 
						// Flood control is disabled -- setUp sets c.cfg.Flood = true -- so we should
 | 
				
			||||||
| 
						 | 
					@ -408,7 +442,9 @@ func TestWrite(t *testing.T) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	c.cfg.Flood = false
 | 
						c.cfg.Flood = false
 | 
				
			||||||
	c.write("she so useless")
 | 
						if err := c.write("she so useless"); err != nil {
 | 
				
			||||||
 | 
							t.Errorf("Write returned unexpected error %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	s.nc.Expect("she so useless")
 | 
						s.nc.Expect("she so useless")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// The lastsent time should have been updated very recently...
 | 
						// The lastsent time should have been updated very recently...
 | 
				
			||||||
| 
						 | 
					@ -417,9 +453,10 @@ func TestWrite(t *testing.T) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Finally, test the error state by closing the socket then writing.
 | 
						// Finally, test the error state by closing the socket then writing.
 | 
				
			||||||
	s.st.EXPECT().Wipe()
 | 
					 | 
				
			||||||
	s.nc.Close()
 | 
						s.nc.Close()
 | 
				
			||||||
	c.write("she can't pass unit tests")
 | 
						if err := c.write("she can't pass unit tests"); err == nil {
 | 
				
			||||||
 | 
							t.Errorf("Expected write to return error after socket close.")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestRateLimit(t *testing.T) {
 | 
					func TestRateLimit(t *testing.T) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue