From 0fa945a7ed7194f2e667af723641f0441a30dcac Mon Sep 17 00:00:00 2001 From: Daryl <djr031@cs.bham.ac.uk> Date: Fri, 7 Sep 2012 16:40:39 +0800 Subject: [PATCH] Updated gmail plugin and unit test, removed unused class. --- .../simplex/SimplexTransportReader.java | 3 +- .../simplex/SimplexTransportWriter.java | 3 +- .../sf/briar/plugins/email/GmailPlugin.java | 212 +++++++++++------- .../email/GmailTransportConnectionReader.java | 33 --- ...PluginTester.java => GmailPluginTest.java} | 103 ++++----- 5 files changed, 181 insertions(+), 173 deletions(-) delete mode 100644 components/net/sf/briar/plugins/email/GmailTransportConnectionReader.java rename test/net/sf/briar/plugins/email/{GmailPluginTester.java => GmailPluginTest.java} (59%) diff --git a/api/net/sf/briar/api/plugins/simplex/SimplexTransportReader.java b/api/net/sf/briar/api/plugins/simplex/SimplexTransportReader.java index a71b1e8f79..5ffc0635c1 100644 --- a/api/net/sf/briar/api/plugins/simplex/SimplexTransportReader.java +++ b/api/net/sf/briar/api/plugins/simplex/SimplexTransportReader.java @@ -18,6 +18,7 @@ public interface SimplexTransportReader { * argument indicates whether the reader is being closed because of an * exception and the second argument indicates whether the connection was * recognised, which may affect how resources are disposed of. + * @throws IOException */ - void dispose(boolean exception, boolean recognised); + void dispose(boolean exception, boolean recognised) throws IOException; } diff --git a/api/net/sf/briar/api/plugins/simplex/SimplexTransportWriter.java b/api/net/sf/briar/api/plugins/simplex/SimplexTransportWriter.java index a6f55ed4c7..09e80a5cfa 100644 --- a/api/net/sf/briar/api/plugins/simplex/SimplexTransportWriter.java +++ b/api/net/sf/briar/api/plugins/simplex/SimplexTransportWriter.java @@ -25,6 +25,7 @@ public interface SimplexTransportWriter { * Closes the writer and disposes of any associated resources. The * argument indicates whether the writer is being closed because of an * exception, which may affect how resources are disposed of. + * @throws IOException */ - void dispose(boolean exception); + void dispose(boolean exception) throws IOException; } diff --git a/components/net/sf/briar/plugins/email/GmailPlugin.java b/components/net/sf/briar/plugins/email/GmailPlugin.java index 718b66bd74..323afd885d 100644 --- a/components/net/sf/briar/plugins/email/GmailPlugin.java +++ b/components/net/sf/briar/plugins/email/GmailPlugin.java @@ -1,5 +1,6 @@ package net.sf.briar.plugins.email; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -8,6 +9,11 @@ import java.util.Collection; import java.util.Map; import java.util.Properties; import java.util.concurrent.Executor; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.activation.DataHandler; +import javax.activation.DataSource; import javax.mail.Flags; import javax.mail.Flags.Flag; import javax.mail.Folder; @@ -19,8 +25,11 @@ import javax.mail.Session; import javax.mail.Store; import javax.mail.Transport; import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; import javax.mail.search.FlagTerm; +import javax.mail.util.ByteArrayDataSource; import javax.microedition.io.StreamConnection; import net.sf.briar.api.ContactId; @@ -44,7 +53,9 @@ public class GmailPlugin implements SimplexPlugin { private static final TransportId ID = new TransportId(TRANSPORT_ID); private final Executor pluginExecutor; private final SimplexPluginCallback callback; - // private static GmailTransportConnectionReader reader; + private static final Logger LOG = Logger.getLogger(GmailPlugin.class + .getName()); + // private static GmailTransportConnectionWriter writer; public GmailPlugin(Executor pluginExecutor, SimplexPluginCallback callback) { @@ -64,118 +75,100 @@ public class GmailPlugin implements SimplexPlugin { }); } - protected void checkUnreadEmails(Folder inbox) { + private void checkUnreadEmails(Folder inbox) { try { FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false); Message msg[] = inbox.search(ft); // System.out.println("Unread Messages: "+ msg.length); for (final Message message : msg) { - try { - callback.readerCreated(new SimplexTransportReader() { - - public InputStream getInputStream() throws IOException { - try { - return message.getInputStream(); - } catch (MessagingException e) { - e.printStackTrace(); - } - return null; + callback.readerCreated(new SimplexTransportReader() { + + public InputStream getInputStream() throws IOException { + try { + return message.getInputStream(); + } catch (MessagingException e) { + if (LOG.isLoggable(Level.WARNING)) + LOG.warning(e.toString()); } - - public void dispose(boolean exception, - boolean recognised) { - try { - message.setFlag(Flag.DELETED, recognised); - message.setFlag(Flag.SEEN, recognised); - } catch (MessagingException e) { - e.printStackTrace(); - } + return null; + } + + public void dispose(boolean exception, boolean recognised) + throws IOException { + try { + message.setFlag(Flag.DELETED, recognised); + message.setFlag(Flag.SEEN, recognised); + } catch (MessagingException e) { + if (LOG.isLoggable(Level.WARNING)) + LOG.warning(e.toString()); } - }); - - // This part for testing purposes only - System.out.println("DATE: " - + message.getSentDate().toString()); - System.out.println("FROM: " - + message.getFrom()[0].toString()); - System.out.println("SUBJECT: " - + message.getSubject().toString()); - System.out.println("CONTENT: " - + message.getContent().toString()); - System.out - .println("================================================="); + } + }); - } catch (Exception e) { - System.out.println("No Information"); - } } - } catch (MessagingException e) { - System.out.println(e.toString()); + if (LOG.isLoggable(Level.WARNING)) + LOG.warning(e.toString()); } } - protected void connectIMAP() { - Properties props = System.getProperties(); + private void connectIMAP() { + Properties props = new Properties(); props.setProperty("mail.store.protocol", "imaps"); final ArrayList<String> userPass = getAuthenticationDetails(callback .getConfig()); if (userPass != null) { try { - Session session = Session.getDefaultInstance(props, null); + Session session = Session.getInstance(props, null); Store store = session.getStore("imaps"); - synchronized (this) { - store.connect("imap.gmail.com", userPass.get(0), - userPass.get(1)); - } - + store.connect("imap.gmail.com", userPass.get(0), + userPass.get(1)); Folder inbox = store.getFolder("Inbox"); inbox.open(Folder.READ_ONLY); checkUnreadEmails(inbox); } catch (NoSuchProviderException e) { - System.out.println(e.toString()); - System.exit(1); + if (LOG.isLoggable(Level.WARNING)) + LOG.warning(e.toString()); } catch (MessagingException e) { - System.out.println(e.toString()); - System.exit(2); + if (LOG.isLoggable(Level.WARNING)) + LOG.warning(e.toString()); } } } - protected boolean connectSMTP(ContactId cid) { + public boolean connectSMTP(ContactId cid) { boolean sent = false; if (discoverContactEmail(cid) != null) { - Properties prop = new Properties(); - prop.put("mail.smtp.host", "smtp.gmail.com"); - prop.put("mail.smtp.socketFactory.port", "465"); - prop.put("mail.smtp.socketFactory.class", + Properties props = new Properties(); + props.put("mail.smtp.host", "smtp.gmail.com"); + props.put("mail.smtp.socketFactory.port", "465"); + props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); - prop.put("mail.smtp.auth", "true"); - prop.put("mail.smtp.port", "465"); + props.put("mail.smtp.auth", "true"); + props.put("mail.smtp.port", "465"); final ArrayList<String> userPass = getAuthenticationDetails(callback .getConfig()); if (userPass != null) { Session session; - synchronized (this) { - session = Session.getInstance(prop, - new javax.mail.Authenticator() { - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(userPass - .get(0), userPass.get(1)); - } - }); - } - // SimplexTransportWriter writer = createWriter(cid); + session = Session.getInstance(props, + new javax.mail.Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(userPass + .get(0), userPass.get(1)); + } + }); + sent = sendMessage(session, cid); } } return sent; } - private synchronized boolean sendMessage(Session session, ContactId cid) { + private boolean sendMessage(Session session, ContactId cid) { boolean sent = false; + ByteArrayOutputStream outputStream = null; try { Message message = new MimeMessage(session); TransportProperties props = callback.getLocalProperties(); @@ -185,7 +178,41 @@ public class GmailPlugin implements SimplexPlugin { message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(discoverContactEmail(cid))); message.setSubject("Test Subject"); - message.setText("Test content"); + + outputStream = new ByteArrayOutputStream(); + + callback.writerCreated(cid, new SimplexTransportWriter() { + + public boolean shouldFlush() { + return false; + } + + public OutputStream getOutputStream() throws IOException { + return null; + } + + public long getCapacity() { + return 0; + } + + public void dispose(boolean exception) throws IOException { + + } + }); + + byte[] bytes = outputStream.toByteArray(); + DataSource dataSource = new ByteArrayDataSource(bytes, + "application/octet-stream"); + + MimeBodyPart messageBodyPart = new MimeBodyPart(); + messageBodyPart.setDataHandler(new DataHandler(dataSource)); + + MimeMultipart mimeMultipart = new MimeMultipart(); + mimeMultipart.addBodyPart(messageBodyPart); + + message.setContent(mimeMultipart); + + // message.setText("Test content"); Transport.send(message); @@ -193,6 +220,16 @@ public class GmailPlugin implements SimplexPlugin { return sent; } catch (MessagingException e) { return sent; + } finally { + if (null != outputStream) { + try { + outputStream.close(); + outputStream = null; + } catch (Exception e) { + if (LOG.isLoggable(Level.WARNING)) + LOG.warning(e.toString()); + } + } } } @@ -207,12 +244,12 @@ public class GmailPlugin implements SimplexPlugin { return false; } - public long getPollingInterval() throws UnsupportedOperationException { - return 0; + public long getPollingInterval() { + throw new UnsupportedOperationException(); } - public void poll(Collection<ContactId> connected) - throws UnsupportedOperationException { + public void poll(Collection<ContactId> connected) { + throw new UnsupportedOperationException(); } public boolean supportsInvitations() { @@ -238,7 +275,7 @@ public class GmailPlugin implements SimplexPlugin { } /* - * looks up the contact's email address given the contactID + * Looks up the contact's email address given the contactID * @param ContactId * @return String email */ @@ -247,8 +284,11 @@ public class GmailPlugin implements SimplexPlugin { Map<ContactId, TransportProperties> remote = callback .getRemoteProperties(); TransportProperties tp = remote.get(cid); - String address = tp.get("email"); - return address; + if (tp != null) { + String address = tp.get("email"); + return address; + } else + return null; } catch (Exception e) { return null; } @@ -262,24 +302,22 @@ public class GmailPlugin implements SimplexPlugin { return null; } - public SimplexTransportWriter sendInvitation(PseudoRandom r, long timeout) - throws UnsupportedOperationException { - return null; + public SimplexTransportWriter sendInvitation(PseudoRandom r, long timeout) { + throw new UnsupportedOperationException(); } - public SimplexTransportReader acceptInvitation(PseudoRandom r, long timeout) - throws UnsupportedOperationException { - return null; + public SimplexTransportReader acceptInvitation(PseudoRandom r, long timeout) { + throw new UnsupportedOperationException(); } public SimplexTransportWriter sendInvitationResponse(PseudoRandom r, - long timeout) throws UnsupportedOperationException { - return null; + long timeout) { + throw new UnsupportedOperationException(); } public SimplexTransportReader acceptInvitationResponse(PseudoRandom r, - long timeout) throws UnsupportedOperationException { - return null; + long timeout) { + throw new UnsupportedOperationException(); } } diff --git a/components/net/sf/briar/plugins/email/GmailTransportConnectionReader.java b/components/net/sf/briar/plugins/email/GmailTransportConnectionReader.java deleted file mode 100644 index 954678525f..0000000000 --- a/components/net/sf/briar/plugins/email/GmailTransportConnectionReader.java +++ /dev/null @@ -1,33 +0,0 @@ -package net.sf.briar.plugins.email; - -import java.io.IOException; -import java.io.InputStream; -import java.util.logging.Level; -import java.util.logging.Logger; - -import javax.microedition.io.StreamConnection; - -import net.sf.briar.api.plugins.simplex.SimplexTransportReader; - -public class GmailTransportConnectionReader implements SimplexTransportReader{ - - private static final Logger LOG = Logger.getLogger(GmailTransportConnectionReader.class.getName()); - private final StreamConnection stream; - - GmailTransportConnectionReader(StreamConnection stream) { - this.stream = stream; - } - - public InputStream getInputStream() throws IOException { - return stream.openInputStream(); - } - - public void dispose(boolean exception, boolean recognised) { - try { - stream.close(); - } catch(IOException e) { - if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString()); - } - } - -} diff --git a/test/net/sf/briar/plugins/email/GmailPluginTester.java b/test/net/sf/briar/plugins/email/GmailPluginTest.java similarity index 59% rename from test/net/sf/briar/plugins/email/GmailPluginTester.java rename to test/net/sf/briar/plugins/email/GmailPluginTest.java index 3db67819f8..cf5ddc8d55 100644 --- a/test/net/sf/briar/plugins/email/GmailPluginTester.java +++ b/test/net/sf/briar/plugins/email/GmailPluginTest.java @@ -1,13 +1,17 @@ package net.sf.briar.plugins.email; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; import java.io.IOException; +import java.io.OutputStream; +import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; import java.util.concurrent.Executors; +import net.sf.briar.BriarTestCase; import net.sf.briar.api.ContactId; import net.sf.briar.api.TransportConfig; import net.sf.briar.api.TransportProperties; @@ -15,6 +19,7 @@ import net.sf.briar.api.plugins.simplex.SimplexPluginCallback; import net.sf.briar.api.plugins.simplex.SimplexTransportReader; import net.sf.briar.api.plugins.simplex.SimplexTransportWriter; +import org.jmock.Mockery; import org.junit.Before; import org.junit.Test; @@ -23,104 +28,100 @@ import org.junit.Test; * and CONTACT1_EMAIL - (as recipient email address) */ -public class GmailPluginTester { +public class GmailPluginTest { + + SimplexPluginCallback callback; + TransportProperties local, props1; + TransportConfig config; + ContactId test1; + Map<ContactId, TransportProperties> map = new HashMap<ContactId, TransportProperties>(); -SimplexPluginCallback callback; -TransportProperties local, props1; -TransportConfig config; -ContactId test1; -Map<ContactId,TransportProperties> map = new HashMap<ContactId, TransportProperties>(); - @Before - public void setup() - { + public void setup() { local = new TransportProperties(); - local.put("email",System.getenv("USER_GMAIL_ADDRESS")); - + local.put("email", System.getenv("USER_GMAIL_ADDRESS")); + config = new TransportConfig(); config.put("username", System.getenv("GMAIL_USERNAME")); config.put("password", System.getenv("GMAIL_PASSWORD")); - + props1 = new TransportProperties(); props1.put("email", System.getenv("CONTACT1_EMAIL")); test1 = new ContactId(12); map.put(test1, props1); - assertEquals(1,map.size()); - + assertEquals(1, map.size()); + callback = new SimplexPluginCallback() { - - public void showMessage(String... message) { - - } - + + public void showMessage(String... message) {} + public boolean showConfirmationMessage(String... message) { return false; } - + public int showChoice(String[] options, String... message) { return 0; } - + public void setLocalProperties(TransportProperties p) { local = p; } - + public void setConfig(TransportConfig c) { config = c; } - + public Map<ContactId, TransportProperties> getRemoteProperties() { return map; } - + public TransportProperties getLocalProperties() { return local; } - + public TransportConfig getConfig() { return config; } - + public void writerCreated(ContactId c, SimplexTransportWriter w) {} - + public void readerCreated(SimplexTransportReader r) {} }; - - callback.setLocalProperties(local); + + callback.setLocalProperties(local); callback.setConfig(config); } - - @Test - public void testGetID() - { - GmailPlugin pluginTest = new GmailPlugin(Executors.newSingleThreadExecutor(), callback); - assertArrayEquals(GmailPlugin.TRANSPORT_ID,pluginTest.getId().getBytes()); - } - + @Test - public void testPluginFactoryCreation() - { - GmailPluginFactory plugin = new GmailPluginFactory(); - plugin.createPlugin(Executors.newSingleThreadExecutor(), callback); + public void testGetID() throws IOException { + GmailPlugin pluginTest = new GmailPlugin( + Executors.newSingleThreadExecutor(), callback); + assertArrayEquals(GmailPlugin.TRANSPORT_ID, pluginTest.getId() + .getBytes()); } - + @Test - public void testGmailPluginIMAP() - { - GmailPlugin pluginTest = new GmailPlugin(Executors.newSingleThreadExecutor(), callback); + public void testGmailPluginIMAP() throws IOException { + GmailPlugin pluginTest = new GmailPlugin( + Executors.newSingleThreadExecutor(), callback); try { pluginTest.start(); } catch (IOException e) { System.out.println("IO Exception got caught"); + fail(); + } + finally{ + pluginTest.stop(); } } - + @Test - public void testGmailSMTP() - { - GmailPlugin pluginTest = new GmailPlugin(Executors.newSingleThreadExecutor(), callback); + public void testGmailSMTP() throws IOException { + GmailPlugin pluginTest = new GmailPlugin( + Executors.newSingleThreadExecutor(), callback); assertEquals(true, pluginTest.connectSMTP(test1)); assertEquals(false, pluginTest.connectSMTP(new ContactId(7))); + pluginTest.stop(); } } -- GitLab