mirror of https://github.com/fluffle/goirc
Update tests for deadlock fix.
This commit is contained in:
parent
861f24a130
commit
e1ddd58df4
|
@ -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…
Reference in New Issue