Documentation
¶
Overview ¶
Package webconnectivityqa contains code to perform Web Connectivity QA. This package is separate from [webconnectivity] and [webconnectivitylte] and works with both.
Index ¶
- Constants
- Variables
- func MeasureTestCase(measurer model.ExperimentMeasurer, tc *TestCase) (*model.Measurement, error)
- func RunTestCase(measurer model.ExperimentMeasurer, tc *TestCase) error
- type Checker
- type ClientResolverCorrectnessChecker
- type ReadWriteEventsExistentialChecker
- type TestCase
- type TestKeys
Constants ¶
const ( // TestCaseFlagNoV04 means that this test case should not be run by v0.4 TestCaseFlagNoV04 = 1 << iota // TestCaseFlagNoLTE means that this test case should not be run by LTE TestCaseFlagNoLTE )
Variables ¶
var ErrCheckerInvalidClientResolver = errors.New("invalid client_resolver field")
ErrCheckerInvalidClientResolver indicates that the client_resolver field is invalid.
var ErrCheckerNoReadWriteEvents = errors.New("no read or write events")
ErrCheckerNoReadWriteEvents indicates that a checker did not find any read/write events.
var ErrCheckerUnexpectedWebConnectivityVersion = errors.New("unexpected Web Connectivity version")
ErrCheckerUnexpectedWebConnectivityVersion indicates that the version is unexpected
Functions ¶
func MeasureTestCase ¶
func MeasureTestCase(measurer model.ExperimentMeasurer, tc *TestCase) (*model.Measurement, error)
MeasureTestCase returns the JSON measurement produced by a TestCase.
func RunTestCase ¶
func RunTestCase(measurer model.ExperimentMeasurer, tc *TestCase) error
RunTestCase runs a [testCase].
Types ¶
type Checker ¶
type Checker interface {
Check(mx *model.Measurement) error
}
Checker checks whether a measurement is correct.
type ClientResolverCorrectnessChecker ¶
type ClientResolverCorrectnessChecker struct{}
ClientResolverCorrectnessChecker checks whether the client_resolver field inside of the test_keys has been correctly configured.
func (*ClientResolverCorrectnessChecker) Check ¶
func (*ClientResolverCorrectnessChecker) Check(mx *model.Measurement) error
Check implements Checker.
type ReadWriteEventsExistentialChecker ¶
type ReadWriteEventsExistentialChecker struct{}
ReadWriteEventsExistentialChecker fails if there are zero network events.
func (*ReadWriteEventsExistentialChecker) Check ¶
func (*ReadWriteEventsExistentialChecker) Check(mx *model.Measurement) error
Check implements Checker.
type TestCase ¶
type TestCase struct {
// Name is the test case name
Name string
// Flags contains binary flags describing this test case.
Flags int64
// Input is the input URL
Input string
// LongTest indicates that this is a long test.
LongTest bool
// Configure is an OPTIONAL hook for further configuring the scenario.
Configure func(env *netemx.QAEnv)
// ExpectErr is true if we expected an error
ExpectErr bool
// ExpectTestKeys contains the expected test keys
ExpectTestKeys *TestKeys
// Checkers contains an OPTIONAL list of checkers
// that perform additional parsing of the measurement
// to ensure that specific properties hold.
Checkers []Checker
}
TestCase is a test case we could run with this package.
func AllTestCases ¶
func AllTestCases() []*TestCase
AllTestCases returns all the defined test cases.
type TestKeys ¶
type TestKeys struct {
// XExperimentVersion is the experiment version.
XExperimentVersion string `json:"x_experiment_version"`
// DNSExperimentFailure contains the failure occurre during the DNS experiment.
DNSExperimentFailure any `json:"dns_experiment_failure"`
// DNSConsistency is either "consistent" or "inconsistent" and indicates whether the IP addresses
// returned by the probe match those returned by the TH. When the probe DNS lookup fails and the
// TH lookup succeeds (or the other way around) the DNSConsistency should be "inconsistent".
DNSConsistency any `json:"dns_consistency"`
// ControlFailure indicates whether the control connection failed.
ControlFailure any `json:"control_failure"`
// HTTPExperimentFailure indicates whether the HTTP experiment failed.
HTTPExperimentFailure any `json:"http_experiment_failure"`
// These keys indicate whether the HTTP body returned by the TH matches the probe's body.
BodyLengthMatch any `json:"body_length_match"`
BodyProportion float64 `json:"body_proportion"`
StatusCodeMatch any `json:"status_code_match"`
HeadersMatch any `json:"headers_match"`
TitleMatch any `json:"title_match"`
// XStatus summarizes the result of the analysis performed by WebConnectivity v0.4.
XStatus int64 `json:"x_status"`
// These flags summarize the result of the analysis performed by WebConnectivity LTE.
XDNSFlags int64 `json:"x_dns_flags"`
XBlockingFlags int64 `json:"x_blocking_flags"`
XNullNullFlags int64 `json:"x_null_null_flags"`
// Accessible indicates whether the URL was accessible.
Accessible any `json:"accessible"`
// Blocking is either nil or a string classifying the blocking type.
Blocking any `json:"blocking"`
}
TestKeys is the test keys structure returned by this package.