Documentation ¶
Index ¶
- Constants
- Variables
- func AddRoute(route, name string, h http.HandlerFunc) *mux.Route
- func AlwaysCachable(r *http.Request) bool
- func CacheStatusOK(ctx context.Context, statusCode int, payload []byte) bool
- func CropString(s string, i int) string
- func DeleteCache(key string) error
- func ExplodePossibleFilenames(filePath string) []string
- func ExplodePossibleRenames(before, after string) map[string]string
- func FetchJSON(url string, value interface{}) error
- func FlushCache() error
- func GetDefaultBrowserNames() []string
- func GetMetadataByteMap(log Logger, fetcher MetadataFetcher) (sha *string, metadata map[string]Metadata, err error)
- func GetMetadataFilePath(folderName string) string
- func GetResultsDiff(before ResultsSummary, after ResultsSummary, filter DiffFilterParam, ...) map[string]TestDiff
- func GetResultsURL(run TestRun, testFile string) (resultsURL string)
- func GetSecret(ds Datastore, tokenName string) (string, error)
- func GetSharedPath(paths ...string) string
- func GetUserLabel(username string) string
- func GetWPTMetadataArchive(client *http.Client, ref *string) (res map[string][]byte, err error)
- func GetWPTMetadataMasterSHA(ctx context.Context, gitHubClient *github.Client) (*string, error)
- func GetWPTTestPath(folderPath string, testname string) string
- func HandleWithLogging(h http.HandlerFunc) http.HandlerFunc
- func IsBrowserName(name string) bool
- func IsFeatureEnabled(ds Datastore, flagName string) bool
- func IsLatest(sha string) bool
- func IsStableBrowserName(name string) bool
- func MapStringKeys(m interface{}) ([]string, error)
- func NewCachingHandler(ctx context.Context, delegate http.Handler, cache ReadWritable, ...) http.Handler
- func NewGitHubClientFromToken(ctx context.Context, token string) *github.Client
- func NewMultiError(errors []error, when string) error
- func NewMultiErrorFromChan(errors chan error, when string) error
- func NewSecureCookie(store Datastore) (*securecookie.SecureCookie, error)
- func NewSetFromStringSlice(items []string) mapset.Set
- func ParseAlignedParam(v url.Values) (aligned *bool, err error)
- func ParseBooleanParam(v url.Values, name string) (result *bool, err error)
- func ParseBrowsersParam(v url.Values) (browsers []string, err error)
- func ParseDateTimeParam(v url.Values, name string) (*time.Time, error)
- func ParseIntParam(v url.Values, param string) (*int, error)
- func ParseLabelsParam(v url.Values) []string
- func ParseMaxCountParam(v url.Values) (*int, error)
- func ParseMaxCountParamWithDefault(v url.Values, defaultValue int) (count int, err error)
- func ParseOffsetParam(v url.Values) (*int, error)
- func ParsePRParam(v url.Values) (*int, error)
- func ParsePathsParam(v url.Values) []string
- func ParseQueryParamInt(v url.Values, key string) (*int, error)
- func ParseRepeatedInt64Param(v url.Values, singular, plural string) (params []int64, err error)
- func ParseRepeatedParam(v url.Values, singular string, plural string) (params []string)
- func ParseSHA(shaParam string) (sha string, err error)
- func ParseTestURL(testURL string) (filePath, query string)
- func ParseViewParam(v url.Values) (*string, error)
- func PrepareLinkFilter(metadata MetadataResults) map[string][]string
- func PrepareTestLabelFilter(metadata MetadataResults) map[string][]string
- func ProductChannelToLabel(channel string) string
- func Router() *mux.Router
- func SetFeature(ds Datastore, flag Flag) error
- func SplitWPTTestPath(githubPath string) (string, string)
- func StringSliceContains(ss []string, s string) bool
- func ToStringSlice(set mapset.Set) []string
- func URLAsCacheKey(r *http.Request) interface{}
- func WrapApplicationJSON(h http.HandlerFunc) http.HandlerFunc
- func WrapHSTS(h http.HandlerFunc) http.HandlerFunc
- func WrapPermissiveCORS(h http.HandlerFunc, methods ...string) http.HandlerFunc
- func WrapTrustedCORS(h http.HandlerFunc, origins []string, methods []string) http.HandlerFunc
- type AppEngineAPI
- type BSFData
- type Browser
- type ByBrowserName
- type CachedStore
- type CachingResponseWriter
- type CheckSuite
- type CloudSecretManager
- type Datastore
- type DiffAPI
- type DiffFilterParam
- type FetchBSF
- type Flag
- type GitHubAccessControl
- type GitHubOAuth
- type GitHubWebFeaturesClient
- type GitHubWebFeaturesClientOption
- type Iterator
- type Key
- type KeysByProduct
- type LegacySearchRunResult
- type Logger
- type LoggerCtxKey
- type Manifest
- type Metadata
- type MetadataFetcher
- type MetadataLink
- type MetadataLinks
- type MetadataResults
- type MetadataTestResult
- type MultiError
- type ObjectCache
- type ObjectStore
- type PendingTestRun
- type PendingTestRunByUpdated
- type PendingTestRunStage
- type Product
- type ProductAtRevision
- type ProductSpec
- func (p ProductSpec) DisplayName() string
- func (p ProductSpec) IsExperimental() bool
- func (p ProductSpec) MarshalJSON() ([]byte, error)
- func (p ProductSpec) MarshalYAML() (interface{}, error)
- func (p ProductSpec) Matches(run TestRun) bool
- func (p ProductSpec) MatchesLabels(labels mapset.Set) bool
- func (p ProductSpec) MatchesProductAtRevision(productAtRevision ProductAtRevision) bool
- func (p ProductSpec) MatchesProductSpec(productSpec ProductSpec) bool
- func (p ProductSpec) String() string
- func (p *ProductSpec) UnmarshalJSON(data []byte) (err error)
- func (p *ProductSpec) UnmarshalYAML(unmarshal func(interface{}) error) (err error)
- type ProductSpecs
- func GetDefaultProducts() ProductSpecs
- func ParseBeforeAndAfterParams(v url.Values) (ProductSpecs, error)
- func ParseProductOrBrowserParams(v url.Values) (products ProductSpecs, err error)
- func ParseProductSpecs(specs ...string) (products ProductSpecs, err error)
- func ParseProductsParam(v url.Values) (ProductSpecs, error)
- type ProductTestRunKeys
- type ProductTestRuns
- type Query
- type QueryFilter
- type ReadWritable
- type Readable
- type RedisSet
- type ResultsDiff
- type ResultsSummary
- func FetchRunResultsJSON(ctx context.Context, run TestRun) (results ResultsSummary, err error)
- func FetchRunResultsJSONForParam(ctx context.Context, r *http.Request, param string) (results ResultsSummary, err error)
- func FetchRunResultsJSONForSpec(ctx context.Context, r *http.Request, spec ProductSpec) (results ResultsSummary, err error)
- type RunDiff
- type SHAs
- type SearchResponse
- type SearchResult
- type SecretManager
- type TestDiff
- type TestHistoryEntry
- type TestRun
- type TestRunFilter
- func (filter TestRunFilter) GetProductsOrDefault() (products ProductSpecs)
- func (filter TestRunFilter) IsDefaultProducts() bool
- func (filter TestRunFilter) IsDefaultQuery() bool
- func (filter TestRunFilter) MarshalJSON() ([]byte, error)
- func (filter TestRunFilter) MasterOnly() TestRunFilter
- func (filter TestRunFilter) NextPage(loadedRuns TestRunsByProduct) *TestRunFilter
- func (filter TestRunFilter) OrAlignedStableRuns() TestRunFilter
- func (filter TestRunFilter) OrDefault() TestRunFilter
- func (filter TestRunFilter) OrExperimentalRuns() TestRunFilter
- func (filter TestRunFilter) ToQuery() (q url.Values)
- func (filter TestRunFilter) Token() (string, error)
- func (filter *TestRunFilter) UnmarshalJSON(data []byte) error
- type TestRunIDs
- type TestRunQuery
- type TestRuns
- type TestRunsByProduct
- type TestStatus
- func (s TestStatus) IsHarnessStatus() bool
- func (s TestStatus) IsPass() bool
- func (s TestStatus) IsPassOrOK() bool
- func (s *TestStatus) MarshalYAML() (interface{}, error)
- func (s TestStatus) String() string
- func (s *TestStatus) UnmarshalJSON(b []byte) error
- func (s *TestStatus) UnmarshalYAML(unmarshal func(interface{}) error) (err error)
- type TestSummary
- type Token
- type TriageMetadata
- type Uploader
- type User
- type Version
- type WebFeaturesData
Constants ¶
const ( // TestStatusUnknown is an uninitialized TestStatus and should // not be used. TestStatusUnknown TestStatus = 0 // TestStatusPass indicates that all tests completed successfully and passed. TestStatusPass TestStatus = 1 // TestStatusOK indicates that all tests completed successfully. TestStatusOK TestStatus = 2 // TestStatusError indicates that some tests did not complete // successfully. TestStatusError TestStatus = 3 // TestStatusTimeout indicates that some tests timed out. TestStatusTimeout TestStatus = 4 // TestStatusNotRun indicates that a test was not run. TestStatusNotRun TestStatus = 5 // TestStatusFail indicates that a test failed. TestStatusFail TestStatus = 6 // TestStatusCrash indicates that the WPT test runner crashed attempting to run the test. TestStatusCrash TestStatus = 7 // TestStatusSkip indicates that the test was disabled for this test run. TestStatusSkip TestStatus = 8 // TestStatusAssert indicates that a non-fatal assertion failed. This test // status is supported by, at least, Mozilla. TestStatusAssert TestStatus = 9 // TestStatusNameUnknown is the string representation for an uninitialized // TestStatus and should not be used. TestStatusNameUnknown string = "UNKNOWN" // TestStatusNamePass is the string representation of a test result where the // test passed. TestStatusNamePass string = "PASS" // TestStatusNameOK is the string represnetation of a test result where the // test ran completely but may not have passed (and/or not all of its subtests // passed). TestStatusNameOK string = "OK" // TestStatusNameError is the string representation for a test result where // a test harness error was encountered at test runtime. TestStatusNameError string = "ERROR" // TestStatusNameTimeout is the string representation for a test result where // the test timed out. TestStatusNameTimeout string = "TIMEOUT" // TestStatusNameNotRun is the string representation for a test result where // the test exists but was not run. TestStatusNameNotRun string = "NOTRUN" // TestStatusNameFail is the string representation of a test result where the // test failed. TestStatusNameFail string = "FAIL" // TestStatusNameCrash is the string representation of a test result where the // test runner crashed. TestStatusNameCrash string = "CRASH" // TestStatusNameSkip is the string representation of a test result where the // test was disabled for this test run. TestStatusNameSkip string = "SKIP" // TestStatusNameAssert is the string representation of a test result where // a non-fatal assertion failed. This test status is supported by, at least, // Mozilla. TestStatusNameAssert string = "ASSERT" // TestStatusDefault is the default value used when a status string cannot be // interpreted. TestStatusDefault TestStatus = TestStatusUnknown // TestStatusNameDefault is the default string used when a status value cannot // be interpreted. TestStatusNameDefault string = TestStatusNameUnknown )
const BetaLabel = "beta"
BetaLabel is the implicit label present for runs marked 'beta'.
const ExperimentalLabel = "experimental"
ExperimentalLabel is the implicit label present for runs marked 'experimental'.
const LatestSHA = "latest"
LatestSHA is a helper for the 'latest' keyword/special case.
const MasterLabel = "master"
MasterLabel is the implicit label present for runs marked 'master', i.e. run from the master branch.
const MaxCountMaxValue = 500
MaxCountMaxValue is the maximum allowed value for the max-count param.
const MaxCountMinValue = 1
MaxCountMinValue is the minimum allowed value for the max-count param.
const MaxKeysPerLookup = 1000
MaxKeysPerLookup is the max number of keys allowed per lookup (e.g. GetMulti). https://cloud.google.com/datastore/docs/concepts/limits
const MetadataFileName = "META.yml"
MetadataFileName is the name of Metadata files in the wpt-metadata repo.
const PRBaseLabel = "pr_base"
PRBaseLabel is the implicit label for running just the affected tests on a PR but without the changes (i.e. against the base branch).
const PRHeadLabel = "pr_head"
PRHeadLabel is the implicit label for running just the affected tests on the head of a PR (with the changes).
const PendingMetadataCacheKey = "WPT-PENDING-METADATA"
PendingMetadataCacheKey is the key for the set that stores a list of pending metadata PRs in Redis.
const PendingMetadataCachePrefix = "PENDING-PR-"
PendingMetadataCachePrefix is the key prefix for pending metadata stored in Redis.
const ShowMetadataParam = "metadataInfo"
ShowMetadataParam determines whether Metadata Information returns along with a test result query request.
const SourceOwner string = "web-platform-tests"
SourceOwner is the owner name of the wpt-metadata repo.
const SourceRepo string = "wpt-metadata"
SourceRepo is the wpt-metadata repo.
const StableLabel = "stable"
StableLabel is the implicit label present for runs marked 'stable'.
const UserLabelPrefix = "user:"
UserLabelPrefix is a prefix used to denote a label for a user's GitHub handle, prefixed because usernames are essentially user input.
const WPTRepoName = "wpt"
WPTRepoName is the repo name for the GitHub wpt repo.
const WPTRepoOwner = "web-platform-tests"
WPTRepoOwner is the owner (username) for the GitHub wpt repo.
const WebFeatureManifestRepo = "wpt"
WebFeatureManifestRepo is where the web feature manifest is published.
Variables ¶
var ( // ErrEntityAlreadyExists is returned by Datastore.Insert when the entity already exists. ErrEntityAlreadyExists = errors.New("datastore: entity already exists") // ErrNoSuchEntity is returned by Datastore.Get when the key doesn't exist. ErrNoSuchEntity = errors.New("datastore: entity not found") )
var Clients clientsImpl
Clients is a singleton containing heavyweight (e.g. with connection pools) clients that should be bound to the runtime instead of each request in order to be reused. They are initialized and authenticated at startup using the background context; each request should use its own context.
var ErrInvalidManifest = errors.New("invalid manifest")
ErrInvalidManifest is the error returned when the manifest is a valid JSON but without the correct structure.
var ErrRunNotInSearchCache = errors.New("Run is still being loaded into the searchcache")
ErrRunNotInSearchCache is an error for 422 responses from the searchcache.
var SHARegex = regexp.MustCompile(`^[0-9a-fA-F]{7,40}$`)
SHARegex is the pattern for a valid SHA1 hash that's at least 7 characters long.
Functions ¶
func AddRoute ¶
func AddRoute(route, name string, h http.HandlerFunc) *mux.Route
AddRoute is a helper for registering a handler for an http path (route). Note that it adds an HSTS header to the response.
func AlwaysCachable ¶
AlwaysCachable is a helper for returning true for all requests.
func CacheStatusOK ¶
CacheStatusOK is a hlper for indicating that a request is cacheable iff the status code is http.StatusOK.
func CropString ¶
CropString conditionally crops a string to the given length, if it is longer. Returns the original string otherwise.
func DeleteCache ¶
DeleteCache deletes the object stored at key in Redis. A key is ignored if it does not exist.
func ExplodePossibleFilenames ¶
ExplodePossibleFilenames explodes the given single filename into the test names that could be created for it at runtime.
func ExplodePossibleRenames ¶
ExplodePossibleRenames returns a map of equivalent renames for the given file rename.
func FetchJSON ¶
FetchJSON fetches the given URL, which is expected to be JSON, and unmarshals it into the given value pointer, fatally logging any errors.
func GetDefaultBrowserNames ¶
func GetDefaultBrowserNames() []string
GetDefaultBrowserNames returns an alphabetically-ordered array of the names of the browsers which are to be included by default.
func GetMetadataByteMap ¶
func GetMetadataByteMap(log Logger, fetcher MetadataFetcher) (sha *string, metadata map[string]Metadata, err error)
GetMetadataByteMap collects and parses all META.yml files from the wpt-metadata repository.
func GetMetadataFilePath ¶
GetMetadataFilePath appends MetadataFileName to a Metadata folder path.
func GetResultsDiff ¶
func GetResultsDiff( before ResultsSummary, after ResultsSummary, filter DiffFilterParam, paths mapset.Set, renames map[string]string) map[string]TestDiff
GetResultsDiff returns a map of test name to an array of [newly-passing, newly-failing, total-delta], for tests which had different results counts in their map (which is test name to array of [count-passed, total]).
func GetResultsURL ¶
GetResultsURL constructs the URL to the result of a single test file in the given run.
func GetSecret ¶
GetSecret is a helper wrapper for loading a token's secret from the datastore by name.
func GetSharedPath ¶
GetSharedPath gets the longest path shared between the given paths.
func GetUserLabel ¶
GetUserLabel prefixes the given username with the prefix for using as a label.
func GetWPTMetadataArchive ¶
GetWPTMetadataArchive iterates through wpt-metadata repository and returns a map that maps a test path to its META.yml file content, using a given ref.
func GetWPTMetadataMasterSHA ¶
GetWPTMetadataMasterSHA returns the SHA of the master branch of the wpt-metadata repo.
func GetWPTTestPath ¶
GetWPTTestPath concatenates a folder path and a test name into a WPT test path.
func HandleWithLogging ¶
func HandleWithLogging(h http.HandlerFunc) http.HandlerFunc
HandleWithLogging handles the request with the given handler, setting the logger on the request's context to be either a logrus logger (when running locally) or a Google Cloud logger (when running on GCP).
func IsBrowserName ¶
IsBrowserName determines whether the given name string is a valid browser name. Used for validating user-input params for browsers.
func IsFeatureEnabled ¶
IsFeatureEnabled returns true if a feature with the given flag name exists, and Enabled is set to true.
func IsLatest ¶
IsLatest returns whether a SHA[0:10] is empty or "latest", both of which are treated as looking up the latest run for each browser.
func IsStableBrowserName ¶
IsStableBrowserName determines whether the given name string is a valid browser name of a stable browser (i.e. not using the -experimental suffix).
func MapStringKeys ¶
MapStringKeys returns the keys in the given string-keyed map.
func NewCachingHandler ¶
func NewCachingHandler(ctx context.Context, delegate http.Handler, cache ReadWritable, isCacheable func(*http.Request) bool, getCacheKey func(*http.Request) interface{}, shouldCache func(context.Context, int, []byte) bool) http.Handler
NewCachingHandler produces a caching handler with an underlying delegate handler, cache, cacheability decision function, and cache key producer.
func NewGitHubClientFromToken ¶
NewGitHubClientFromToken returns a new GitHub client from an access token.
func NewMultiError ¶
NewMultiError creates a MultiError from a slice of errors. The "when" parameter will be included in the error string in a "when" clause. If the slice is empty, nil will be returned.
func NewMultiErrorFromChan ¶
NewMultiErrorFromChan creates a MultiError by reading from an error channel. The "when" parameter will be included in the error string in a "when" clause. If there is no error in the channel, nil will be returned.
Note that it uses `range` over the channel, so users need to close the channel before calling this function or running it in a goroutine.
func NewSecureCookie ¶
func NewSecureCookie(store Datastore) (*securecookie.SecureCookie, error)
NewSecureCookie returns a SecureCookie instance for wpt.fyi. This instance can be used to encode and decode cookies set by wpt.fyi.
func NewSetFromStringSlice ¶
NewSetFromStringSlice is a helper for the inability to cast []string to []interface{}
func ParseAlignedParam ¶
ParseAlignedParam parses the "aligned" param. See ParseBooleanParam.
func ParseBooleanParam ¶
ParseBooleanParam parses the given param name as a bool. Return nil if the param is missing, true if if it's present with no value, otherwise the parsed boolean value of the param's value.
func ParseBrowsersParam ¶
ParseBrowsersParam returns a list of browser params for the request. It parses the 'browsers' parameter, split on commas, and also checks for the (repeatable) 'browser' params.
func ParseDateTimeParam ¶
ParseDateTimeParam flexibly parses a date/time param with the given name as a time.Time.
func ParseIntParam ¶
ParseIntParam parses the result of ParseParam as int64.
func ParseLabelsParam ¶
ParseLabelsParam returns a set list of test-run labels to include, or nil if no labels are provided.
func ParseMaxCountParam ¶
ParseMaxCountParam parses the 'max-count' parameter as an integer
func ParseMaxCountParamWithDefault ¶
ParseMaxCountParamWithDefault parses the 'max-count' parameter as an integer, or returns the default when no param is present, or on error.
func ParseOffsetParam ¶
ParseOffsetParam parses the 'offset' parameter as an integer
func ParsePRParam ¶
ParsePRParam parses the "pr" parameter. If it's not a valid int64, an error will be returned.
func ParsePathsParam ¶
ParsePathsParam returns a set list of test paths to include, or nil if no filter is provided (and all tests should be included). It parses the 'paths' parameter, split on commas, and also checks for the (repeatable) 'path' params
func ParseQueryParamInt ¶
ParseQueryParamInt parses the URL query parameter at key. If the parameter is empty or missing, nil is returned.
func ParseRepeatedInt64Param ¶
ParseRepeatedInt64Param parses the result of ParseRepeatedParam as int64.
func ParseRepeatedParam ¶
ParseRepeatedParam parses a param that may be a plural name, with all values comma-separated, or a repeated singular param. e.g. ?label=foo&label=bar vs ?labels=foo,bar
func ParseSHA ¶
ParseSHA parses and validates the given 'sha'. It returns "latest" by default (and in error cases).
func ParseTestURL ¶
ParseTestURL parses a WPT test URL and returns its file path and query components. If the test is a multi-global (auto-generated) test, the function returns the underlying file name of the test. e.g. testURL="foo/bar/test.any.worker.html?variant"
filepath="foo/bar/test.any.js" query="?variant"
func ParseViewParam ¶
ParseViewParam parses the 'view' parameter and ensures it is a valid value.
func PrepareLinkFilter ¶
func PrepareLinkFilter(metadata MetadataResults) map[string][]string
PrepareLinkFilter maps a MetadataResult test name to its URLs.
func PrepareTestLabelFilter ¶
func PrepareTestLabelFilter(metadata MetadataResults) map[string][]string
PrepareTestLabelFilter maps a MetadataResult test name to its labels.
func ProductChannelToLabel ¶
ProductChannelToLabel maps known product-specific channel names to the wpt.fyi model's equivalent.
func SetFeature ¶
SetFeature puts a feature with the given flag name and enabled state.
func SplitWPTTestPath ¶
SplitWPTTestPath splits a WPT test path into a folder path and a test name.
func StringSliceContains ¶
StringSliceContains returns true if the given slice contains the given string.
func ToStringSlice ¶
ToStringSlice converts a set to a typed string slice.
func URLAsCacheKey ¶
URLAsCacheKey is a helper for returning the request's full URL as a cache key. If this string is too long to be a redis key then writes to redis will fail, but that is not a big concern; it simply means that requests for cacheable long URLs will not be cached.
func WrapApplicationJSON ¶
func WrapApplicationJSON(h http.HandlerFunc) http.HandlerFunc
WrapApplicationJSON wraps the given handler func in one that sets a Content-Type header of "text/json" on the response.
func WrapHSTS ¶
func WrapHSTS(h http.HandlerFunc) http.HandlerFunc
WrapHSTS wraps the given handler func in one that sets the Strict-Transport-Security header on the response.
func WrapPermissiveCORS ¶
func WrapPermissiveCORS(h http.HandlerFunc, methods ...string) http.HandlerFunc
WrapPermissiveCORS wraps the given handler func in one that sets an all-permissive CORS header on the response.
func WrapTrustedCORS ¶
func WrapTrustedCORS(h http.HandlerFunc, origins []string, methods []string) http.HandlerFunc
WrapTrustedCORS wraps the given handler func in one that sets an Allow-Credentials CORS header with specified origins and methods on the response.
Types ¶
type AppEngineAPI ¶
type AppEngineAPI interface { Context() context.Context // GitHub OAuth client using the bot account (wptfyibot), which has // repo and read:org permissions. GetGitHubClient() (*github.Client, error) // http.Client GetHTTPClient() *http.Client GetHTTPClientWithTimeout(time.Duration) *http.Client // GetVersion returns the version name for the current environment. GetVersion() string // GetHostname returns the canonical hostname for the current AppEngine // project, i.e. staging.wpt.fyi or wpt.fyi. GetHostname() string // GetVersionedHostname returns the AppEngine hostname for the current // version of the default service, i.e., // VERSION-dot-wptdashboard{,-staging}.REGION.r.appspot.com. // Note: if the default service does not have the current version, // AppEngine routing will find a version according to traffic split. // https://cloud.google.com/appengine/docs/standard/go/how-requests-are-routed#soft_routing GetVersionedHostname() string // GetServiceHostname returns the AppEngine hostname for the current // version of the given service, i.e., // VERSION-dot-SERVICE-dot-wptdashboard{,-staging}.REGION.r.appspot.com. // Note: if the specified service does not have the current version, // AppEngine routing will find a version according to traffic split; // if the service does not exist at all, AppEngine will fall back to // the default service. GetServiceHostname(service string) string // GetResultsURL returns a URL to {staging.,}wpt.fyi/results with the // given filter. GetResultsURL(filter TestRunFilter) *url.URL // GetRunsURL returns a URL to {staging.,}wpt.fyi/runs with the given // filter. GetRunsURL(filter TestRunFilter) *url.URL // GetResultsUploadURL returns a URL for uploading results. GetResultsUploadURL() *url.URL // Simple wrappers that delegate to Datastore IsFeatureEnabled(featureName string) bool GetUploader(uploader string) (Uploader, error) // ScheduleTask schedules an AppEngine POST task on Cloud Tasks. // taskName can be empty, in which case one will be generated by Cloud // Tasks. Returns the final taskName and error. ScheduleTask(queueName, taskName, target string, params url.Values) (string, error) }
AppEngineAPI is an abstraction of some appengine context helper methods.
func NewAppEngineAPI ¶
func NewAppEngineAPI(ctx context.Context) AppEngineAPI
NewAppEngineAPI returns an AppEngineAPI for the given context.
type BSFData ¶
type BSFData struct { // The latest WPT Revision updated in this BSF data. LastUpdateRevision string `json:"lastUpdateRevision"` // Fields correspond to the fields (columns) in this BSF data table. Fields []string `json:"fields"` // BSF data table, defined by the fields. Data [][]string `json:"data"` }
BSFData stores BSF data of the latest WPT revision.
func FilterandExtractBSFData ¶
FilterandExtractBSFData filters rawBSFdata based on query filters `from` and `to`, and generates BSFData for bsf_handler. rawBSFdata is [][]string with the 0th index as fields and the rest as the BSF data table in chronological order; e.g. [[sha,date,chrome-version,chrome,firefox-version,firefox,safari-version,safari], [eea0b54014e970a2f94f1c35ec6e18ece76beb76,2018-08-07,70.0.3510.0 dev,602.0505256721168,63.0a1,1617.1788882804883,12.1,2900.3438625831423], [203c34855f6871d6e55eaf7b55b50dad563f781f,2018-08-18,70.0.3521.2 dev,605.3869030161061,63.0a1,1521.908686731921,12.1,2966.686195133767], ...]
type Browser ¶
type Browser struct { InitiallyLoaded bool `json:"initially_loaded"` CurrentlyRun bool `json:"currently_run"` BrowserName string `json:"browser_name"` BrowserVersion string `json:"browser_version"` OSName string `json:"os_name"` OSVersion string `json:"os_version"` Sauce bool `json:"sauce"` }
Browser holds objects that appear in browsers.json
type ByBrowserName ¶
type ByBrowserName []Product
ByBrowserName is a []Product sortable by BrowserName values.
func (ByBrowserName) Len ¶
func (e ByBrowserName) Len() int
func (ByBrowserName) Less ¶
func (e ByBrowserName) Less(i, j int) bool
func (ByBrowserName) Swap ¶
func (e ByBrowserName) Swap(i, j int)
type CachedStore ¶
type CachedStore interface {
Get(cacheID, storeID, value interface{}) error
}
CachedStore is a read-only interface that attempts to read from a cache, and when entities are not found, read from a store and write the result to the cache.
func NewByteCachedStore ¶
func NewByteCachedStore(ctx context.Context, cache ReadWritable, store Readable) CachedStore
NewByteCachedStore produces a CachedStore that composes a ReadWritable cache and a Readable store, operating over the input context.Context.
func NewObjectCachedStore ¶
func NewObjectCachedStore(ctx context.Context, cache ObjectCache, store ObjectStore) CachedStore
NewObjectCachedStore constructs a new CachedStore backed by an ObjectCache and ObjectStore.
type CachingResponseWriter ¶
type CachingResponseWriter interface { http.ResponseWriter WriteTo(io.Writer) (int64, error) StatusCode() int Bytes() []byte }
CachingResponseWriter is an http.ResponseWriter that can produce a new io.Reader instances that can replay the response.
func NewCachingResponseWriter ¶
func NewCachingResponseWriter(delegate http.ResponseWriter) CachingResponseWriter
NewCachingResponseWriter wraps the input http.ResponseWriter with a caching implementation.
type CheckSuite ¶
type CheckSuite struct { // SHA of the revision that requested a check suite. SHA string `json:"sha"` // The GitHub app ID for the custom wpt.fyi check. AppID int64 `json:"app_id"` // The GitHub app installation ID for custom wpt.fyi check InstallationID int64 `json:"installation"` Owner string `json:"owner"` // Owner username Repo string `json:"repo"` PRNumbers []int `json:"pr_numbers"` }
CheckSuite entities represent a GitHub check request that has been noted by wpt.fyi, and will cause creation of a completed check_run when results arrive for the PR.
type CloudSecretManager ¶
type CloudSecretManager struct {
// contains filtered or unexported fields
}
CloudSecretManager is the implementation of the SecretManager for GCP. https://cloud.google.com/secret-manager
func NewAppEngineSecretManager ¶
func NewAppEngineSecretManager(ctx context.Context, projectID string) CloudSecretManager
NewAppEngineSecretManager instantiates a new secret manager for a given context.
type Datastore ¶
type Datastore interface { Context() context.Context Done() interface{} NewQuery(typeName string) Query NewIDKey(typeName string, id int64) Key NewIncompleteKey(typeName string) Key NewNameKey(typeName string, name string) Key ReserveID(typeName string) (Key, error) Get(key Key, dst interface{}) error GetAll(q Query, dst interface{}) ([]Key, error) GetMulti(keys []Key, dst interface{}) error Put(key Key, src interface{}) (Key, error) PutMulti(keys []Key, src interface{}) ([]Key, error) // Atomically insert a new entity. Insert(key Key, src interface{}) error // Atomically update or create an entity: the entity is first fetched // by key into dst, which must be a struct pointer; if the key cannot // be found, no error is returned and dst is not modified. Then // mutator(dst) is called; the transaction will be aborted if non-nil // error is returned. Finally, write dst back by key. Update(key Key, dst interface{}, mutator func(obj interface{}) error) error TestRunQuery() TestRunQuery }
Datastore abstracts a datastore, hiding the distinctions between cloud and appengine's datastores.
func NewAppEngineDatastore ¶
NewAppEngineDatastore creates a Datastore implementation, or a Datastore implementation with Redis in front to cache all TestRun reads if cached is true.
Both variants (cached or not) are backed by Cloud Datastore SDK, using Clients initialized at startup in webapp.
type DiffAPI ¶
type DiffAPI interface { GetRunsDiff(before, after TestRun, filter DiffFilterParam, paths mapset.Set) (RunDiff, error) GetDiffURL(before, after TestRun, diffFilter *DiffFilterParam) *url.URL GetMasterDiffURL(testRun TestRun, diffFilter *DiffFilterParam) *url.URL }
DiffAPI is an abstraction for computing run differences.
func NewDiffAPI ¶
NewDiffAPI return and implementation of the DiffAPI interface.
type DiffFilterParam ¶
type DiffFilterParam struct { // Added tests are present in the 'after' state of the diff, but not present // in the 'before' state of the diff. Added bool // Deleted tests are present in the 'before' state of the diff, but not present // in the 'after' state of the diff. Deleted bool // Changed tests are present in both the 'before' and 'after' states of the diff, // but the number of passes, failures, or total tests has changed. Changed bool // Unchanged tests are present in both the 'before' and 'after' states of the diff, // and the number of passes, failures, or total tests is unchanged. Unchanged bool }
DiffFilterParam represents the types of changed test paths to include.
func ParseDiffFilterParams ¶
ParseDiffFilterParams collects the diff filtering params for the given request. It splits the filter param into the differences to include. The filter param is inspired by Git's --diff-filter flag. It also adds the set of test paths to include; see ParsePathsParam below.
func (DiffFilterParam) String ¶
func (d DiffFilterParam) String() string
type FetchBSF ¶
FetchBSF encapsulates the Fetch(isExperimental bool) method for testing.
func NewFetchBSF ¶
func NewFetchBSF() FetchBSF
NewFetchBSF returns an instance of FetchBSF for apiBSFHandler.
type Flag ¶
Flag represents an enviroment feature flag's default state.
func GetFeatureFlags ¶
GetFeatureFlags returns all feature flag defaults set in the datastore.
type GitHubAccessControl ¶
type GitHubAccessControl interface { // IsValid* functions also verify the access token with GitHub. IsValidWPTMember() (bool, error) IsValidAdmin() (bool, error) }
GitHubAccessControl encapsulates implementation details of access control for the wpt-metadata repository.
func NewGitHubAccessControl ¶
func NewGitHubAccessControl(ctx context.Context, ds Datastore, botClient *github.Client, user *User, token string) (GitHubAccessControl, error)
NewGitHubAccessControl returns a GitHubAccessControl for checking the permission of a logged-in GitHub user.
func NewGitHubAccessControlFromRequest ¶
func NewGitHubAccessControlFromRequest(aeAPI AppEngineAPI, ds Datastore, r *http.Request) (GitHubAccessControl, error)
NewGitHubAccessControlFromRequest returns a GitHubAccessControl for checking the permission of a logged-in GitHub user from a request. (nil, nil) will be returned if the user is not logged in.
type GitHubOAuth ¶
type GitHubOAuth interface { Context() context.Context Datastore() Datastore GetAccessToken() string GetAuthCodeURL(state string, opts ...oauth2.AuthCodeOption) string GetUser(client *github.Client) (*github.User, error) NewClient(oauthCode string) (*github.Client, error) SetRedirectURL(url string) }
GitHubOAuth encapsulates implementation details of GitHub OAuth flow.
func NewGitHubOAuth ¶
func NewGitHubOAuth(ctx context.Context) (GitHubOAuth, error)
NewGitHubOAuth returns an instance of GitHubOAuth for loginHandler and oauthHandler.
type GitHubWebFeaturesClient ¶
type GitHubWebFeaturesClient struct {
// contains filtered or unexported fields
}
GitHubWebFeaturesClient is the entrypoint to retrieving web features from GitHub.
func NewGitHubWebFeaturesClient ¶
func NewGitHubWebFeaturesClient(ghClient *github.Client) *GitHubWebFeaturesClient
NewGitHubWebFeaturesClient constructs an instance of GitHubWebFeaturesClient with default values.
func (GitHubWebFeaturesClient) Get ¶
func (c GitHubWebFeaturesClient) Get(ctx context.Context) (WebFeaturesData, error)
Get returns the latest web features data from GitHub.
type GitHubWebFeaturesClientOption ¶
type GitHubWebFeaturesClientOption func(*gitHubWebFeaturesClientOptions)
A GitHubWebFeaturesClientOption configures GitHubWebFeaturesClient.
func SetHTTPClientForGitHubWebFeatures ¶
func SetHTTPClientForGitHubWebFeatures(netClient *http.Client) GitHubWebFeaturesClientOption
SetHTTPClientForGitHubWebFeatures overrides the http client used to download the found asset from the release.
type KeysByProduct ¶
type KeysByProduct []ProductTestRunKeys
KeysByProduct is an array of tuples of {product, matching keys}, returned when a TestRun key query is executed.
func (KeysByProduct) AllKeys ¶
func (t KeysByProduct) AllKeys() []Key
AllKeys returns an array of all the loaded keys.
type LegacySearchRunResult ¶
type LegacySearchRunResult struct { // Passes is the number of test results in a PASS/OK state. Passes int `json:"passes"` // Total is the total number of test results for this run/file pair. Total int `json:"total"` // Status represents either the test status or harness status. // This will be an empty string for old summaries. Status string `json:"status"` // NewAggProcess represents whether the summary was created with the old // or new aggregation process. NewAggProcess bool `json:"newAggProcess"` }
LegacySearchRunResult is the results data from legacy test summarys. These summaries contain a "pass count" and a "total count", where the test itself counts as 1, and each subtest counts as 1. The "pass count" contains any status values that are "PASS" or "OK".
type Logger ¶
type Logger interface { Debugf(format string, args ...interface{}) Errorf(format string, args ...interface{}) Infof(format string, args ...interface{}) Warningf(format string, args ...interface{}) }
Logger is an abstract logging interface that contains an intersection of logrus and GAE logging functionality.
func GetLogger ¶
GetLogger retrieves a non-nil Logger that is appropriate for use in ctx. If ctx does not provide a logger, then a nil-logger is returned.
func NewNilLogger ¶
func NewNilLogger() Logger
NewNilLogger returns a new logger that silently ignores all Logger calls.
type LoggerCtxKey ¶
type LoggerCtxKey struct{}
LoggerCtxKey is a key for attaching a Logger to a context.Context.
func DefaultLoggerCtxKey ¶
func DefaultLoggerCtxKey() LoggerCtxKey
DefaultLoggerCtxKey returns the default key where a logger instance should be stored in a context.Context object.
type Manifest ¶
type Manifest struct { Items map[string]rawManifestTrie `json:"items,omitempty"` Version int `json:"version,omitempty"` URLBase string `json:"url_base,omitempty"` // contains filtered or unexported fields }
Manifest represents a JSON blob of all the WPT tests.
func (*Manifest) ContainsFile ¶
ContainsFile checks whether m contains a file path (including directories).
func (*Manifest) ContainsTest ¶
ContainsTest checks whether m contains a full test URL.
type Metadata ¶
type Metadata struct {
Links MetadataLinks `yaml:"links"`
}
Metadata represents a wpt-metadata META.yml file.
type MetadataFetcher ¶
MetadataFetcher is an abstract interface that encapsulates the Fetch() method. Fetch() fetches metadata for webapp and searchcache.
type MetadataLink ¶
type MetadataLink struct { Product ProductSpec `yaml:"product,omitempty" json:"product,omitempty"` URL string `yaml:"url,omitempty" json:"url"` Label string `yaml:"label,omitempty" json:"label,omitempty"` Results []MetadataTestResult `yaml:"results" json:"results,omitempty"` }
MetadataLink is an item in the `links` node of a wpt-metadata META.yml file, which lists an external reference, optionally filtered by product and a specific test.
type MetadataLinks ¶
type MetadataLinks []MetadataLink
MetadataLinks is a helper type for a MetadataLink slice.
type MetadataResults ¶
type MetadataResults map[string]MetadataLinks
MetadataResults is a map from test paths to all of the links under that test path. It represents a flattened copy of the wpt-metadata repository, which has metadata sharded across as large number of files in a directory structure.
func GetMetadataResponse ¶
func GetMetadataResponse(testRuns []TestRun, includeTestLevel bool, log Logger, fetcher MetadataFetcher) (MetadataResults, error)
GetMetadataResponse retrieves the response to a WPT Metadata query. Metadata is included for any product that matches a passed TestRun. Test-level metadata (i.e. that is not associated with any product) may be fetched by passing true for includeTestLevel.
func GetMetadataResponseOnProducts ¶
func GetMetadataResponseOnProducts(productSpecs ProductSpecs, includeTestLevel bool, log Logger, fetcher MetadataFetcher) (MetadataResults, error)
GetMetadataResponseOnProducts constructs the response to a WPT Metadata query, given ProductSpecs. Metdata is included for any product that matches a passed ProductSpec. Test-level metadata (i.e. that is not associated with any product) may be fetched by passing true for includeTestLevel.
type MetadataTestResult ¶
type MetadataTestResult struct { TestPath string `yaml:"test" json:"test,omitempty"` SubtestName *string `yaml:"subtest,omitempty" json:"subtest,omitempty"` Status *TestStatus `yaml:"status,omitempty" json:"status,omitempty"` }
MetadataTestResult is a filter for test results to which the Metadata link should apply.
type MultiError ¶
type MultiError struct {
// contains filtered or unexported fields
}
MultiError is a convenient wrapper of multiple errors and is itself an implementation of the error interface.
func (MultiError) Count ¶
func (e MultiError) Count() int
Count returns the number of errors in this MultiError.
func (MultiError) Error ¶
func (e MultiError) Error() string
func (MultiError) Errors ¶
func (e MultiError) Errors() []error
Errors returns the inner error slice of a MultiError.
type ObjectCache ¶
type ObjectCache interface { ObjectStore Put(id, value interface{}) error }
ObjectCache is an ObjectStore that also supports Put() for arbitrary id/value pairs.
func NewJSONObjectCache ¶
func NewJSONObjectCache(ctx context.Context, delegate ReadWritable) ObjectCache
NewJSONObjectCache constructs a new JSON object cache, bound to the input context.Context and delgating to the input ReadWritable.
type ObjectStore ¶
type ObjectStore interface {
Get(id, value interface{}) error
}
ObjectStore is a store that populates an arbitrary output object on Get().
type PendingTestRun ¶
type PendingTestRun struct { ID int64 `json:"id" datastore:"-"` ProductAtRevision CheckRunID int64 `json:"check_run_id" datastore:",omitempty"` Uploader string `json:"uploader"` Error string `json:"error" datastore:",omitempty"` Stage PendingTestRunStage `json:"stage"` Created time.Time `json:"created"` Updated time.Time `json:"updated"` }
PendingTestRun represents a TestRun that has started, but is not yet completed.
func (*PendingTestRun) Load ¶
func (s *PendingTestRun) Load(ps []datastore.Property) error
Load is part of the datastore.PropertyLoadSaver interface. We use it to reset all time to UTC and trim their monotonic clock.
func (*PendingTestRun) Save ¶
func (s *PendingTestRun) Save() ([]datastore.Property, error)
Save is part of the datastore.PropertyLoadSaver interface. Delegate to the default behaviour.
func (*PendingTestRun) Transition ¶
func (s *PendingTestRun) Transition(next PendingTestRunStage) error
Transition sets Stage to next if the transition is allowed; otherwise an error is returned.
type PendingTestRunByUpdated ¶
type PendingTestRunByUpdated []PendingTestRun
PendingTestRunByUpdated sorts the pending test runs by updated (asc)
func (PendingTestRunByUpdated) Len ¶
func (a PendingTestRunByUpdated) Len() int
func (PendingTestRunByUpdated) Less ¶
func (a PendingTestRunByUpdated) Less(i, j int) bool
func (PendingTestRunByUpdated) Swap ¶
func (a PendingTestRunByUpdated) Swap(i, j int)
type PendingTestRunStage ¶
type PendingTestRunStage int
PendingTestRunStage represents the stage of a test run in its life cycle.
const ( StageGitHubQueued PendingTestRunStage = 100 StageGitHubInProgress PendingTestRunStage = 200 StageCIRunning PendingTestRunStage = 300 StageCIFinished PendingTestRunStage = 400 StageGitHubSuccess PendingTestRunStage = 500 StageGitHubFailure PendingTestRunStage = 550 StageWptFyiReceived PendingTestRunStage = 600 StageWptFyiProcessing PendingTestRunStage = 700 StageValid PendingTestRunStage = 800 StageInvalid PendingTestRunStage = 850 StageEmpty PendingTestRunStage = 851 StageDuplicate PendingTestRunStage = 852 )
Constant enums for PendingTestRunStage
func (PendingTestRunStage) MarshalJSON ¶
func (s PendingTestRunStage) MarshalJSON() ([]byte, error)
MarshalJSON is the custom JSON marshaler for PendingTestRunStage.
func (PendingTestRunStage) String ¶
func (s PendingTestRunStage) String() string
func (*PendingTestRunStage) UnmarshalJSON ¶
func (s *PendingTestRunStage) UnmarshalJSON(b []byte) error
UnmarshalJSON is the custom JSON unmarshaler for PendingTestRunStage.
type Product ¶
type Product struct { BrowserName string `json:"browser_name"` BrowserVersion string `json:"browser_version"` OSName string `json:"os_name"` OSVersion string `json:"os_version"` }
Product uniquely defines a browser version, running on an OS version.
func ParseBrowserParam ¶
ParseBrowserParam parses and validates the 'browser' param for the request. It returns "" by default (and in error cases).
func ParseProduct ¶
ParseProduct parses the `browser-version-os-version` input as a Product struct.
type ProductAtRevision ¶
type ProductAtRevision struct { Product // The first 10 characters of the SHA1 of the tested WPT revision. // // Deprecated: The authoritative git revision indicator is FullRevisionHash. Revision string `json:"revision"` // The complete SHA1 hash of the tested WPT revision. FullRevisionHash string `json:"full_revision_hash"` }
ProductAtRevision defines a WPT run for a specific product, at a specific hash of the WPT repo.
func (ProductAtRevision) String ¶
func (p ProductAtRevision) String() string
type ProductSpec ¶
type ProductSpec struct { ProductAtRevision Labels mapset.Set }
ProductSpec is a struct representing a parsed product spec string.
func ParseProductParam ¶
func ParseProductParam(v url.Values) (product *ProductSpec, err error)
ParseProductParam parses and validates the 'product' param for the request.
func ParseProductSpec ¶
func ParseProductSpec(spec string) (productSpec ProductSpec, err error)
ParseProductSpec parses a test-run spec into a ProductAtRevision struct.
func ParseProductSpecUnsafe ¶
func ParseProductSpecUnsafe(s string) ProductSpec
ParseProductSpecUnsafe ignores any potential error parsing the given product spec.
func (ProductSpec) DisplayName ¶
func (p ProductSpec) DisplayName() string
DisplayName returns a capitalized version of the product's name.
func (ProductSpec) IsExperimental ¶
func (p ProductSpec) IsExperimental() bool
IsExperimental returns true if the product spec is restricted to experimental runs (i.e. has the label "experimental").
func (ProductSpec) MarshalJSON ¶
func (p ProductSpec) MarshalJSON() ([]byte, error)
MarshalJSON treats the set as an array so it can be marshalled.
func (ProductSpec) MarshalYAML ¶
func (p ProductSpec) MarshalYAML() (interface{}, error)
MarshalYAML serializes a ProductSpec into a YAML string.
func (ProductSpec) Matches ¶
func (p ProductSpec) Matches(run TestRun) bool
Matches returns whether the ProductSpec matches the given run.
func (ProductSpec) MatchesLabels ¶
func (p ProductSpec) MatchesLabels(labels mapset.Set) bool
MatchesLabels returns whether the ProductSpec's labels matches the given labels.
func (ProductSpec) MatchesProductAtRevision ¶
func (p ProductSpec) MatchesProductAtRevision(productAtRevision ProductAtRevision) bool
MatchesProductAtRevision returns whether the spec matches the given ProductAtRevision.
func (ProductSpec) MatchesProductSpec ¶
func (p ProductSpec) MatchesProductSpec(productSpec ProductSpec) bool
MatchesProductSpec returns whether the ProductSpec matches the given ProductSpec.
func (ProductSpec) String ¶
func (p ProductSpec) String() string
func (*ProductSpec) UnmarshalJSON ¶
func (p *ProductSpec) UnmarshalJSON(data []byte) (err error)
UnmarshalJSON parses an array so that ProductSpec can be unmarshalled.
func (*ProductSpec) UnmarshalYAML ¶
func (p *ProductSpec) UnmarshalYAML(unmarshal func(interface{}) error) (err error)
UnmarshalYAML parses an array so that ProductSpec can be unmarshalled.
type ProductSpecs ¶
type ProductSpecs []ProductSpec
ProductSpecs is a helper type for a slice of ProductSpec structs.
func GetDefaultProducts ¶
func GetDefaultProducts() ProductSpecs
GetDefaultProducts returns the default set of products to show on wpt.fyi
func ParseBeforeAndAfterParams ¶
func ParseBeforeAndAfterParams(v url.Values) (ProductSpecs, error)
ParseBeforeAndAfterParams parses the before and after params used when intending to diff two test runs. Either both or neither of the params must be present.
func ParseProductOrBrowserParams ¶
func ParseProductOrBrowserParams(v url.Values) (products ProductSpecs, err error)
ParseProductOrBrowserParams parses the product (or, browser) params present in the given request.
func ParseProductSpecs ¶
func ParseProductSpecs(specs ...string) (products ProductSpecs, err error)
ParseProductSpecs parses multiple product specs
func ParseProductsParam ¶
func ParseProductsParam(v url.Values) (ProductSpecs, error)
ParseProductsParam returns a list of product params for the request. It parses the 'products' parameter, split on commas, and also checks for the (repeatable) 'product' params.
func (ProductSpecs) Len ¶
func (p ProductSpecs) Len() int
func (ProductSpecs) Less ¶
func (p ProductSpecs) Less(i, j int) bool
func (ProductSpecs) OrDefault ¶
func (p ProductSpecs) OrDefault() ProductSpecs
OrDefault returns the current product specs, or the default if the set is empty.
func (ProductSpecs) Products ¶
func (p ProductSpecs) Products() []Product
Products gets the slice of products specified in the ProductSpecs slice.
func (ProductSpecs) Strings ¶
func (p ProductSpecs) Strings() []string
Strings returns the array of the ProductSpec items as their string representations.
func (ProductSpecs) Swap ¶
func (p ProductSpecs) Swap(i, j int)
type ProductTestRunKeys ¶
type ProductTestRunKeys struct { Product ProductSpec Keys []Key }
ProductTestRunKeys is a tuple of a product and test run keys loaded for it.
type ProductTestRuns ¶
type ProductTestRuns struct { Product ProductSpec TestRuns TestRuns }
ProductTestRuns is a tuple of a product and test runs loaded for it.
type Query ¶
type Query interface { Filter(filterStr string, value interface{}) Query Project(fields ...string) Query Limit(limit int) Query Offset(offset int) Query Order(order string) Query KeysOnly() Query Distinct() Query Run(Datastore) Iterator }
Query abstracts a datastore.Query
type QueryFilter ¶
QueryFilter represents the ways search results can be filtered in the webapp search API.
func ParseQueryFilterParams ¶
func ParseQueryFilterParams(v url.Values) (filter QueryFilter, err error)
ParseQueryFilterParams parses shared params for the search APIs.
type ReadWritable ¶
type ReadWritable interface { Readable // NewWriteCloser provides an io.WriteCloser for the entity keyed by its input // argument. NewWriteCloser(interface{}) (io.WriteCloser, error) }
ReadWritable is a provider interface for io.ReadCloser and io.WriteCloser.
func NewGZReadWritable ¶
func NewGZReadWritable(delegate ReadWritable) ReadWritable
NewGZReadWritable produces a ReadWritable that ungzips on read and gzips on write, and delegates the input argument.
func NewRedisReadWritable ¶
func NewRedisReadWritable(ctx context.Context, expiry time.Duration) ReadWritable
NewRedisReadWritable produces a ReadWritable that performs read/write operations via the App Engine redis API through the input context.Context.
type Readable ¶
type Readable interface { // NewReadCloser provides an io.ReadCloser for the entity keyed by its input // argument. NewReadCloser(interface{}) (io.ReadCloser, error) }
Readable is a provider interface for an io.ReadCloser.
func NewHTTPReadable ¶
NewHTTPReadable produces a Readable bound to the input context.Context.
type RedisSet ¶
type RedisSet interface { // Add inserts value to the set stored at key; ignored if value is // already a member of the set. Add(key string, value string) error // Remove removes value from the set stored at key; ignored if value is // not a member of the set. Remove(key string, value string) error // GetAll returns all the members of the set stored at key; returns an // empty string[] if the key is not present. GetAll(key string) ([]string, error) }
RedisSet is an interface for an redisSetReadWritable, which performs Add/Remove/GetAll operations via the App Engine Redis API.
type ResultsDiff ¶
ResultsDiff is a collection of test diffs, keyed by the test path.
func (ResultsDiff) Add ¶
func (r ResultsDiff) Add(k string, diff TestDiff)
Add adds the given diff to the TestDiff for the given key, or puts it in the map if it's not yet present.
func (ResultsDiff) Regressions ¶
func (r ResultsDiff) Regressions() mapset.Set
Regressions returns the set of test paths for tests that have a regression value in their diff. A change is considered a regression when tests that existed both before and after have an increase in the number of failing tests has increased, which will of course include newly-added tests that are failing. Additionally, we flag a decrease in the total number of tests as a regression, since that can often indicate a failure in a test's setup.
type ResultsSummary ¶
type ResultsSummary map[string]TestSummary
ResultsSummary is a collection of [pass, total] summary pairs, keyed by test.
func FetchRunResultsJSON ¶
func FetchRunResultsJSON(ctx context.Context, run TestRun) (results ResultsSummary, err error)
FetchRunResultsJSON fetches the results JSON summary for the given test run, but does not include subtests (since a full run can span 20k files).
func FetchRunResultsJSONForParam ¶
func FetchRunResultsJSONForParam( ctx context.Context, r *http.Request, param string) (results ResultsSummary, err error)
FetchRunResultsJSONForParam fetches the results JSON blob for the given [product]@[SHA] param.
func FetchRunResultsJSONForSpec ¶
func FetchRunResultsJSONForSpec( ctx context.Context, r *http.Request, spec ProductSpec) (results ResultsSummary, err error)
FetchRunResultsJSONForSpec fetches the result JSON blob for the given spec.
func (ResultsSummary) Add ¶
func (s ResultsSummary) Add(k string, other TestSummary)
Add adds the given summary to the summary for the given path, adding it to the map if it's not present already.
type RunDiff ¶
type RunDiff struct { // Differences is a map from test-path to an array of // [newly-passing, newly-failing, total-delta], // where newly-pa Before TestRun `json:"-"` BeforeSummary ResultsSummary `json:"-"` After TestRun `json:"-"` AfterSummary ResultsSummary `json:"-"` Differences ResultsDiff `json:"diff"` Renames map[string]string `json:"renames"` }
RunDiff represents a summary of the differences between 2 runs.
func RunDiffFromSearchResponse ¶
func RunDiffFromSearchResponse(aeAPI AppEngineAPI, before, after TestRun, scDiff SearchResponse) (RunDiff, error)
RunDiffFromSearchResponse builds a RunDiff from a searchcache response.
type SHAs ¶
type SHAs []string
SHAs is a helper type for a slice of commit/revision SHAs.
func ParseSHAParam ¶
ParseSHAParam parses and validates any 'sha' param(s) for the request.
func (SHAs) EmptyOrLatest ¶
EmptyOrLatest returns whether the shas slice is empty, or only contains one item, which is the latest keyword.
func (SHAs) FirstOrLatest ¶
FirstOrLatest returns the first sha in the slice, or the latest keyword.
type SearchResponse ¶
type SearchResponse struct { // Runs is the specific runs for which results were retrieved. Each run, in // order, corresponds to a Status entry in each SearchResult in Results. Runs []TestRun `json:"runs"` // IgnoredRuns is any runs that the client requested to be included in the // query, but were not included. This optional field may be non-nil if, for // example, results are being served from an incompelte cache of runs and some // runs described in the query request are not resident in the cache. IgnoredRuns []TestRun `json:"ignored_runs,omitempty"` // Results is the collection of test results, grouped by test file name. Results []SearchResult `json:"results"` // MetadataResponse is a response to a wpt-metadata query. MetadataResponse MetadataResults `json:"metadata,omitempty"` }
SearchResponse contains a response to search API calls, including specific runs whose results were searched and the search results themselves.
type SearchResult ¶
type SearchResult struct { // Test is the name of a test; this often corresponds to a test file path in // the WPT source reposiory. Test string `json:"test"` // LegacyStatus is the results data from legacy test summaries. These // summaries contain a "pass count" and a "total count", where the test itself // counts as 1, and each subtest counts as 1. The "pass count" contains any // status values that are "PASS" or "OK". LegacyStatus []LegacySearchRunResult `json:"legacy_status,omitempty"` // Interoperability scores. For N browsers, we have an array of // N+1 items, where the index X is the number of items passing in exactly // X of the N browsers. e.g. for 4 browsers, [0/4, 1/4, 2/4, 3/4, 4/4]. Interop []int `json:"interop,omitempty"` // Subtests (names) which are included in the LegacyStatus summary. Subtests []string `json:"subtests,omitempty"` // Diff count of subtests which are included in the LegacyStatus summary. Diff TestDiff `json:"diff,omitempty"` }
SearchResult contains data regarding a particular test file over a collection of runs. The runs are identified externally in a parallel slice (see SearchResponse).
type SecretManager ¶
SecretManager is a simple interface for getting secrets.
type TestDiff ¶
type TestDiff []int
TestDiff is an array of differences between 2 tests.
func NewTestDiff ¶
func NewTestDiff(before, after []int, filter DiffFilterParam) TestDiff
NewTestDiff computes the differences between two test-run pass-count summaries, namely an array of [passing, total] counts.
func (TestDiff) Append ¶
func (d TestDiff) Append(before, after TestStatus, filter *DiffFilterParam)
Append the difference between the two given statuses, if any.
func (TestDiff) NewlyPassing ¶
NewlyPassing is the delta/increase in the number of passing tests when comparing before/after.
func (TestDiff) Regressions ¶
Regressions is the delta/increase in the number of failing tests when comparing before/after.
func (TestDiff) TotalDelta ¶
TotalDelta is the delta in the number of total subtests when comparing before/after.
type TestHistoryEntry ¶
type TestHistoryEntry struct { BrowserName string RunID string Date string TestName string SubtestName string Status string }
TestHistoryEntry formats Test History data for the datastore.
type TestRun ¶
type TestRun struct { ID int64 `json:"id" datastore:"-"` ProductAtRevision // URL for summary of results, which is derived from raw results. ResultsURL string `json:"results_url"` // Time when the test run metadata was first created. CreatedAt time.Time `json:"created_at"` // Time when the test run started. TimeStart time.Time `json:"time_start"` // Time when the test run ended. TimeEnd time.Time `json:"time_end"` // URL for raw results JSON object. Resembles the JSON output of the // wpt report tool. RawResultsURL string `json:"raw_results_url"` // Labels for the test run. Labels []string `json:"labels"` }
TestRun stores metadata for a test run (produced by run/run.py)
func FetchRunForSpec ¶
func FetchRunForSpec(ctx context.Context, spec ProductSpec) (*TestRun, error)
FetchRunForSpec loads the wpt.fyi TestRun metadata for the given spec.
func (TestRun) IsExperimental ¶
IsExperimental returns true if the run is labelled experimental.
type TestRunFilter ¶
type TestRunFilter struct { SHAs SHAs `json:"shas,omitempty"` Labels mapset.Set `json:"labels,omitempty"` Aligned *bool `json:"aligned,omitempty"` From *time.Time `json:"from,omitempty"` To *time.Time `json:"to,omitempty"` MaxCount *int `json:"maxcount,omitempty"` Offset *int `json:"offset,omitempty"` // Used for paginating with MaxCount. Products ProductSpecs `json:"products,omitempty"` View *string `json:"view,omitempty"` }
TestRunFilter represents the ways TestRun entities can be filtered in the webapp and api.
func ParsePageToken ¶
func ParsePageToken(v url.Values) (*TestRunFilter, error)
ParsePageToken decodes a base64 encoding of a TestRunFilter struct.
func ParseTestRunFilterParams ¶
func ParseTestRunFilterParams(v url.Values) (filter TestRunFilter, err error)
ParseTestRunFilterParams parses all of the filter params for a TestRun query.
func (TestRunFilter) GetProductsOrDefault ¶
func (filter TestRunFilter) GetProductsOrDefault() (products ProductSpecs)
GetProductsOrDefault parses the 'products' (and legacy 'browsers') params, returning the ordered list of products to include, or a default list.
func (TestRunFilter) IsDefaultProducts ¶
func (filter TestRunFilter) IsDefaultProducts() bool
IsDefaultProducts returns whether the params products are empty, or the equivalent of the default product set.
func (TestRunFilter) IsDefaultQuery ¶
func (filter TestRunFilter) IsDefaultQuery() bool
IsDefaultQuery returns whether the params are just an empty query (or, the equivalent defaults of an empty query).
func (TestRunFilter) MarshalJSON ¶
func (filter TestRunFilter) MarshalJSON() ([]byte, error)
MarshalJSON treats the set as an array so it can be marshalled.
func (TestRunFilter) MasterOnly ¶
func (filter TestRunFilter) MasterOnly() TestRunFilter
MasterOnly returns the current filter, ensuring it has with the master-only restriction (a label of "master").
func (TestRunFilter) NextPage ¶
func (filter TestRunFilter) NextPage(loadedRuns TestRunsByProduct) *TestRunFilter
NextPage returns a filter for the next page of results that would match the current filter, based on the given results that were loaded.
func (TestRunFilter) OrAlignedStableRuns ¶
func (filter TestRunFilter) OrAlignedStableRuns() TestRunFilter
OrAlignedStableRuns returns the current filter, or, if it is a default query, returns a query for stable runs, with an aligned SHA.
func (TestRunFilter) OrDefault ¶
func (filter TestRunFilter) OrDefault() TestRunFilter
OrDefault returns the current filter, or, if it is a default query, returns the query used by default in wpt.fyi.
func (TestRunFilter) OrExperimentalRuns ¶
func (filter TestRunFilter) OrExperimentalRuns() TestRunFilter
OrExperimentalRuns returns the current filter, or, if it is a default query, returns a query for the latest experimental runs.
func (TestRunFilter) ToQuery ¶
func (filter TestRunFilter) ToQuery() (q url.Values)
ToQuery converts the filter set to a url.Values (set of query params).
func (TestRunFilter) Token ¶
func (filter TestRunFilter) Token() (string, error)
Token returns a base64 encoded copy of the filter.
func (*TestRunFilter) UnmarshalJSON ¶
func (filter *TestRunFilter) UnmarshalJSON(data []byte) error
UnmarshalJSON parses an array so that TestRunFilter can be unmarshalled.
type TestRunIDs ¶
type TestRunIDs []int64
TestRunIDs is a helper for an array of TestRun IDs.
func ExtractRunIDsBodyParam ¶
func ExtractRunIDsBodyParam(r *http.Request, replay bool) (TestRunIDs, error)
ExtractRunIDsBodyParam extracts {"run_ids": <run ids>} from a request JSON body. Optionally replace r.Body so that it can be replayed by subsequent request handling code can process it.
func GetTestRunIDs ¶
func GetTestRunIDs(keys []Key) TestRunIDs
GetTestRunIDs extracts the TestRunIDs from loaded datastore keys.
func ParseRunIDsParam ¶
func ParseRunIDsParam(v url.Values) (ids TestRunIDs, err error)
ParseRunIDsParam parses the "run_ids" parameter. If the ID is not a valid int64, an error will be returned.
func (TestRunIDs) GetKeys ¶
func (ids TestRunIDs) GetKeys(store Datastore) []Key
GetKeys returns a slice of keys for the TestRunIDs in the given datastore.
func (TestRunIDs) LoadTestRuns ¶
func (ids TestRunIDs) LoadTestRuns(store Datastore) (testRuns TestRuns, err error)
LoadTestRuns is a helper for fetching the TestRuns from the datastore, for the gives TestRunIDs.
type TestRunQuery ¶
type TestRunQuery interface { // LoadTestRuns loads the test runs for the TestRun entities for the given parameters. // It is encapsulated because we cannot run single queries with multiple inequality // filters, so must load the keys and merge the results. LoadTestRuns( products []ProductSpec, labels mapset.Set, revisions []string, from *time.Time, to *time.Time, limit, offset *int) (result TestRunsByProduct, err error) // LoadTestRunKeys loads the keys for the TestRun entities for the given parameters. // It is encapsulated because we cannot run single queries with multiple inequality // filters, so must load the keys and merge the results. LoadTestRunKeys( products []ProductSpec, labels mapset.Set, revisions []string, from *time.Time, to *time.Time, limit *int, offset *int) (result KeysByProduct, err error) // LoadTestRunsByKeys loads test runs by keys and sets their IDs. LoadTestRunsByKeys(KeysByProduct) (result TestRunsByProduct, err error) // GetAlignedRunSHAs returns an array of the SHA[0:10] for runs that // exists for all the given products, ordered by most-recent, as well as a map // of those SHAs to a KeysByProduct map of products to the TestRun keys, for the // runs in the aligned run. GetAlignedRunSHAs( products ProductSpecs, labels mapset.Set, from, to *time.Time, limit *int, offset *int) (shas []string, keys map[string]KeysByProduct, err error) }
TestRunQuery abstracts complex queries of TestRun entities.
func NewTestRunQuery ¶
func NewTestRunQuery(store Datastore) TestRunQuery
NewTestRunQuery creates a concrete TestRunQuery backed by a Datastore interface.
type TestRuns ¶
type TestRuns []TestRun
TestRuns is a helper type for an array of TestRun entities.
func FetchLatestRuns ¶
FetchLatestRuns fetches the TestRun metadata for the latest runs, using the API on the given host.
func FetchRuns ¶
func FetchRuns(wptdHost string, filter TestRunFilter) (TestRuns, error)
FetchRuns fetches the TestRun metadata for the given sha / labels, using the API on the given host.
func (TestRuns) GetTestRunIDs ¶
func (t TestRuns) GetTestRunIDs() TestRunIDs
GetTestRunIDs gets an array of the IDs for the TestRun entities in the array.
func (TestRuns) OldestRunTimeStart ¶
OldestRunTimeStart returns the TimeStart of the oldest run in the set.
func (TestRuns) SetTestRunIDs ¶
func (t TestRuns) SetTestRunIDs(ids TestRunIDs)
SetTestRunIDs sets the ID field for each run, from the given ids.
type TestRunsByProduct ¶
type TestRunsByProduct []ProductTestRuns
TestRunsByProduct is an array of tuples of {product, matching runs}, returned when a TestRun query is executed.
func (TestRunsByProduct) AllRuns ¶
func (t TestRunsByProduct) AllRuns() TestRuns
AllRuns returns an array of all the loaded runs.
func (TestRunsByProduct) First ¶
func (t TestRunsByProduct) First() *TestRun
First returns the first TestRun
type TestStatus ¶
type TestStatus int64
TestStatus represents the possible test result statuses.
func TestStatusValueFromString ¶
func TestStatusValueFromString(str string) TestStatus
TestStatusValueFromString returns the enum value associated with str (if any), or else TestStatusDefault.
func (TestStatus) IsHarnessStatus ¶
func (s TestStatus) IsHarnessStatus() bool
IsHarnessStatus is true if the value is TestStatusPass or TestStatusError, statuses which are used for the harness-level result.
func (TestStatus) IsPass ¶
func (s TestStatus) IsPass() bool
IsPass is true if the value is TestStatusPass.
func (TestStatus) IsPassOrOK ¶
func (s TestStatus) IsPassOrOK() bool
IsPassOrOK is true if the value is TestStatusPass or TestStatusOK
func (*TestStatus) MarshalYAML ¶
func (s *TestStatus) MarshalYAML() (interface{}, error)
MarshalYAML serializes TestStatus into a YAML string.
func (TestStatus) String ¶
func (s TestStatus) String() string
String returns the string associated with s (if any), or else TestStatusStringDefault.
func (*TestStatus) UnmarshalJSON ¶
func (s *TestStatus) UnmarshalJSON(b []byte) error
UnmarshalJSON is the custom JSON unmarshaler for TestStatus.
func (*TestStatus) UnmarshalYAML ¶
func (s *TestStatus) UnmarshalYAML(unmarshal func(interface{}) error) (err error)
UnmarshalYAML unmarshals a TestStatus as either a name string or a number.
type TestSummary ¶
type TestSummary []int
TestSummary is a pair of [passing, total] counts for a test file.
func (TestSummary) Add ¶
func (s TestSummary) Add(other TestSummary)
Add adds the other summary counts to this one. Used for summing folders.
type Token ¶
type Token struct {
Secret string `json:"secret"`
}
Token is used for test result uploads.
type TriageMetadata ¶
type TriageMetadata interface {
Triage(metadata MetadataResults) (string, error)
}
TriageMetadata encapsulates the Triage() method for testing.
func NewTriageMetadata ¶
func NewTriageMetadata(ctx context.Context, githubClient *github.Client, authorName string, authorEmail string, fetcher MetadataFetcher) TriageMetadata
NewTriageMetadata returns an instance of the triageMetadata struct to run Triage() method.
type Uploader ¶
Uploader is a username/password combo accepted by the results receiver.
func GetUploader ¶
func GetUploader(m SecretManager, uploader string) (Uploader, error)
GetUploader gets the Uploader by the given name.
type User ¶
type User struct { GitHubHandle string `json:"github_handle,omitempty"` GitHubEmail string `json:"github_email,omitempty"` }
User represents an authenticated GitHub user.
func GetUserFromCookie ¶
GetUserFromCookie extracts the User and GitHub OAuth token from a request's session cookie, if it exists. If the cookie does not exist or cannot be decoded, (nil, "") will be returned.
type Version ¶
Version is a struct for a parsed version string.
func ParseVersion ¶
ParseVersion parses the given version as a semantically versioned string.
type WebFeaturesData ¶
WebFeaturesData is the public data type that represents the data parsed from a given manifest file.
func (WebFeaturesData) TestMatchesWithWebFeature ¶
func (d WebFeaturesData) TestMatchesWithWebFeature(test, webFeature string) bool
TestMatchesWithWebFeature performs two checks. If the given test path is present in the data. If not, return false If it is present, check if the given web feature applies to that test.
Source Files ¶
- appengine.go
- browsers.go
- cache.go
- datastore.go
- datastore_cached.go
- datastore_cloud.go
- errors.go
- fetch_bsf.go
- fetch_runs.go
- github_oauth.go
- logger.go
- manifest.go
- metadata.go
- metadata_util.go
- models.go
- params.go
- product_spec.go
- request_caching.go
- routing.go
- run_diff.go
- secret_manager.go
- secret_manager_cloud.go
- statuses.go
- test_run_filter.go
- test_run_query.go
- triage_metadata.go
- util.go
- web_features.go
- web_features_manifest_github_download.go
- web_features_manifest_util.go
Directories ¶
Path | Synopsis |
---|---|
Package sharedtest is a generated GoMock package.
|
Package sharedtest is a generated GoMock package. |