pkg/jobmanager/steps.go (35 lines of code) (raw):
// Copyright (c) Facebook, Inc. and its affiliates.
//
// This source code is licensed under the MIT license found in the
// LICENSE file in the root directory of this source tree.
package jobmanager
import (
"github.com/facebookincubator/contest/pkg/job"
"github.com/facebookincubator/contest/pkg/pluginregistry"
"github.com/facebookincubator/contest/pkg/test"
"github.com/facebookincubator/contest/pkg/xcontext"
)
// stepsResolver is an interface which determines how to fetch TestStepsDescriptors, which could
// have either already been pre-calculated, or built by the TestFetcher.
type stepsResolver interface {
GetStepsDescriptors(xcontext.Context) ([]test.TestStepsDescriptors, error)
}
type literalStepsResolver struct {
stepsDescriptors []test.TestStepsDescriptors
}
func (l literalStepsResolver) GetStepsDescriptors(xcontext.Context) ([]test.TestStepsDescriptors, error) {
return l.stepsDescriptors, nil
}
type fetcherStepsResolver struct {
jobDescriptor *job.Descriptor
registry *pluginregistry.PluginRegistry
}
func (f fetcherStepsResolver) GetStepsDescriptors(ctx xcontext.Context) ([]test.TestStepsDescriptors, error) {
var descriptors []test.TestStepsDescriptors
for _, testDescriptor := range f.jobDescriptor.TestDescriptors {
bundleTestFetcher, err := f.registry.NewTestFetcherBundle(ctx, testDescriptor)
if err != nil {
return nil, err
}
testName, stepDescriptors, err := bundleTestFetcher.TestFetcher.Fetch(ctx, bundleTestFetcher.FetchParameters)
if err != nil {
return nil, err
}
descriptors = append(descriptors, test.TestStepsDescriptors{TestName: testName, TestSteps: stepDescriptors})
}
return descriptors, nil
}