96 lines
2.7 KiB
Go
96 lines
2.7 KiB
Go
package oonimkall
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/ooni/probe-cli/v3/internal/model"
|
|
)
|
|
|
|
// experimentSession is the abstract representation of
|
|
// a session according to an experiment.
|
|
type experimentSession interface {
|
|
// lock locks the session
|
|
lock()
|
|
|
|
// maybeLookupBackends lookups the backends
|
|
maybeLookupBackends(ctx context.Context) error
|
|
|
|
// maybeLookupLocations lookups the probe location
|
|
maybeLookupLocation(ctx context.Context) error
|
|
|
|
// newExperimentBuilder creates a new experiment builder
|
|
newExperimentBuilder(name string) (experimentBuilder, error)
|
|
|
|
// unlock unlocks the session
|
|
unlock()
|
|
}
|
|
|
|
// lock implements experimentSession.lock
|
|
func (sess *Session) lock() {
|
|
sess.mtx.Lock()
|
|
}
|
|
|
|
// maybeLookupBackends implements experimentSession.maybeLookupBackends
|
|
func (sess *Session) maybeLookupBackends(ctx context.Context) error {
|
|
return sess.sessp.MaybeLookupBackendsContext(ctx)
|
|
}
|
|
|
|
// maybeLookupLocation implements experimentSession.maybeLookupLocation
|
|
func (sess *Session) maybeLookupLocation(ctx context.Context) error {
|
|
return sess.sessp.MaybeLookupLocationContext(ctx)
|
|
}
|
|
|
|
// newExperimentBuilder implements experimentSession.newExperimentBuilder
|
|
func (sess *Session) newExperimentBuilder(name string) (experimentBuilder, error) {
|
|
eb, err := sess.sessp.NewExperimentBuilder(name)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &experimentBuilderWrapper{eb: eb}, nil
|
|
}
|
|
|
|
// unlock implements experimentSession.unlock
|
|
func (sess *Session) unlock() {
|
|
sess.mtx.Unlock()
|
|
}
|
|
|
|
// experimentBuilder is the representation of an experiment
|
|
// builder that we use inside this package.
|
|
type experimentBuilder interface {
|
|
// newExperiment creates a new experiment instance
|
|
newExperiment() experiment
|
|
|
|
// setCallbacks sets the experiment callbacks
|
|
setCallbacks(ExperimentCallbacks)
|
|
}
|
|
|
|
// experimentBuilderWrapper wraps *ExperimentBuilder
|
|
type experimentBuilderWrapper struct {
|
|
eb model.ExperimentBuilder
|
|
}
|
|
|
|
// newExperiment implements experimentBuilder.newExperiment
|
|
func (eb *experimentBuilderWrapper) newExperiment() experiment {
|
|
return eb.eb.NewExperiment()
|
|
}
|
|
|
|
// setCallbacks implements experimentBuilder.setCallbacks
|
|
func (eb *experimentBuilderWrapper) setCallbacks(cb ExperimentCallbacks) {
|
|
eb.eb.SetCallbacks(cb)
|
|
}
|
|
|
|
// experiment is the representation of an experiment that
|
|
// we use inside this package for running nettests.
|
|
type experiment interface {
|
|
// MeasureWithContext runs the measurement with the given input
|
|
// and context. It returns a measurement or an error.
|
|
MeasureWithContext(ctx context.Context, input string) (
|
|
measurement *model.Measurement, err error)
|
|
|
|
// KibiBytesSent returns the number of KiB sent.
|
|
KibiBytesSent() float64
|
|
|
|
// KibiBytesReceived returns the number of KiB received.
|
|
KibiBytesReceived() float64
|
|
}
|