| /* |
| * Copyright 2014 The Apache Software Foundation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.juddi.v3.tck; |
| |
| import java.io.BufferedInputStream; |
| import java.io.InputStream; |
| import java.util.Enumeration; |
| import java.util.Properties; |
| import javax.mail.Flags; |
| import javax.mail.Folder; |
| import javax.mail.Message; |
| import javax.mail.Session; |
| import javax.mail.Store; |
| import javax.mail.internet.MimeMessage; |
| import org.apache.commons.codec.net.QuotedPrintableCodec; |
| import org.apache.commons.configuration.ConfigurationException; |
| import org.apache.commons.mail.util.MimeMessageParser; |
| import org.junit.AfterClass; |
| import org.junit.BeforeClass; |
| |
| /** |
| * |
| * @author Alex O'Ree |
| */ |
| public class UDDI_090_Smtp_ExternalTest extends UDDI_090_SubscriptionListenerIntegrationBase { |
| |
| public UDDI_090_Smtp_ExternalTest(){ |
| super(); |
| } |
| @AfterClass |
| public static void stop() throws ConfigurationException { |
| if (!TckPublisher.isEnabled()) return; |
| stopManager(); |
| |
| } |
| |
| @BeforeClass |
| public static void start() throws Exception { |
| if (!TckPublisher.isEnabled()) return; |
| startManager(); |
| email = TckPublisher.getProperties().getProperty("mail.pop3.to"); |
| } |
| |
| static String email = TckPublisher.getProperties().getProperty("mail.pop3.to"); |
| |
| @Override |
| public boolean verifyDelivery(String findMe) { |
| logger.info("Waiting " + TckPublisher.getSubscriptionTimeout() + " seconds for delivery, searching for " + findMe); |
| boolean received = false; |
| for (int i = 0; i < TckPublisher.getSubscriptionTimeout(); i++) { |
| try { |
| Thread.sleep(1000); |
| } catch (InterruptedException ex) { |
| } |
| System.out.print("."); |
| if (fetchMail(findMe) > 0) { |
| logger.info("Received Email Notification"); |
| received = true; |
| break; |
| } |
| } |
| return received; |
| } |
| |
| @Override |
| public void reset() { |
| |
| } |
| |
| @Override |
| public String getXMLLocationOfServiceForDelivery() { |
| return TckSubscriptionListener.LISTENER_SMTP_SERVICE_EXTERNAL_XML; |
| } |
| |
| @Override |
| public String getTransport() { |
| return "SMTP"; |
| } |
| |
| @Override |
| public int getPort() { |
| return 0; |
| } |
| |
| @Override |
| public String getHostame() { |
| return TckPublisher.getProperties().getProperty("mail.pop3.to"); |
| } |
| |
| /** |
| * gets all current messages from the mail server and returns the number |
| * of messages containing the string, messages containing the string are |
| * deleted from the mail server String is the body of each message |
| * |
| * @return number of matching and deleted messages |
| * @param contains a string to search for |
| */ |
| private static int fetchMail(String contains) { |
| |
| //final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; |
| |
| /* Set the mail properties */ |
| Properties properties = TckPublisher.getProperties(); |
| // Set manual Properties |
| |
| int found = 0; |
| Session session = Session.getDefaultInstance(properties, null); |
| Store store = null; |
| try { |
| store = session.getStore("pop3"); |
| |
| store.connect(properties.getProperty("mail.pop3.host"), Integer.parseInt(properties.getProperty("mail.pop3.port", "110")), properties.getProperty("mail.pop3.username"), properties.getProperty("mail.pop3.password")); |
| /* Mention the folder name which you want to read. */ |
| // inbox = store.getDefaultFolder(); |
| // inbox = inbox.getFolder("INBOX"); |
| Folder inbox = store.getFolder("INBOX"); |
| |
| /* Open the inbox using store. */ |
| inbox.open(Folder.READ_WRITE); |
| |
| Message messages[] = inbox.getMessages(); |
| |
| for (int i = 0; i < messages.length; i++) { |
| |
| MimeMessageParser p = new MimeMessageParser(new MimeMessage(session, messages[i].getInputStream())); |
| Enumeration allHeaders = p.getMimeMessage().getAllHeaders(); |
| while (allHeaders.hasMoreElements()) { |
| Object j = allHeaders.nextElement(); |
| if (j instanceof javax.mail.Header) { |
| javax.mail.Header msg = (javax.mail.Header) j; |
| logger.info("XML as message header is " + msg.getValue()); |
| if (msg.getValue().contains(contains)) { |
| //found it |
| messages[i].setFlag(Flags.Flag.DELETED, true); |
| found++; |
| } |
| } |
| } |
| for (int k = 0; k < p.getAttachmentList().size(); k++) { |
| InputStream is = p.getAttachmentList().get((k)).getInputStream(); |
| QuotedPrintableCodec qp = new QuotedPrintableCodec(); |
| // If "is" is not already buffered, wrap a BufferedInputStream |
| // around it. |
| if (!(is instanceof BufferedInputStream)) { |
| is = new BufferedInputStream(is); |
| } |
| int c; |
| StringBuilder sb = new StringBuilder(); |
| logger.info("Message : "); |
| while ((c = is.read()) != -1) { |
| sb.append(c); |
| System.out.write(c); |
| } |
| is.close(); |
| String decoded = qp.decode(sb.toString()); |
| logger.info("decode message is " + decoded); |
| if (decoded.contains(contains)) { |
| //found it |
| messages[i].setFlag(Flags.Flag.DELETED, true); |
| found++; |
| } |
| } |
| |
| } |
| inbox.close(true); |
| |
| } catch (Exception ex) { |
| ex.printStackTrace(); |
| } finally { |
| if (store != null) { |
| try { |
| store.close(); |
| } catch (Exception ex) { |
| } |
| } |
| } |
| return found; |
| } |
| |
| @Override |
| public String getSubscription1XML() { |
| return TckSubscriptionListener.SUBSCRIPTION_SMTP_XML; |
| } |
| |
| @Override |
| public String getSubscription2XML() { |
| return TckSubscriptionListener.SUBSCRIPTION2_SMTP_XML; |
| } |
| |
| @Override |
| public String getSubscription3XML() { |
| return TckSubscriptionListener.SUBSCRIPTION3_SMTP_XML; |
| } |
| |
| @Override |
| public String getSubscriptionKey1() { |
| return TckSubscriptionListener.SUBSCRIPTION_SMTP_KEY; |
| } |
| |
| @Override |
| public String getSubscriptionKey2() { |
| return TckSubscriptionListener.SUBSCRIPTION_SMTP_KEY; |
| } |
| |
| @Override |
| public String getSubscriptionKey3() { |
| return TckSubscriptionListener.SUBSCRIPTION_SMTP_KEY; |
| } |
| |
| @Override |
| public boolean IsEnabled() { |
| return TckPublisher.isSMTPEnabled(); |
| } |
| |
| |
| |
| } |