// Copyright 2022 syzkaller project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. package proxyapp import ( "context" "testing" "github.com/google/syzkaller/vm/proxyapp/mocks" "github.com/google/syzkaller/vm/proxyapp/proxyrpc" "github.com/stretchr/testify/mock" ) var ( _ subProcessCmd = &mocks.SubProcessCmd{} _ proxyrpc.ProxyAppInterface = &mocks.ProxyAppInterface{} ) type mockCommandRunner struct { *mocks.SubProcessCmd ctx context.Context onWaitCalled chan bool } func makeMockCommandRunner(t *testing.T) (*mockCommandRunner, *proxyAppParams) { cmdRunner := &mockCommandRunner{ SubProcessCmd: mocks.NewSubProcessCmd(t), onWaitCalled: make(chan bool, 1), } params := makeTestParams() params.CommandRunner = func(ctx context.Context, cmd string, params ...string) subProcessCmd { cmdRunner.ctx = ctx return cmdRunner } return cmdRunner, params } func (cmd *mockCommandRunner) Wait() error { cmd.onWaitCalled <- true return cmd.SubProcessCmd.Wait() } type mockProxyAppInterface struct { *mocks.ProxyAppInterface OnLogsReceived chan bool } type tNewProxyAppInterface interface { mock.TestingT Cleanup(func()) } func makeMockProxyAppInterface(t tNewProxyAppInterface) *mockProxyAppInterface { return &mockProxyAppInterface{ ProxyAppInterface: mocks.NewProxyAppInterface(t), OnLogsReceived: make(chan bool, 1), // 1 is enough as we read it just once } }