in cmds/contest/server/server.go [87:135]
func registerPlugins(pluginRegistry *pluginregistry.PluginRegistry, pluginConfig *PluginConfig) error {
// register targetmanagers
for _, loader := range pluginConfig.TargetManagerLoaders {
name, factory := loader()
if err := pluginRegistry.RegisterTargetManager(name, factory); err != nil {
return err
}
}
// register testfetchers
for _, loader := range pluginConfig.TestFetcherLoaders {
name, factory := loader()
if err := pluginRegistry.RegisterTestFetcher(name, factory); err != nil {
return err
}
}
// register teststeps
for _, loader := range pluginConfig.TestStepLoaders {
name, factory, events := loader()
if err := pluginRegistry.RegisterTestStep(name, factory, events); err != nil {
return err
}
}
// register reporters
for _, loader := range pluginConfig.ReporterLoaders {
name, factory := loader()
if err := pluginRegistry.RegisterReporter(name, factory); err != nil {
return err
}
}
// TODO make listener also configurable from contest-generator.
// also register user functions here. TODO: make them configurable from contest-generator.
errCh := make(chan error, 1)
funcInitOnce.Do(func() {
for _, userFunction := range userFunctions {
for name, fn := range userFunction {
if err := test.RegisterFunction(name, fn); err != nil {
errCh <- fmt.Errorf("failed to load user function '%s': %w", name, err)
return
}
}
}
})
return nil
}