/* * $Id$ * $URL$ */ package org.subethamail.load; import java.io.File; import java.util.Properties; import java.util.logging.Level; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Message.RecipientType; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; 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 lombok.extern.java.Log; import org.subethamail.core.admin.i.Eegor; import com.caucho.hessian.client.HessianProxyFactory; /** * Thread which creates a ton of SMTP messages and delivers them to a SMTP server. * * @author Jeff Schnitzer */ @Log public class LoadGenerator extends Thread { /** */ InternetAddress recipient; Session mailSession; /** */ MimeMessage message; /** * Attachment can be null for a simple text body */ public LoadGenerator(InternetAddress sender, InternetAddress recipient, File attachment) throws MessagingException { this.recipient = recipient; Properties props = new Properties(); props.setProperty("mail.smtp.host", "localhost"); props.setProperty("mail.smtp.port", "2500"); this.mailSession = Session.getDefaultInstance(props); this.message = new MimeMessage(this.mailSession); this.message.setSubject("load testing"); this.message.setFrom(sender); this.message.setRecipient(RecipientType.TO, this.recipient); if (attachment == null) { this.message.setText("Blah blah blah blah blah this is a boring load test message body"); } else { MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("Blah blah blah blah"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Part two is attachment messageBodyPart = new MimeBodyPart(); DataSource source = new FileDataSource(attachment); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(attachment.toString()); multipart.addBodyPart(messageBodyPart); // Put parts in message this.message.setContent(multipart); } } /** */ public void run() { while (true) { try { //System.out.println("Sending message"); Transport.send(this.message); //Thread.sleep(1); } //catch (InterruptedException ex) { throw new RuntimeException(ex); } catch (MessagingException ex) { log.log(Level.FINE,"Exception sending mail", ex); } } } /** * Create a thread to listen for messages coming from threads generating load. * * Note: This requires SubEtha running on port 2500! */ public static void main(String[] args) throws Exception { if (args.length < 2 || args.length > 3) { System.err.println("Usage: org.subethamail.loadtest.LoadGenerator from@address to@address [attachment]"); } else { InternetAddress sender = new InternetAddress(args[0]); InternetAddress recipient = new InternetAddress(args[1]); File attachment = (args.length == 3) ? new File(args[2]) : null; HessianProxyFactory fact = new HessianProxyFactory(); fact.setOverloadEnabled(true); fact.setUser("root@localhost"); fact.setPassword("password"); String url = "http://localhost:8080/se/api/" + Eegor.class.getSimpleName(); Eegor eegor = null; try { System.out.println("Creating eegor: " + url); eegor = (Eegor)fact.create(Eegor.class, url); System.out.println("Creating wiser listener on port 2525!"); //this will start the listening wiser instance at port 2525 Thread countingThread = new Thread(new LoadTester("localhost",2525)); countingThread.start(); System.out.println("Enabling test mode!"); eegor.enableTestMode("localhost:2525"); for (int i = 0; i < 50; i++) { System.out.println("Create LoadGen Thread!"); (new Thread(new LoadGenerator(sender, recipient, attachment))).start(); } System.out.println("countingThread.join() -- waiting for end"); countingThread.join(); } finally { System.out.println("Disabling test mode!"); if (eegor != null) eegor.disableTestMode(); } } } }