273b70bacc
## Checklist - [x] I have read the [contribution guidelines](https://github.com/ooni/probe-cli/blob/master/CONTRIBUTING.md) - [x] reference issue for this pull request: https://github.com/ooni/probe/issues/1885 - [x] related ooni/spec pull request: N/A Location of the issue tracker: https://github.com/ooni/probe ## Description This PR contains a set of changes to move important interfaces and data types into the `./internal/model` package. The criteria for including an interface or data type in here is roughly that the type should be important and used by several packages. We are especially interested to move more interfaces here to increase modularity. An additional side effect is that, by reading this package, one should be able to understand more quickly how different parts of the codebase interact with each other. This is what I want to move in `internal/model`: - [x] most important interfaces from `internal/netxlite` - [x] everything that was previously part of `internal/engine/model` - [x] mocks from `internal/netxlite/mocks` should also be moved in here as a subpackage
111 lines
3.2 KiB
Go
111 lines
3.2 KiB
Go
package tunnel
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/apex/log"
|
|
"github.com/ooni/probe-cli/v3/internal/model"
|
|
)
|
|
|
|
func TestConfigLoggerDefault(t *testing.T) {
|
|
config := &Config{}
|
|
if config.logger() != model.DiscardLogger {
|
|
t.Fatal("not the logger we expected")
|
|
}
|
|
}
|
|
|
|
func TestConfigLoggerCustom(t *testing.T) {
|
|
config := &Config{Logger: log.Log}
|
|
if config.logger() != log.Log {
|
|
t.Fatal("not the logger we expected")
|
|
}
|
|
}
|
|
|
|
func TestConfigTorBinary(t *testing.T) {
|
|
// newConfig is a factory for creating a new config
|
|
//
|
|
// Arguments:
|
|
//
|
|
// - torBinaryPath is the possibly-empty config.TorBinary to use;
|
|
//
|
|
// - realBinaryPath is the possibly-empty path execabs.LookupPath should return;
|
|
//
|
|
// - err is the possbly-nil error that execabs.LookupPath should return.
|
|
//
|
|
// Returns a new *Config.
|
|
newConfig := func(binaryPath, realBinaryPath string, err error) *Config {
|
|
return &Config{
|
|
TorBinary: binaryPath,
|
|
testExecabsLookPath: func(name string) (string, error) {
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return realBinaryPath, nil
|
|
},
|
|
}
|
|
}
|
|
|
|
// verifyExpectations ensures that config.torBinary() produces in
|
|
// output the expectPath and expectErr result.
|
|
verifyExpectations := func(
|
|
t *testing.T, config *Config, expectPath string, expectErr error) {
|
|
path, err := config.torBinary()
|
|
if !errors.Is(err, expectErr) {
|
|
t.Fatal("not the error we expected", err)
|
|
}
|
|
if path != expectPath {
|
|
t.Fatal("not the path we expected", path)
|
|
}
|
|
}
|
|
|
|
t.Run("with empty TorBinary and no tor in PATH", func(t *testing.T) {
|
|
expected := errors.New("no such binary in PATH")
|
|
config := newConfig("", "", expected)
|
|
verifyExpectations(t, config, "", expected)
|
|
})
|
|
|
|
t.Run("with empty TorBinary and tor in PATH", func(t *testing.T) {
|
|
expected := "/usr/bin/tor"
|
|
config := newConfig("", expected, nil)
|
|
verifyExpectations(t, config, expected, nil)
|
|
})
|
|
|
|
t.Run("with TorBinary and no such binary in PATH", func(t *testing.T) {
|
|
expected := errors.New("no such binary in PATH")
|
|
config := newConfig("tor-real", "", expected)
|
|
verifyExpectations(t, config, "", expected)
|
|
})
|
|
|
|
t.Run("with TorBinary and the binary is in PATH", func(t *testing.T) {
|
|
expected := "/usr/bin/tor-real"
|
|
config := newConfig("tor-real", expected, nil)
|
|
verifyExpectations(t, config, expected, nil)
|
|
})
|
|
|
|
t.Run("with OONI_TOR_BINARY and empty TorBinary", func(t *testing.T) {
|
|
expected := "./tor.exe"
|
|
os.Setenv(ooniTorBinaryEnv, expected)
|
|
defer os.Unsetenv(ooniTorBinaryEnv)
|
|
config := newConfig("", expected, errors.New("should not be seen"))
|
|
verifyExpectations(t, config, expected, nil)
|
|
})
|
|
|
|
t.Run("with OONI_TOR_BINARY and TorBinary not in PATH", func(t *testing.T) {
|
|
expected := errors.New("no such binary in PATH")
|
|
os.Setenv(ooniTorBinaryEnv, "./tor.exe")
|
|
defer os.Unsetenv(ooniTorBinaryEnv)
|
|
config := newConfig("tor-real", "", expected)
|
|
verifyExpectations(t, config, "", expected)
|
|
})
|
|
|
|
t.Run("with OONI_TOR_BINARY and TorBinary in PATH", func(t *testing.T) {
|
|
expected := "/usr/bin/tor-real"
|
|
os.Setenv(ooniTorBinaryEnv, "./tor.exe")
|
|
defer os.Unsetenv(ooniTorBinaryEnv)
|
|
config := newConfig("tor-real", expected, nil)
|
|
verifyExpectations(t, config, expected, nil)
|
|
})
|
|
}
|