Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[backend] Simulations never ends if no inject / disabled injects / deleted injects (#1586) #1711

Merged
merged 2 commits into from
Oct 23, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -167,61 +167,83 @@
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);
} else {
inject.getInjectorContract().ifPresent(injectorContract -> {
setInjectStatusAndExecuteInject(executableInject, inject);
}
}

Check warning on line 172 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L170-L172

Added lines #L170 - L172 were not covered by tests

if (!inject.isReady()) {
private void setInjectStatusAndExecuteInject(ExecutableInject executableInject, Inject inject) {
inject.getInjectorContract().ifPresentOrElse(injectorContract -> {

Check warning on line 175 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L175

Added line #L175 was not covered by tests
if (!inject.isReady()) {
// Status

Check warning on line 177 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L177

Added line #L177 was not covered by tests
if (inject.getStatus().isEmpty()) {
InjectStatus status = new InjectStatus();
status.getTraces().add(InjectStatusExecution.traceError("The inject is not ready to be executed (missing mandatory fields)"));
status.setName(ExecutionStatus.ERROR);
status.setTrackingSentDate(Instant.now());
status.setInject(inject);
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);

Check warning on line 185 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L179-L185

Added lines #L179 - L185 were not covered by tests
} else {
InjectStatus status = inject.getStatus().get();

Check warning on line 187 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L187

Added line #L187 was not covered by tests
status.getTraces().add(InjectStatusExecution.traceError("The inject is not ready to be executed (missing mandatory fields)"));
status.setName(ExecutionStatus.ERROR);
status.setTrackingSentDate(Instant.now());
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);
}
return;
}

Injector externalInjector = injectorRepository.findByType(injectorContract.getInjector().getType()).orElseThrow();
LOGGER.log(Level.INFO, "Executing inject " + inject.getInject().getTitle());
// Executor logics
ExecutableInject newExecutableInject = executableInject;

Check warning on line 200 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L189-L200

Added lines #L189 - L200 were not covered by tests
if (Boolean.TRUE.equals(injectorContract.getNeedsExecutor())) {
try {

Check warning on line 202 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L202

Added line #L202 was not covered by tests
// Status
if (inject.getStatus().isEmpty()) {
InjectStatus status = new InjectStatus();
status.getTraces().add(InjectStatusExecution.traceError("The inject is not ready to be executed (missing mandatory fields)"));
status.setName(ExecutionStatus.ERROR);
status.setName(ExecutionStatus.EXECUTING);

Check warning on line 206 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L206

Added line #L206 was not covered by tests
status.setTrackingSentDate(Instant.now());
status.setInject(inject);
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);
} else {
InjectStatus status = inject.getStatus().get();
status.getTraces().add(InjectStatusExecution.traceError("The inject is not ready to be executed (missing mandatory fields)"));
status.setName(ExecutionStatus.ERROR);
status.setName(ExecutionStatus.EXECUTING);

Check warning on line 213 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L213

Added line #L213 was not covered by tests
status.setTrackingSentDate(Instant.now());
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);
}
return;
newExecutableInject = this.executionExecutorService.launchExecutorContext(executableInject, inject);
} catch (InterruptedException e) {
throw new RuntimeException(e);

Check warning on line 220 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L218-L220

Added lines #L218 - L220 were not covered by tests
}
}

Check warning on line 222 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L222

Added line #L222 was not covered by tests
if (externalInjector.isExternal()) {
executeExternal(newExecutableInject);
} else {
executeInternal(newExecutableInject);

Check warning on line 226 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L224-L226

Added lines #L224 - L226 were not covered by tests
}
}, () -> setInjectStatusWhenNoInjectorContractExists(inject));
}

Check warning on line 229 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L228-L229

Added lines #L228 - L229 were not covered by tests

Injector externalInjector = injectorRepository.findByType(injectorContract.getInjector().getType()).orElseThrow();
LOGGER.log(Level.INFO, "Executing inject " + inject.getInject().getTitle());
// Executor logics
ExecutableInject newExecutableInject = executableInject;
if (Boolean.TRUE.equals(injectorContract.getNeedsExecutor())) {
try {
// Status
if (inject.getStatus().isEmpty()) {
InjectStatus status = new InjectStatus();
status.setName(ExecutionStatus.EXECUTING);
status.setTrackingSentDate(Instant.now());
status.setInject(inject);
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);
} else {
InjectStatus status = inject.getStatus().get();
status.setName(ExecutionStatus.EXECUTING);
status.setTrackingSentDate(Instant.now());
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);
}
newExecutableInject = this.executionExecutorService.launchExecutorContext(executableInject, inject);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
if (externalInjector.isExternal()) {
executeExternal(newExecutableInject);
} else {
executeInternal(newExecutableInject);
}
});
private void setInjectStatusWhenNoInjectorContractExists(Inject inject) {

Check warning on line 231 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L231

Added line #L231 was not covered by tests
if (inject.getStatus().isEmpty()) {
InjectStatus status = new InjectStatus();
status.getTraces().add(InjectStatusExecution.traceError("Inject does not have a contract"));
status.setName(ExecutionStatus.ERROR);
status.setTrackingSentDate(Instant.now());
status.setInject(inject);
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);
} else {
InjectStatus status = inject.getStatus().get();

Check warning on line 241 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L234-L241

Added lines #L234 - L241 were not covered by tests
status.getTraces().add(InjectStatusExecution.traceError("Inject does not have a contract"));
status.setName(ExecutionStatus.ERROR);
status.setTrackingSentDate(Instant.now());
status.setCommandsLines(atomicTestingService.getCommandsLinesFromInject(inject));
injectStatusRepository.save(status);

Check warning on line 246 in openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java

View check run for this annotation

Codecov / codecov/patch

openbas-api/src/main/java/io/openbas/scheduler/jobs/InjectsExecutionJob.java#L243-L246

Added lines #L243 - L246 were not covered by tests
}
}

Expand Down