use of org.isisaddons.module.command.dom.CommandJdo in project estatio by estatio.
the class FakeScheduler method runBackgroundCommands.
@Action(semantics = SemanticsOf.NON_IDEMPOTENT)
public void runBackgroundCommands(@ParameterLayout(named = "Wait for (ms)") final Integer waitFor) throws InterruptedException {
List<CommandJdo> commands = backgroundCommandRepository.findBackgroundCommandsNotYetStarted();
if (commands.isEmpty()) {
throw new IllegalStateException("There are no commands not yet started");
}
transactionService.nextTransaction();
BackgroundCommandExecutionFromBackgroundCommandServiceJdo backgroundExec = new BackgroundCommandExecutionFromBackgroundCommandServiceJdo();
final SimpleSession session = new SimpleSession("scheduler_user", new String[] { "admin_role" });
final Thread thread = new Thread(() -> backgroundExec.execute(session, null));
thread.start();
thread.join(waitFor);
commands = backgroundCommandRepository.findBackgroundCommandsNotYetStarted();
if (!commands.isEmpty()) {
throw new IllegalStateException("There are still " + commands.size() + " not yet started");
}
}
use of org.isisaddons.module.command.dom.CommandJdo in project estatio by estatio.
the class CommandReplayAnalyserResultStrSimplified method doAnalyzeReplay.
/**
* Hook for the slave.
*
* Unlike {@link CommandReplayAnalyserResultStr}, this checks only that both are null or both are non-null.
*/
protected String doAnalyzeReplay(final Command command, final CommandDto dto) {
if (!(command instanceof CommandJdo)) {
return null;
}
final CommandJdo commandJdo = (CommandJdo) command;
// if there is an exception, then pay attention to this rather than the results
// (have found that the master may have both a result and an exception, while on the slave have
// only an exception).
final String exceptionStr = CommandDtoUtils.getUserData(dto, CommandWithDto.USERDATA_KEY_EXCEPTION);
if (exceptionStr != null) {
return null;
}
// no exception; check if both master and slave are either both null, or both non-null
final String masterResultStr = CommandDtoUtils.getUserData(dto, CommandWithDto.USERDATA_KEY_RETURN_VALUE);
final String slaveResultStr = commandJdo.getResultStr();
if (masterResultStr == null) {
return null;
}
if (slaveResultStr != null) {
// don't check for an exact match
return null;
}
return String.format("Results differ. Master was '%s', slave is null", masterResultStr);
}
use of org.isisaddons.module.command.dom.CommandJdo in project estatio by estatio.
the class RunBackgroundCommandsService method runBackgroundCommands.
@Programmatic
public void runBackgroundCommands() throws InterruptedException {
List<CommandJdo> commands = backgroundCommandRepository.findBackgroundCommandsNotYetStarted();
assertThat(commands).hasSize(1);
transactionService.nextTransaction();
BackgroundCommandExecutionFromBackgroundCommandServiceJdo backgroundExec = new BackgroundCommandExecutionFromBackgroundCommandServiceJdo();
final SimpleSession session = new SimpleSession("scheduler_user", new String[] { "admin_role" });
final Thread thread = new Thread(() -> backgroundExec.execute(session, null));
thread.start();
thread.join(5000L);
commands = backgroundCommandRepository.findBackgroundCommandsNotYetStarted();
assertThat(commands).isEmpty();
}
use of org.isisaddons.module.command.dom.CommandJdo in project estatio by estatio.
the class Smoke_IntegTest method can_send_email.
@Test
public void can_send_email() throws Exception {
// given
fixtureScripts.runFixtureScript(new CommandDomModule().getTeardownFixtureWillDelete(), null);
fixtureScripts.runFixtureScript(new DemoObjectWithNotes_and_DemoInvoice_and_docs_and_comms_create(), null);
transactionService.nextTransaction();
// and so given customer with an email
final DemoObjectWithNotes fred = customerMenu.findDemoObjectsWithNotesByName(DemoObjectWithNote_and_DemoInvoice_create3.FRED_HAS_EMAIL_AND_PHONE).get(0);
final EmailAddress fredEmail = (EmailAddress) linkRepository.findByOwnerAndCommunicationChannelType(fred, CommunicationChannelType.EMAIL_ADDRESS).get(0).getCommunicationChannel();
// and with an invoice
final DemoInvoice fredInvoice = invoiceRepository.findByCustomer(fred).get(0);
// that has an attached document
final Paperclip paperclip = paperclipRepository.findByAttachedTo(fredInvoice).get(0);
final DocumentAbstract document = paperclip.getDocument();
// when
final Document_sendByEmail documentEmail = mixin(Document_sendByEmail.class, document);
final Set<EmailAddress> emailAddresses = documentEmail.choices0Act();
// then
assertThat(emailAddresses).contains(fredEmail);
// and when
// REVIEW: should be wrapped, however the DocumentCommunicationSupportForDocumentsAttachedToInvoiceForLease
// vetoes this, and there is current no way to exclude classes that are not part of the "effective" module
// final Communication comm = wrap(documentEmail).act(fredEmail, null, null, null, null, null);
final Communication comm = documentEmail.act(fredEmail, null, null, null, null, null);
// then
assertThat(comm).isNotNull();
assertThat(comm.getState()).isEqualTo(CommunicationState.PENDING);
assertThat(comm.getCreatedAt()).isNotNull();
assertThat(comm.getType()).isEqualTo(CommunicationChannelType.EMAIL_ADDRESS);
assertThat(comm.getSubject()).isNotNull();
assertThat(comm.getSentAt()).isNull();
final List<CommunicationChannel> correspondentChannels = Lists.newArrayList(comm.getCorrespondents()).stream().map(CommChannelRole::getChannel).filter(Objects::nonNull).collect(Collectors.toList());
assertThat(correspondentChannels).contains(fredEmail);
List<EmailMessage> emailMessages = fakeEmailService.listSentEmails();
assertThat(emailMessages).isEmpty();
List<CommandJdo> commands = backgroundCommandRepository.findBackgroundCommandsNotYetStarted();
assertThat(commands.size()).isEqualTo(1);
// when
fakeScheduler.runBackgroundCommands(5000);
// then
assertThat(comm.getState()).isEqualTo(CommunicationState.SENT);
assertThat(comm.getSentAt()).isNotNull();
emailMessages = fakeEmailService.listSentEmails();
assertThat(emailMessages).isNotEmpty();
}
use of org.isisaddons.module.command.dom.CommandJdo in project estatio by estatio.
the class FakeScheduler method runBackgroundCommands.
@Action(semantics = SemanticsOf.NON_IDEMPOTENT)
public void runBackgroundCommands(@ParameterLayout(named = "Wait for (ms)") final Integer waitFor) throws InterruptedException {
List<CommandJdo> commands = backgroundCommandRepository.findBackgroundCommandsNotYetStarted();
if (commands.isEmpty()) {
throw new IllegalStateException("There are no commands not yet started");
}
transactionService.nextTransaction();
BackgroundCommandExecutionFromBackgroundCommandServiceJdo backgroundExec = new BackgroundCommandExecutionFromBackgroundCommandServiceJdo();
final SimpleSession session = new SimpleSession("scheduler_user", new String[] { "admin_role" });
final Thread thread = new Thread(() -> backgroundExec.execute(session, null));
thread.start();
thread.join(waitFor);
commands = backgroundCommandRepository.findBackgroundCommandsNotYetStarted();
if (!commands.isEmpty()) {
throw new IllegalStateException("There are still " + commands.size() + " not yet started");
}
}
Aggregations