diff --git a/pom.xml b/pom.xml index 7ce0c44f59d0551e626193594c84f8f6e634b1af..d6a247b64fd1cf3b332381acb40557a5b3932500 100644 --- a/pom.xml +++ b/pom.xml @@ -2492,6 +2492,12 @@ <version>0.5.2</version> <scope>test</scope> </dependency> + <dependency> + <groupId>com.github.kirviq</groupId> + <artifactId>dumbster</artifactId> + <version>1.7.1</version> + <scope>test</scope> + </dependency> <!-- Start test dependencies for Arquillian and Selenium --> <dependency> diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java index 39631adcfa745b0502fc09e782e92f0359797e73..cd5f22a5d083e079fb8dba9f421b6bc8b5ed9910 100644 --- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java +++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java @@ -1782,9 +1782,8 @@ public class MailManagerImpl implements MailManager, InitializingBean { } try{ - if(Settings.isJUnitTest()) { - //we want not send really e-mails - } else if (mailModule.isMailHostEnabled() && result.getReturnCode() == MailerResult.OK) { + System.out.println("mailModule isMailHostEnabled: " + mailModule.isMailHostEnabled() + " " + WebappHelper.getMailConfig("mailhost")); + if (mailModule.isMailHostEnabled() && result.getReturnCode() == MailerResult.OK) { // now send the mail if(Settings.isDebuging()) { logMessage(msg); diff --git a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java index 49ac55841d6101d8e213175b8b7d6a65600bedd8..05e7caab87a5f384ae25a440f3c8a45a19ee5dc9 100644 --- a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java +++ b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java @@ -54,6 +54,8 @@ import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; import org.springframework.beans.factory.annotation.Autowired; +import com.dumbster.smtp.SmtpMessage; + /** * * Initial date: 30.11.2012<br> @@ -266,7 +268,7 @@ public class MailManagerTest extends OlatTestCase { // sleep until threads should have terminated/excepted try { - Thread.sleep(30000);// eat all JMS events + sleep(30000);// eat all JMS events finishCount.await(120, TimeUnit.SECONDS); } catch (InterruptedException e) { log.error("", e); @@ -276,6 +278,24 @@ public class MailManagerTest extends OlatTestCase { assertTrue("It throws an exception in test", exceptionHolder.isEmpty()); assertEquals("Thread(s) did not finish", NUM_OF_THREADS, statusList.size()); } + + @Test + public void sendExternMessage() { + Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("mailman-1"); + + MailBundle bundle = new MailBundle(); + bundle.setToId(id); + bundle.setContent("Hello", "Hello world"); + + MailerResult result = new MailerResult(); + mailManager.sendExternMessage(bundle, result, false); + + List<SmtpMessage> messages = getSmtpServer().getReceivedEmails(); + Assert.assertFalse(messages.isEmpty()); + + SmtpMessage message = messages.get(0); + Assert.assertEquals(id.getUser().getEmail(), message.getHeaderValue("To")); + } @Test public void testFromHeaderOverride() throws MessagingException { diff --git a/src/test/java/org/olat/selenium/CourseTest.java b/src/test/java/org/olat/selenium/CourseTest.java index 0d29797c9512508db4958441567c0b0fc091f2f8..73adb855d5e99db4fcfc05359a18cc5e282c497a 100644 --- a/src/test/java/org/olat/selenium/CourseTest.java +++ b/src/test/java/org/olat/selenium/CourseTest.java @@ -250,7 +250,6 @@ public class CourseTest extends Deployments { //from description editor, back to details and launch the course settings .assertOnInfos(); - OOGraphene.closeErrorBox(browser);//close mail error settings .back(); diff --git a/src/test/java/org/olat/selenium/Deployments.java b/src/test/java/org/olat/selenium/Deployments.java index a5116a41f670bb74e0c576163de876bcceba6447..f8f41cb125812ddfe549884c9eb8257616a4bdb1 100644 --- a/src/test/java/org/olat/selenium/Deployments.java +++ b/src/test/java/org/olat/selenium/Deployments.java @@ -19,11 +19,20 @@ */ package org.olat.selenium; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + import org.eu.ingwar.tools.arquillian.extension.suite.annotations.ArquillianSuiteDeployment; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.After; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; import org.olat.test.ArquillianDeployments; +import com.dumbster.smtp.SimpleSmtpServer; + /** * * Initial date: 12 nov. 2017<br> @@ -33,9 +42,36 @@ import org.olat.test.ArquillianDeployments; @ArquillianSuiteDeployment public class Deployments { + private static final OLog log = Tracing.createLoggerFor(Deployments.class); + + private static SimpleSmtpServer dumbster; + static { + try { + dumbster = SimpleSmtpServer.start(SimpleSmtpServer.AUTO_SMTP_PORT); + } catch (IOException e) { + log.error("", e); + } + } + @Deployment(testable = false) public static WebArchive createDeployment() { - return ArquillianDeployments.createDeployment(); + Map<String,String> mailSettings = new HashMap<>(); + if(dumbster != null) { + mailSettings.put("smtp.port", String.valueOf(dumbster.getPort())); + mailSettings.put("smtp.host", "localhost"); + log.info("Simple smtp server started on port: " + dumbster.getPort()); + } + return ArquillianDeployments.createDeployment(mailSettings); + } + + @After + public void afterTest() { + if(dumbster != null) { + dumbster.reset(); + } + } + + protected SimpleSmtpServer getSmtpServer() { + return dumbster; } - } diff --git a/src/test/java/org/olat/selenium/PortfolioV2Test.java b/src/test/java/org/olat/selenium/PortfolioV2Test.java index c67831c8e189bd47dc7302f3f89a90d881abb8f5..88e9f8d7cdfeae068bd47c2f8130c1071e22bffb 100644 --- a/src/test/java/org/olat/selenium/PortfolioV2Test.java +++ b/src/test/java/org/olat/selenium/PortfolioV2Test.java @@ -23,6 +23,7 @@ import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; +import java.util.List; import java.util.UUID; import org.jboss.arquillian.container.test.api.RunAsClient; @@ -31,6 +32,7 @@ import org.jboss.arquillian.graphene.page.InitialPage; import org.jboss.arquillian.graphene.page.Page; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; +import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.olat.selenium.page.LoginPage; @@ -62,6 +64,8 @@ import org.olat.test.rest.UserRestClient; import org.olat.user.restapi.UserVO; import org.openqa.selenium.WebDriver; +import com.dumbster.smtp.SmtpMessage; + /** * * Suite of test for the e-Portfolio version 2.0 @@ -565,10 +569,11 @@ public class PortfolioV2Test extends Deployments { .createEntry("3. Page", 1) .assertOnPage("3. Page"); + String invitation = "c.l." + UUID.randomUUID() + "@frentix.com"; BinderPublicationPage binderPublish = binder .selectPublish() .openAccessMenu() - .addInvitation("c.l." + UUID.randomUUID() + "@frentix.com") + .addInvitation(invitation) .fillInvitation("Clara", "Vigne") .fillAccessRights("3. Page", Boolean.TRUE); String url = binderPublish.getInvitationURL(); @@ -595,6 +600,13 @@ public class PortfolioV2Test extends Deployments { .assertOnPageInEntries("3. Page") .selectEntryInEntries("3. Page") .assertOnPage("3. Page"); + + // check mail really send + List<SmtpMessage> emails = getSmtpServer().getReceivedEmails(); + Assert.assertNotNull(emails); + Assert.assertEquals(1, emails.size()); + SmtpMessage email = emails.get(0); + Assert.assertEquals(invitation + ":;", email.getHeaderValue("To")); } diff --git a/src/test/java/org/olat/selenium/page/portfolio/BinderPublicationPage.java b/src/test/java/org/olat/selenium/page/portfolio/BinderPublicationPage.java index e4701077c500ebaa7c42e0775bf9ac21d3740abc..acf65dec89e390bb96e7ec9c56d2ea484d1f6046 100644 --- a/src/test/java/org/olat/selenium/page/portfolio/BinderPublicationPage.java +++ b/src/test/java/org/olat/selenium/page/portfolio/BinderPublicationPage.java @@ -101,9 +101,6 @@ public class BinderPublicationPage { By submitBy = By.cssSelector(".o_sel_pf_invitation_button_group button.btn-primary"); browser.findElement(submitBy).click(); OOGraphene.waitBusy(browser); - - //close error smtp - OOGraphene.closeErrorBox(browser); return this; } } diff --git a/src/test/java/org/olat/test/OlatTestCase.java b/src/test/java/org/olat/test/OlatTestCase.java index 2b1e249e7438e3bbd519efe56c00266890696e83..390f23d12109126694fa2a361fe850d1c2e6397f 100644 --- a/src/test/java/org/olat/test/OlatTestCase.java +++ b/src/test/java/org/olat/test/OlatTestCase.java @@ -42,12 +42,15 @@ import org.olat.core.commons.persistence.DBFactory; import org.olat.core.helpers.Settings; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.WebappHelper; import org.olat.core.util.event.FrameworkStartupEventChannel; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; +import com.dumbster.smtp.SimpleSmtpServer; + /** * Initial Date: 25.10.2002 * @@ -66,6 +69,8 @@ public abstract class OlatTestCase extends AbstractJUnit4SpringContextTests { private static boolean oracleConfigured = false; private static boolean started = false; + private SimpleSmtpServer dumbster; + @Rule public TestName currentTestName = new TestName(); /** @@ -91,6 +96,15 @@ public abstract class OlatTestCase extends AbstractJUnit4SpringContextTests { return; } + try { + dumbster = SimpleSmtpServer.start(SimpleSmtpServer.AUTO_SMTP_PORT); + log.info("Simple smtp server started on port: " + dumbster.getPort()); + WebappHelper.setMailConfig("mailport", String.valueOf(dumbster.getPort())); + WebappHelper.setMailConfig("mailhost", "localhost"); + } catch (IOException e) { + log.error("", e); + } + FrameworkStartupEventChannel.fireEvent(); String dbVendor = DBFactory.getInstance().getDbVendor(); @@ -120,6 +134,10 @@ public abstract class OlatTestCase extends AbstractJUnit4SpringContextTests { e1.printStackTrace(); } } + + if(dumbster != null) { + dumbster.reset(); + } } @SuppressWarnings("unchecked") @@ -159,7 +177,7 @@ public abstract class OlatTestCase extends AbstractJUnit4SpringContextTests { result.set(false); } DBFactory.getInstance().commitAndCloseSession(); - Thread.sleep(100); + sleep(100); } } catch (Exception e) { log.error("", e); @@ -186,6 +204,10 @@ public abstract class OlatTestCase extends AbstractJUnit4SpringContextTests { e.printStackTrace(); } } + + protected SimpleSmtpServer getSmtpServer() { + return dumbster; + } /** * @return True if the test run on PostreSQL