fixed data race in core.Connection.Close().
[govpp.git] / core / connection_test.go
index 230eea5..81b145c 100644 (file)
@@ -16,6 +16,7 @@ package core_test
 
 import (
        "testing"
+       "time"
 
        . "github.com/onsi/gomega"
 
@@ -91,6 +92,28 @@ func TestAsyncConnection(t *testing.T) {
        Expect(ev.State).Should(BeEquivalentTo(core.Connected))
 }
 
+func TestAsyncConnectionProcessesVppTimeout(t *testing.T) {
+       ctx := setupTest(t, false)
+       defer ctx.teardownTest()
+
+       ctx.conn.Disconnect()
+       conn, statusChan, err := core.AsyncConnect(ctx.mockVpp, core.DefaultMaxReconnectAttempts, core.DefaultReconnectInterval)
+       ctx.conn = conn
+
+       Expect(err).ShouldNot(HaveOccurred())
+       Expect(conn).ShouldNot(BeNil())
+
+       ev := <-statusChan
+       Expect(ev.State).Should(BeEquivalentTo(core.Connected))
+
+       // make control ping reply fail so that connection.healthCheckLoop()
+       // initiates reconnection.
+       ctx.mockVpp.MockReply(&vpe.ControlPingReply{
+               Retval: -1,
+       })
+       time.Sleep(time.Duration(1+core.HealthCheckThreshold) * (core.HealthCheckInterval + 2*core.HealthCheckReplyTimeout))
+}
+
 func TestCodec(t *testing.T) {
        RegisterTestingT(t)