chore: merge probe-engine into probe-cli (#201)
This is how I did it: 1. `git clone https://github.com/ooni/probe-engine internal/engine` 2. ``` (cd internal/engine && git describe --tags) v0.23.0 ``` 3. `nvim go.mod` (merging `go.mod` with `internal/engine/go.mod` 4. `rm -rf internal/.git internal/engine/go.{mod,sum}` 5. `git add internal/engine` 6. `find . -type f -name \*.go -exec sed -i 's@/ooni/probe-engine@/ooni/probe-cli/v3/internal/engine@g' {} \;` 7. `go build ./...` (passes) 8. `go test -race ./...` (temporary failure on RiseupVPN) 9. `go mod tidy` 10. this commit message Once this piece of work is done, we can build a new version of `ooniprobe` that is using `internal/engine` directly. We need to do more work to ensure all the other functionality in `probe-engine` (e.g. making mobile packages) are still WAI. Part of https://github.com/ooni/probe/issues/1335
This commit is contained in:
parent
b1ce300c8d
commit
d57c78bc71
535 changed files with 66182 additions and 23 deletions
191
internal/engine/internal/mockable/mockable.go
Normal file
191
internal/engine/internal/mockable/mockable.go
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
// Package mockable contains mockable objects
|
||||
package mockable
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/internal/kvstore"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/internal/psiphonx"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/internal/runtimex"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/internal/torx"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/internal/tunnel"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/model"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/probeservices"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/probeservices/testorchestra"
|
||||
)
|
||||
|
||||
// Session allows to mock sessions.
|
||||
type Session struct {
|
||||
MockableASNDatabasePath string
|
||||
MockableTestHelpers map[string][]model.Service
|
||||
MockableHTTPClient *http.Client
|
||||
MockableLogger model.Logger
|
||||
MockableMaybeResolverIP string
|
||||
MockableOrchestraClient model.ExperimentOrchestraClient
|
||||
MockableOrchestraClientError error
|
||||
MockableProbeASNString string
|
||||
MockableProbeCC string
|
||||
MockableProbeIP string
|
||||
MockableProbeNetworkName string
|
||||
MockableProxyURL *url.URL
|
||||
MockableResolverIP string
|
||||
MockableSoftwareName string
|
||||
MockableSoftwareVersion string
|
||||
MockableTempDir string
|
||||
MockableTorArgs []string
|
||||
MockableTorBinary string
|
||||
MockableUserAgent string
|
||||
}
|
||||
|
||||
// ASNDatabasePath implements ExperimentSession.ASNDatabasePath
|
||||
func (sess *Session) ASNDatabasePath() string {
|
||||
return sess.MockableASNDatabasePath
|
||||
}
|
||||
|
||||
// GetTestHelpersByName implements ExperimentSession.GetTestHelpersByName
|
||||
func (sess *Session) GetTestHelpersByName(name string) ([]model.Service, bool) {
|
||||
services, okay := sess.MockableTestHelpers[name]
|
||||
return services, okay
|
||||
}
|
||||
|
||||
// DefaultHTTPClient implements ExperimentSession.DefaultHTTPClient
|
||||
func (sess *Session) DefaultHTTPClient() *http.Client {
|
||||
return sess.MockableHTTPClient
|
||||
}
|
||||
|
||||
// KeyValueStore returns the configured key-value store.
|
||||
func (sess *Session) KeyValueStore() model.KeyValueStore {
|
||||
return kvstore.NewMemoryKeyValueStore()
|
||||
}
|
||||
|
||||
// Logger implements ExperimentSession.Logger
|
||||
func (sess *Session) Logger() model.Logger {
|
||||
return sess.MockableLogger
|
||||
}
|
||||
|
||||
// MaybeResolverIP implements ExperimentSession.MaybeResolverIP.
|
||||
func (sess *Session) MaybeResolverIP() string {
|
||||
return sess.MockableMaybeResolverIP
|
||||
}
|
||||
|
||||
// NewOrchestraClient implements ExperimentSession.NewOrchestraClient
|
||||
func (sess *Session) NewOrchestraClient(ctx context.Context) (model.ExperimentOrchestraClient, error) {
|
||||
if sess.MockableOrchestraClient != nil {
|
||||
return sess.MockableOrchestraClient, nil
|
||||
}
|
||||
if sess.MockableOrchestraClientError != nil {
|
||||
return nil, sess.MockableOrchestraClientError
|
||||
}
|
||||
clnt, err := probeservices.NewClient(sess, model.Service{
|
||||
Address: "https://ams-pg-test.ooni.org/",
|
||||
Type: "https",
|
||||
})
|
||||
runtimex.PanicOnError(err, "orchestra.NewClient should not fail here")
|
||||
meta := testorchestra.MetadataFixture()
|
||||
if err := clnt.MaybeRegister(ctx, meta); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := clnt.MaybeLogin(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return clnt, nil
|
||||
}
|
||||
|
||||
// ProbeASNString implements ExperimentSession.ProbeASNString
|
||||
func (sess *Session) ProbeASNString() string {
|
||||
return sess.MockableProbeASNString
|
||||
}
|
||||
|
||||
// ProbeCC implements ExperimentSession.ProbeCC
|
||||
func (sess *Session) ProbeCC() string {
|
||||
return sess.MockableProbeCC
|
||||
}
|
||||
|
||||
// ProbeIP implements ExperimentSession.ProbeIP
|
||||
func (sess *Session) ProbeIP() string {
|
||||
return sess.MockableProbeIP
|
||||
}
|
||||
|
||||
// ProbeNetworkName implements ExperimentSession.ProbeNetworkName
|
||||
func (sess *Session) ProbeNetworkName() string {
|
||||
return sess.MockableProbeNetworkName
|
||||
}
|
||||
|
||||
// ProxyURL implements ExperimentSession.ProxyURL
|
||||
func (sess *Session) ProxyURL() *url.URL {
|
||||
return sess.MockableProxyURL
|
||||
}
|
||||
|
||||
// ResolverIP implements ExperimentSession.ResolverIP
|
||||
func (sess *Session) ResolverIP() string {
|
||||
return sess.MockableResolverIP
|
||||
}
|
||||
|
||||
// SoftwareName implements ExperimentSession.SoftwareName
|
||||
func (sess *Session) SoftwareName() string {
|
||||
return sess.MockableSoftwareName
|
||||
}
|
||||
|
||||
// SoftwareVersion implements ExperimentSession.SoftwareVersion
|
||||
func (sess *Session) SoftwareVersion() string {
|
||||
return sess.MockableSoftwareVersion
|
||||
}
|
||||
|
||||
// TempDir implements ExperimentSession.TempDir
|
||||
func (sess *Session) TempDir() string {
|
||||
return sess.MockableTempDir
|
||||
}
|
||||
|
||||
// TorArgs implements ExperimentSession.TorArgs.
|
||||
func (sess *Session) TorArgs() []string {
|
||||
return sess.MockableTorArgs
|
||||
}
|
||||
|
||||
// TorBinary implements ExperimentSession.TorBinary.
|
||||
func (sess *Session) TorBinary() string {
|
||||
return sess.MockableTorBinary
|
||||
}
|
||||
|
||||
// UserAgent implements ExperimentSession.UserAgent
|
||||
func (sess *Session) UserAgent() string {
|
||||
return sess.MockableUserAgent
|
||||
}
|
||||
|
||||
var _ model.ExperimentSession = &Session{}
|
||||
var _ probeservices.Session = &Session{}
|
||||
var _ psiphonx.Session = &Session{}
|
||||
var _ tunnel.Session = &Session{}
|
||||
var _ torx.Session = &Session{}
|
||||
|
||||
// ExperimentOrchestraClient is the experiment's view of
|
||||
// a client for querying the OONI orchestra.
|
||||
type ExperimentOrchestraClient struct {
|
||||
MockableFetchPsiphonConfigResult []byte
|
||||
MockableFetchPsiphonConfigErr error
|
||||
MockableFetchTorTargetsResult map[string]model.TorTarget
|
||||
MockableFetchTorTargetsErr error
|
||||
MockableFetchURLListResult []model.URLInfo
|
||||
MockableFetchURLListErr error
|
||||
}
|
||||
|
||||
// FetchPsiphonConfig implements ExperimentOrchestraClient.FetchPsiphonConfig
|
||||
func (c ExperimentOrchestraClient) FetchPsiphonConfig(
|
||||
ctx context.Context) ([]byte, error) {
|
||||
return c.MockableFetchPsiphonConfigResult, c.MockableFetchPsiphonConfigErr
|
||||
}
|
||||
|
||||
// FetchTorTargets implements ExperimentOrchestraClient.TorTargets
|
||||
func (c ExperimentOrchestraClient) FetchTorTargets(
|
||||
ctx context.Context, cc string) (map[string]model.TorTarget, error) {
|
||||
return c.MockableFetchTorTargetsResult, c.MockableFetchTorTargetsErr
|
||||
}
|
||||
|
||||
// FetchURLList implements ExperimentOrchestraClient.FetchURLList.
|
||||
func (c ExperimentOrchestraClient) FetchURLList(
|
||||
ctx context.Context, config model.URLListConfig) ([]model.URLInfo, error) {
|
||||
return c.MockableFetchURLListResult, c.MockableFetchURLListErr
|
||||
}
|
||||
|
||||
var _ model.ExperimentOrchestraClient = ExperimentOrchestraClient{}
|
||||
Loading…
Reference in a new issue