def test_register_experiment():
    from lttngcluster.api import TraceExperiment
    from lttngcluster.experiments.reg import registry, AlreadyRegistered, NotRegistered

    class TestExperiment(TraceExperiment):
        def validate(self, errors):
            pass

    registry.register(TestExperiment)
    exp = registry.get_experiment('TestExperiment')
    exception1 = None
    exception2 = None
    try:
        registry.register(TestExperiment)
    except Exception as e:
        exception1 = e
    try:
        registry.get_experiment('bidon')
    except Exception as e:
        exception2 = e

    assert isinstance(exp, TraceExperiment)
    assert isinstance(exception1, AlreadyRegistered)
    assert isinstance(exception2, NotRegistered)
def cmd_trace_one(args, recipe):
    err = RecipeErrorCollection()
    opts = TraceExperimentOptions(**TraceExperimentOptions.default_options)
    opts.load_path(recipe)
    klass = registry.get_experiment(opts['experiment'])
    klass.set_options(opts)
    klass.validate(err)
    if len(err) > 0:
        pprint.pprint(opts)
        recipe_errors_show(recipe, err)
        raise Exception('validation error')
    if args.verbose:
        print('recipe:')
        pprint.pprint(opts)
    runner = TraceRunnerDefault()
    runner.set_dry_run(args.dry_run)
    runner.run(klass)
def recipe_verify(recipe, err):
    opts = TraceExperimentOptions(**TraceExperimentOptions.default_options)
    opts.load_path(recipe)
    klass = registry.get_experiment(opts['experiment'])
    klass.set_options(opts)
    klass.validate(err)