diff --git a/virtcontainers/pkg/mock/cc_proxy_mock.go b/virtcontainers/pkg/mock/cc_proxy_mock.go index 3acee1a67..743e3ffa8 100644 --- a/virtcontainers/pkg/mock/cc_proxy_mock.go +++ b/virtcontainers/pkg/mock/cc_proxy_mock.go @@ -31,6 +31,8 @@ const testToken = "pF56IaDpuax6hihJ5PneB8JypqmOvjkqY-wKGVYqgIM=" // CCProxyMock is an object mocking clearcontainers Proxy type CCProxyMock struct { + sync.Mutex + t *testing.T wg sync.WaitGroup connectionPath string @@ -50,6 +52,8 @@ type CCProxyMock struct { Signal chan ShimSignal ShimDisconnected chan bool StdinReceived chan bool + + stopped bool } // NewCCProxyMock creates a hyperstart instance @@ -296,10 +300,19 @@ func (proxy *CCProxyMock) serve() { // Start invokes mock proxy instance to start listening. func (proxy *CCProxyMock) Start() { + proxy.stopped = false proxy.startListening() go func() { for { proxy.serve() + + proxy.Lock() + stopped := proxy.stopped + proxy.Unlock() + + if stopped { + break + } } }() } @@ -307,6 +320,10 @@ func (proxy *CCProxyMock) Start() { // Stop causes mock proxy instance to stop listening, // close connection to client and close all channels func (proxy *CCProxyMock) Stop() { + proxy.Lock() + proxy.stopped = true + proxy.Unlock() + proxy.listener.Close() if proxy.cl != nil {