in plugins/testfetchers/uri/uri.go [86:126]
func (tf *URI) Fetch(ctx xcontext.Context, params interface{}) (string, []*test.TestStepDescriptor, error) {
fetchParams, ok := params.(FetchParameters)
if !ok {
return "", nil, fmt.Errorf("Fetch expects uri.FetchParameters object")
}
ctx.Debugf("Fetching tests with params %+v", fetchParams)
scheme := strings.ToLower(strings.ToLower(fetchParams.URI.Scheme))
var (
buf []byte
err error
)
switch scheme {
case "", "file":
// naively assume that it's OK to read the whole file in memory.
buf, err = ioutil.ReadFile(fetchParams.URI.Path)
if err != nil {
return "", nil, err
}
case "http", "https":
resp, err := http.Get(fetchParams.URI.String())
if err != nil {
return "", nil, err
}
buf, err = ioutil.ReadAll(resp.Body)
if err != nil {
return "", nil, err
}
default:
return "", nil, fmt.Errorf("unsupported scheme '%s'", scheme)
}
type doc struct {
Steps []*test.TestStepDescriptor
}
var d doc
if err := json.Unmarshal(buf, &d); err != nil {
return "", nil, fmt.Errorf("cannot decode JSON test description: %v", err)
}
// TODO do something with the Report object (or factor it out from the step
// definition)
return fetchParams.TestName, d.Steps, nil
}