func()

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
}