type monitorFakeExec … func newMonitorFakeExec() *monitorFakeExec { … } func (mfe *monitorFakeExec) blockIPTables(block bool) { … } func (mfe *monitorFakeExec) getWasBlocked() bool { … } func (mfe *monitorFakeExec) Command(cmd string, args ...string) exec.Cmd { … } func (mfe *monitorFakeExec) CommandContext(ctx context.Context, cmd string, args ...string) exec.Cmd { … } func (mfe *monitorFakeExec) LookPath(file string) (string, error) { … } type monitorFakeCmd … func (mfc *monitorFakeCmd) CombinedOutput() ([]byte, error) { … } func (mfc *monitorFakeCmd) SetStdin(in io.Reader) { … } func (mfc *monitorFakeCmd) Run() error { … } func (mfc *monitorFakeCmd) Output() ([]byte, error) { … } func (mfc *monitorFakeCmd) SetDir(dir string) { … } func (mfc *monitorFakeCmd) SetStdout(out io.Writer) { … } func (mfc *monitorFakeCmd) SetStderr(out io.Writer) { … } func (mfc *monitorFakeCmd) SetEnv(env []string) { … } func (mfc *monitorFakeCmd) StdoutPipe() (io.ReadCloser, error) { … } func (mfc *monitorFakeCmd) StderrPipe() (io.ReadCloser, error) { … } func (mfc *monitorFakeCmd) Start() error { … } func (mfc *monitorFakeCmd) Wait() error { … } func (mfc *monitorFakeCmd) Stop() { … } func TestIPTablesMonitor(t *testing.T) { … } func waitForChains(mfe *monitorFakeExec, canary Chain, tables []Table) error { … } func ensureNoChains(mfe *monitorFakeExec) bool { … } func waitForReloads(reloads *uint32, expected uint32) error { … } func waitForNoReload(reloads *uint32, expected uint32) error { … } func waitForBlocked(mfe *monitorFakeExec) error { … }