Merged DEV to HEAD

48848: ALF-18520: Mails subsystem fails with Nullpointer during initialization
          If option is set to send test message on mail subsystem init then do it on behalf of System user.
          During getFrom field calculation if there is no current user then send mail from default address
          like it is System user. Case to unit test was added. 
   Reformatted MailActionExecuterTest


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@48866 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley 2013-04-05 10:57:33 +00:00
parent d542afaa5c
commit 0bc61d6d35
2 changed files with 204 additions and 175 deletions

View File

@ -38,6 +38,8 @@ import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.ParameterDefinitionImpl;
import org.alfresco.repo.admin.SysAdminParams;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.template.DateCompareMethod;
import org.alfresco.repo.template.HasAspectMethod;
import org.alfresco.repo.template.I18NMessageMethod;
@ -388,6 +390,10 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
super.init();
if (sendTestMessage && testMessageTo != null)
{
AuthenticationUtil.runAs(new RunAsWork<Object>()
{
public Object doWork() throws Exception
{
Map<String, Serializable> params = new HashMap<String, Serializable>();
params.put(PARAM_TO, testMessageTo);
@ -396,6 +402,9 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
Action ruleAction = serviceRegistry.getActionService().createAction(NAME, params);
executeImpl(ruleAction, null);
return null;
}
}, AuthenticationUtil.getSystemUserName());
}
}
@ -926,7 +935,7 @@ public class MailActionExecuter extends ActionExecuterAbstractBase
if (! authService.isCurrentUserTheSystemUser())
{
String currentUserName = authService.getCurrentUserName();
if (personExists(currentUserName))
if (currentUserName != null && personExists(currentUserName))
{
fromPersonName = currentUserName;
locale = getLocaleForUser(fromPersonName);

View File

@ -28,8 +28,6 @@ import java.util.Map;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import junit.framework.Assert;
import org.alfresco.repo.management.subsystems.ApplicationContextFactory;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.service.cmr.action.Action;
@ -38,6 +36,7 @@ import org.alfresco.service.cmr.preference.PreferenceService;
import org.alfresco.util.test.junitrules.AlfrescoPerson;
import org.alfresco.util.test.junitrules.ApplicationContextInit;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
@ -164,4 +163,25 @@ public class MailActionExecuterTest {
Assert.assertEquals("G'Day 01/01/1970", (String)message.getContent());
}
@Test public void testSendingTestMessageWithNoCurrentUser()
{
try
{
// run with no current user
AuthenticationUtil.clearCurrentSecurityContext();
Action mailAction = ACTION_SERVICE.createAction(MailActionExecuter.NAME);
mailAction.setParameterValue(MailActionExecuter.PARAM_TO, "some.body@eaxmple.com");
mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT, "Testing");
mailAction.setParameterValue(MailActionExecuter.PARAM_TEXT, "This is a test message.");
ACTION_EXECUTER.executeImpl(mailAction, null);
}
finally
{
// restore system user as current user
AuthenticationUtil.setRunAsUserSystem();
}
}
}