1   package test.atlassian.mail.server.managers;
2   
3   import com.atlassian.mail.server.managers.XMLMailServerManager;
4   import com.atlassian.mail.server.PopMailServer;
5   import com.atlassian.mail.server.SMTPMailServer;
6   import com.atlassian.mail.server.impl.SMTPMailServerImpl;
7   import com.atlassian.mail.MailException;
8   
9   import junit.framework.TestCase;
10  
11  import java.util.Collections;
12  import java.util.HashMap;
13  import java.util.List;
14  import java.util.Map;
15  
16  public class TestXMLMailServerManager extends TestCase
17  {
18      public void testMailServers() throws MailException
19      {
20          XMLMailServerManager sm = new XMLMailServerManager();
21          sm.init(Collections.EMPTY_MAP);
22          assertEquals("mail-servers.xml", sm.getConfigFile());
23  
24          assertEquals(0, sm.getPopMailServers().size());
25          assertEquals(1, sm.getSmtpMailServers().size());
26  
27          SMTPMailServer smtpserver = sm.getDefaultSMTPMailServer();
28          assertEquals("smtptwo", smtpserver.getName());
29          assertNull(smtpserver.getHostname());
30          assertEquals("java:comp/env/Mail", smtpserver.getJndiLocation());
31          assertEquals(1, smtpserver.getId().longValue());
32      }
33  
34      public void testTestMailServers() throws MailException
35      {
36          XMLMailServerManager sm = new XMLMailServerManager();
37          sm.init(toMap("config-file", "test-mail-servers.xml"));
38          assertEquals("test-mail-servers.xml", sm.getConfigFile());
39  
40          assertEquals(1, sm.getPopMailServers().size());
41          PopMailServer popserver = sm.getDefaultPopMailServer();
42          assertEquals("defpop", popserver.getName());
43          assertEquals("mail.atlassian.com", popserver.getHostname());
44          assertEquals("foo", popserver.getUsername());
45          assertEquals("bar", popserver.getPassword());
46          assertEquals("The default pop server.", popserver.getDescription());
47          assertEquals(new Long(2), popserver.getId());
48          assertEquals(20000, popserver.getTimeout());
49  
50          assertEquals(1, sm.getSmtpMailServers().size());
51          SMTPMailServer smtpserver = sm.getDefaultSMTPMailServer();
52          assertEquals("defsmtp", smtpserver.getName());
53          assertEquals("mail.atlassian.com", smtpserver.getHostname());
54          assertEquals("foo@atlassian.com", smtpserver.getDefaultFrom());
55          assertEquals(new Long(1), smtpserver.getId());
56          assertEquals(15000, smtpserver.getTimeout());
57      }
58  
59      public void testDeleteMailServer() throws MailException
60      {
61          // load two servers into the manager
62          XMLMailServerManager sm = new XMLMailServerManager();
63          sm.init(toMap("config-file", "test-mail-servers.xml"));
64  
65          // delete the smtp server
66          List smtpMailServers = sm.getSmtpMailServers();
67          assertEquals(1, smtpMailServers.size());
68          SMTPMailServer s = (SMTPMailServer) smtpMailServers.get(0);
69          sm.delete(s.getId());
70  
71          assertEquals(0, sm.getSmtpMailServers().size());
72  
73          // try removing a false id
74          try
75          {
76              sm.delete(new Long(999));
77              fail();
78          }
79          catch (Exception e)
80          {
81  
82          }
83      }
84  
85      public void testUpdateMailServer() throws MailException
86      {
87          // load two servers into the manager
88          XMLMailServerManager sm = new XMLMailServerManager();
89          sm.init(toMap("config-file", "test-mail-servers.xml"));
90  
91          // get the mail server loaded from XML
92          List smtpMailServers = sm.getSmtpMailServers();
93          assertEquals(1, smtpMailServers.size());
94          SMTPMailServer s = (SMTPMailServer) smtpMailServers.get(0);
95  
96          // update it
97          s.setDefaultFrom("dave@atlassian");
98          s.setHostname("testhostname");
99  
100         // update it in XMLMailServerManager
101         Long id = s.getId();
102         sm.update(s);
103 
104         // get it back from the XMLMailServerManager and check for changed attributes
105         SMTPMailServer updatedServer = (SMTPMailServer) sm.getMailServer(id);
106         assertEquals("dave@atlassian", updatedServer.getDefaultFrom());
107         assertEquals("testhostname", updatedServer.getHostname());
108     }
109 
110     public void testIdGenerationScheme() throws MailException
111     {
112         // load 2 servers from XML
113         XMLMailServerManager sm = new XMLMailServerManager();
114         sm.init(toMap("config-file", "test-mail-servers.xml"));
115 
116         // create a 3rd server
117         SMTPMailServer server1 = createSMTPMailServer("a");
118         assertEquals(3, sm.create(server1).longValue());
119 
120         // delete server 2
121         sm.delete(new Long(2));
122 
123         // create a 4th server
124         SMTPMailServer server4 = createSMTPMailServer("d");
125         assertEquals(4, sm.create(server4).longValue());
126     }
127 
128     private SMTPMailServer createSMTPMailServer(String name)
129     {
130         return new SMTPMailServerImpl(null, name, null, null, null, false, null, null, null);
131     }
132 
133     private Map toMap(final String key, final Object value)
134     {
135         Map map = new HashMap();
136         map.put(key,value);
137         return map;
138     }
139 }