protected String getDummyTransportMessageBody(String name, int index) { List<Message> messages = dummyTransport.getMessages("dummy:" + name); Message message = messages.get(index); return message.getBody(); }
@Override public String debugDump() { return debugDump(0); }
private Message getMessageFromExpression(CustomNotifierType config, ExpressionVariables variables, Task task, OperationResult result) { if (config.getExpression() == null) { return null; } List<NotificationMessageType> messages; try { messages = evaluateExpression(config.getExpression(), variables, "message expression", task, result); } catch (ObjectNotFoundException | SchemaException | ExpressionEvaluationException | CommunicationException | ConfigurationException | SecurityViolationException e) { throw new SystemException("Couldn't evaluate custom notifier expression: " + e.getMessage(), e); } if (messages == null || messages.isEmpty()) { return null; } else if (messages.size() > 1) { getLogger().warn("Custom notifier returned more than one message: {}", messages); } return messages.get(0) != null ? new Message(messages.get(0)) : null; }
result.addArbitraryObjectCollectionAsParam("mailMessage recipient(s)", mailMessage.getTo()); result.addParam("mailMessage subject", mailMessage.getSubject()); String msg = "No notifications are configured. Mail notification to " + mailMessage.getTo() + " will not be sent."; LOGGER.warn(msg) ; result.recordWarning(msg); String msg = "Mail server(s) are not defined, mail notification to " + mailMessage.getTo() + " will not be sent."; LOGGER.warn(msg) ; result.recordWarning(msg); String from = mailMessage.getFrom() != null ? mailMessage.getFrom() : defaultFrom; mimeMessage.setFrom(new InternetAddress(from)); for (String recipient : mailMessage.getTo()) { mimeMessage.addRecipient(javax.mail.Message.RecipientType.TO, new InternetAddress(recipient)); for (String recipientCc : mailMessage.getCc()) { mimeMessage.addRecipient(javax.mail.Message.RecipientType.CC, new InternetAddress(recipientCc)); for (String recipientBcc : mailMessage.getBcc()) { mimeMessage.addRecipient(javax.mail.Message.RecipientType.BCC, new InternetAddress(recipientBcc)); mimeMessage.setSubject(mailMessage.getSubject(), "utf-8"); String contentType = mailMessage.getContentType(); if (StringUtils.isEmpty(contentType)) { contentType = "text/plain; charset=UTF-8"; messageBody.setContent(mailMessage.getBody(), contentType);
Message message = new Message(); message.setBody(body != null ? body : ""); if (contentType != null) { message.setContentType(contentType); } else if (generalNotifierType.getContentType() != null) { message.setContentType(generalNotifierType.getContentType()); message.setSubject(subject); message.setFrom(from); message.setTo(recipientsAddresses); message.setCc(getCcBccAddresses(generalNotifierType.getCcExpression(), variables, "notification cc-expression", task, result)); message.setBcc(getCcBccAddresses(generalNotifierType.getBccExpression(), variables, "notification bcc-expression", task, result)); message.setAttachments(attachments);
@Test public void test430NotificationAboutJackType2() throws Exception { final String TEST_NAME = "test430NotificationAboutJackType2"; TestUtil.displayTestTitle(this, TEST_NAME); // GIVEN Task task = createTask(DOT_CLASS + TEST_NAME); OperationResult result = task.getResult(); PrismProperty<ScriptingExpressionType> expression = parseAnyData(NOTIFICATION_ABOUT_JACK_TYPE2_FILE); prepareNotifications(); // WHEN ExecutionContext output = scriptingExpressionEvaluator.evaluateExpression(expression.getAnyValue().getValue(), task, result); // THEN dumpOutput(output, result); result.computeStatus(); TestUtil.assertSuccess(result); assertOutputData(output, 1, OperationResultStatus.SUCCESS); assertEquals("Produced 1 event(s)\n", output.getConsoleOutput()); display("Dummy transport", dummyTransport); checkDummyTransportMessages("Custom", 1); Message m = dummyTransport.getMessages("dummy:Custom").get(0); assertEquals("Wrong message body", "1", m.getBody()); assertEquals("Wrong message subject", "Ad hoc notification 2", m.getSubject()); checkDummyTransportMessages("CustomType2", 1); m = dummyTransport.getMessages("dummy:CustomType2").get(0); assertEquals("Wrong message body", "POV:user:c0c010c0-d34d-b33f-f00d-111111111111(jack)", m.getBody()); assertEquals("Wrong message subject", "Failure notification of type 2", m.getSubject()); }
assertEquals("Invalid list of recipients", singletonList("recipient@evolveum.com"), pwdMessage.getTo()); assertEquals("Wrong message body", "Password for account jack on Dummy Resource is: deadmentellnotales", pwdMessage.getBody()); assertEquals("Invalid list of recipients", singletonList("recipient@evolveum.com"), addMessage.getTo()); assertEquals("Wrong message body", "Notification about account-related operation\n" + "\n" + " - Administrative status: ENABLED\n" + "\n" + "Channel: http://midpoint.evolveum.com/xml/ns/public/gui/channels-3#user", addMessage.getBody());
result.addArbitraryObjectCollectionAsParam("message recipient(s)", message.getTo()); result.addParam("message subject", message.getSubject()); String msg = "No notifications are configured. SMS notification to " + message.getTo() + " will not be sent."; LOGGER.warn(msg) ; result.recordWarning(msg); String msg = "SMS configuration '" + smsConfigName + "' not found. SMS notification to " + message.getTo() + " will not be sent."; LOGGER.warn(msg) ; result.recordWarning(msg); String msg = "SMS gateway(s) are not defined, notification to " + message.getTo() + " will not be sent."; LOGGER.warn(msg) ; result.recordWarning(msg); if (message.getFrom() != null) { from = message.getFrom(); } else if (smsConfigurationType.getDefaultFrom() != null) { from = smsConfigurationType.getDefaultFrom(); if (message.getTo().isEmpty()) { String msg = "There is no recipient to send the notification to."; LOGGER.warn(msg) ; List<String> to = message.getTo(); assert to.size() > 0; LOGGER.info("Message sent successfully to {} via gateway {}.", message.getTo(), smsGatewayConfigurationType.getName()); resultForGateway.recordSuccess();
result.addArbitraryObjectCollectionAsParam("message recipient(s)", message.getTo()); result.addParam("message subject", message.getSubject()); String msg = "No notifications are configured. Custom notification to " + message.getTo() + " will not be sent."; LOGGER.warn(msg) ; result.recordWarning(msg); String msg = "Custom configuration '" + configName + "' not found. Custom notification to " + message.getTo() + " will not be sent."; LOGGER.warn(msg) ; result.recordWarning(msg);
@Test public void test420AttachmentFromFile() throws Exception { final String TEST_NAME = "test420AttachmentFromFile"; TestUtil.displayTestTitle(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestNotifications.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); preTestCleanup(AssignmentPolicyEnforcementType.FULL); // WHEN TestUtil.displayWhen(TEST_NAME); PrismObject<UserType> user = new UserType(prismContext) .name("testAttachmentFromFileUser") .asPrismObject(); addObject(user); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess("addObject result", result); // Check notifications display("Notifications", dummyTransport); notificationManager.setDisabled(true); checkDummyTransportMessages("attachment-from-file", 1); Message message = dummyTransport.getMessages("dummy:attachment-from-file").get(0); assertEquals("Wrong # of attachments", 1, message.getAttachments().size()); assertEquals("Wrong contentType of attachment", "image/png", message.getAttachments().get(0).getContentType()); assertEquals("Wrong fileName of attachments", "alf.png", message.getAttachments().get(0).getFileName()); assertEquals("Wrong fileName of attachments", "/home/user/example.png", message.getAttachments().get(0).getContentFromFile()); assertEquals("Wrong fileName of attachments", null, message.getAttachments().get(0).getContent()); }
@Test public void test420NotificationAboutJack() throws Exception { final String TEST_NAME = "test420NotificationAboutJack"; TestUtil.displayTestTitle(this, TEST_NAME); // GIVEN Task task = createTask(DOT_CLASS + TEST_NAME); OperationResult result = task.getResult(); PrismProperty<ScriptingExpressionType> expression = parseAnyData(NOTIFICATION_ABOUT_JACK_FILE); prepareNotifications(); // WHEN ExecutionContext output = scriptingExpressionEvaluator.evaluateExpression(expression.getAnyValue().getValue(), task, result); // THEN dumpOutput(output, result); result.computeStatus(); TestUtil.assertSuccess(result); assertOutputData(output, 1, OperationResultStatus.SUCCESS); assertEquals("Produced 1 event(s)\n", output.getConsoleOutput()); display("Dummy transport", dummyTransport); checkDummyTransportMessages("Custom", 1); Message m = dummyTransport.getMessages("dummy:Custom").get(0); assertEquals("Wrong message body", "jack/" + USER_JACK_OID, m.getBody()); assertEquals("Wrong message subject", "Ad hoc notification", m.getSubject()); }
@Test public void test430ExpressionAttachment() throws Exception { final String TEST_NAME = "test430ExpressionAttachment"; TestUtil.displayTestTitle(this, TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestNotifications.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); preTestCleanup(AssignmentPolicyEnforcementType.FULL); // WHEN TestUtil.displayWhen(TEST_NAME); PrismObject<UserType> user = new UserType(prismContext) .name("testExpressionAttachmentUser") .asPrismObject(); addObject(user); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess("addObject result", result); // Check notifications display("Notifications", dummyTransport); notificationManager.setDisabled(true); checkDummyTransportMessages("expression-attachment", 1); Message message = dummyTransport.getMessages("dummy:expression-attachment").get(0); assertEquals("Wrong # of attachments", 1, message.getAttachments().size()); assertEquals("Wrong contentType of attachment", "text/html", message.getAttachments().get(0).getContentType()); assertEquals("Wrong content of attachments", "<!DOCTYPE html><html><body>Hello World!</body></html>", message.getAttachments().get(0).getContent()); assertEquals("Wrong fileName of attachments", "hello_world.html", message.getAttachments().get(0).getFileName()); assertEquals("Wrong fileName of attachments", null, message.getAttachments().get(0).getContentFromFile()); }
private void logNotifyMessages(List<Message> messages) { for (Message message: messages) { LOGGER.debug("Notification message:\n{}", message.getBody()); } }
assertEquals("Wrong # of attachments", 1, message.getAttachments().size()); assertEquals("Wrong contentType of attachment", "image/jpeg", message.getAttachments().get(0).getContentType()); String origJPEGString = "/9j/4AAQSkZJRgABAQEAYABgAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDAAIBAQ" + "IBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAw" + "m3pFJat9Ekl5H/2Q=="; byte[] origJPEG = Base64.getDecoder().decode(origJPEGString); Object content = RawType.getValue(message.getAttachments().get(0).getContent()); if(!(content instanceof byte[]) || !Arrays.equals(origJPEG, (byte[])content)) { throw new AssertionError("Wrong content of attachments expected:" + origJPEG + " but was:" + content); assertEquals("Wrong fileName of attachments", "alf.jpg", message.getAttachments().get(0).getFileName()); assertEquals("Wrong fileName of attachments", null, message.getAttachments().get(0).getContentFromFile());
public static String formatToFileNew(Message message, String transport) { return "================ " + new Date() + " ======= [" + transport + "]\n" + message.debugDump() + "\n\n"; }
protected void assertSingleDummyTransportMessageContaining(String name, String expectedSubstring) { List<Message> messages = dummyTransport.getMessages("dummy:" + name); assertNotNull("No messages recorded in dummy transport '" + name + "'", messages); if (messages.size() != 1) { fail("Invalid number of messages recorded in dummy transport '" + name + "', expected: 1, actual: "+messages.size()); } Message message = messages.get(0); assertTrue("Notifier "+name+" message body does not contain text: " + expectedSubstring + ", it is:\n" + message.getBody(), message.getBody().contains(expectedSubstring)); }
assertEquals("Wrong # of attachments", 1, message.getAttachments().size()); assertEquals("Wrong contentType of attachment", "text/plain", message.getAttachments().get(0).getContentType()); Object content = RawType.getValue(message.getAttachments().get(0).getContent()); assertEquals("Wrong content of attachments", "Hello world", content); assertEquals("Wrong fileName of attachments", "plain.txt", message.getAttachments().get(0).getFileName()); assertEquals("Wrong fileName of attachments", null, message.getAttachments().get(0).getContentFromFile());
protected void assertHasDummyTransportMessage(String name, String expectedBody) { List<Message> messages = dummyTransport.getMessages("dummy:" + name); assertNotNull("No messages recorded in dummy transport '" + name + "'", messages); for (Message message: messages) { if (expectedBody.equals(message.getBody())) { return; } } fail("Notifier "+name+" message body " + expectedBody + " not found"); }
protected void assertSingleDummyTransportMessage(String name, String expectedBody) { List<Message> messages = dummyTransport.getMessages("dummy:" + name); assertNotNull("No messages recorded in dummy transport '" + name + "'", messages); if (messages.size() != 1) { fail("Invalid number of messages recorded in dummy transport '" + name + "', expected: 1, actual: "+messages.size()); } Message message = messages.get(0); assertEquals("Unexpected notifier "+name+" message body", expectedBody, message.getBody()); }