Ejemplo n.º 1
0
  public void testQueryEvents() {

    EventRegistry registry = EventRegistryFactory.forObjectContainer(db());

    EventRecorder recorder = new EventRecorder(fileSession().lock());

    registry.queryStarted().addListener(recorder);
    registry.queryFinished().addListener(recorder);

    Assert.areEqual(0, recorder.size());

    Query q = db().query();
    q.execute();

    Assert.areEqual(2, recorder.size());
    EventRecord e1 = recorder.get(0);
    Assert.areSame(registry.queryStarted(), e1.e);
    Assert.areSame(q, ((QueryEventArgs) e1.args).query());

    EventRecord e2 = recorder.get(1);
    Assert.areSame(registry.queryFinished(), e2.e);
    Assert.areSame(q, ((QueryEventArgs) e2.args).query());

    recorder.clear();

    registry.queryStarted().removeListener(recorder);
    registry.queryFinished().removeListener(recorder);

    db().query().execute();

    Assert.areEqual(0, recorder.size());
  }
Ejemplo n.º 2
0
 public AssertFailureEvent getLastAssertFailureEvent() {
   return (AssertFailureEvent) eventRecorder.getLast(AssertFailureEvent.class);
 }
Ejemplo n.º 3
0
 private void recordCommand(Command command, CommandState state) {
   eventRecorder.record(command.getClass().getName(), state.ordinal());
 }
Ejemplo n.º 4
0
  private Strongback(Configurator config, Strongback previousInstance) {
    boolean start = false;
    if (previousInstance != null) {
      start = previousInstance.started.get();
      // Terminates all currently-scheduled commands and stops the executor's thread (if running)
      // ...
      previousInstance.doShutdown();
      strictExecutables = previousInstance.strictExecutables;
      executables = previousInstance.executables;
      switchReactor = previousInstance.switchReactor;

      executables.unregister(previousInstance.dataRecorderDriver);
      executables.unregister(previousInstance.eventRecorder);
      executables.unregister(previousInstance.scheduler);
      dataRecorderChannels = previousInstance.dataRecorderChannels;
      excessiveExecutionHandler = previousInstance.excessiveExecutionHandler;
    } else {
      executables = new Executables();
      strictExecutables = new Executables();
      switchReactor = new AsyncSwitchReactor();
      executables.register(switchReactor);
      dataRecorderChannels = new DataRecorderChannels();
      excessiveExecutionHandler = config.excessiveExecutorDelayHandler;
    }
    loggers = config.loggersSupplier.get();
    clock = config.timeSystemSupplier.get();
    // Create a new executor ...
    strictExecutor =
        PeriodicExecutor.roboRIONotifierWithFallback(
            "strictExecutor",
            config.executionPeriodInMilliseconds,
            TimeUnit.MILLISECONDS,
            strictExecutables,
            clock,
            loggers.apply("strictExecutor"),
            monitorDelay("strictExecutor", 100, TimeUnit.MILLISECONDS));

    dsPacketExecutor =
        PeriodicExecutor.waitForDSPacketWithFallback(
            "dsPacketExecutor",
            config.driverstationExecutorTimeoutInMilliseconds,
            TimeUnit.MILLISECONDS,
            executables,
            clock,
            loggers.apply("dsPacketExecutor"),
            monitorDelay("dsPacketExecutor", 100, TimeUnit.MILLISECONDS));

    // Create a new event recorder ...
    if (config.eventWriterFactory != null) {
      eventRecorder = new AsyncEventRecorder(config.eventWriterFactory.get(), clock);
      executables.register(eventRecorder);
    } else {
      eventRecorder = EventRecorder.noOp();
    }

    // Create a new scheduler that optionally records command state
    // transitions. Note that we ignore everything in
    // the previous instance's scheduler, since all commands would have been
    // terminated (as intended) ...
    CommandListener commandListener =
        config.recordCommandStateChanges ? this::recordCommand : this::recordNoCommands;
    scheduler = new Scheduler(loggers.apply("scheduler"), commandListener);
    executables.register(scheduler);

    // Create a new data recorder driver ...
    dataRecorderDriver = new DataRecorderDriver(dataRecorderChannels, config.dataWriterFactory);
    executables.register(dataRecorderDriver);

    // Start this if the previous was already started ...
    if (previousInstance != null && start) {

      doStart();
    }
  }