blob: 49166a7674fd71a1a77686f4243ffcb717563fec [file] [log] [blame] [edit]
// 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
//go:generate ../../tools/mockery.sh --name subProcessCmd --exported
//go:generate ../../tools/mockery.sh --name ProxyAppInterface -r
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
}
}