r500483 | eross | 2007-01-26 23:28:04 -0600 (Fri, 26 Jan 2007) | 1 line

Bug 37282 - Add real unit test for SyslogAppender, fix and test for file descriptor leak

Index: src/java/org/apache/log4j/helpers/SyslogWriter.java
===================================================================
113d112
<
128a128,130
>   /**
>    * Closes the datagram socket.
>    */
129a132
>     ds.close();
130a134
>
Index: src/java/org/apache/log4j/net/SyslogAppender.java
===================================================================
128d127
<   //SyslogTracerPrintWriter stp;
130,133d128
<   private long now = -1;
<   private Date date = new Date();
<   private StringBuffer timestamp = new StringBuffer();
<   private FieldPosition pos = new FieldPosition(0);
164c159,160
<    * Release any resources held by this SyslogAppender.
---
>    * Release resources held by this SyslogAppender,
>    * including the datagram socket.
169,172c165
<
<     // A SyslogWriter is UDP based and needs no opening. Hence, it
<     // can't be closed. We just unset the variables here.
<     sw = null;
---
>     sw.close();
338,347c331,333
<   void fillInTimestamp() throws IOException {
<     long n = System.currentTimeMillis();
<     n -= (n & 1000);
<
<     if ((n != now) || (timestamp.length() == 0)) {
<       now = n;
<       date.setTime(n);
<       // erase any previous value of the timestamp
<       timestamp.setLength(0);
<       sdf.format(date, timestamp, pos);
---
>   private void writeTimestamp() throws IOException {
>     StringBuffer timestamp = new StringBuffer();
>     sdf.format(new Date(), timestamp, new FieldPosition(0));
353d338
<     }
357c342
<   void writeInitialParts(LoggingEvent event) throws IOException {
---
> private void writeInitialParts(LoggingEvent event) throws IOException {
362c347
<     fillInTimestamp();
---
>     writeTimestamp();
Index: tests/src/java/org/apache/log4j/net/SyslogAppenderTest.java
===================================================================
18a19,25
> import java.io.IOException;
> import java.net.DatagramPacket;
> import java.net.DatagramSocket;
> import java.net.ServerSocket;
> import java.net.SocketException;
> import java.util.StringTokenizer;
>
26a34,35
> import org.apache.log4j.helpers.SyslogWriter;
> import org.apache.log4j.spi.LoggingEvent;
389d397
<
396a405,441
>
>   public void testActualLogging() throws IOException {
>     DatagramSocket ds = new DatagramSocket();
>     ds.setSoTimeout(10);
>     SyslogAppender appender = new SyslogAppender();
>     appender.setSyslogHost("localhost:" + ds.getLocalPort());
>     appender.setName("name");
>     appender.setLayout(new PatternLayout("%l %m"));
>     appender.activateOptions();
>
>     Logger l = Logger.getRootLogger();
>     l.addAppender(appender);
>     l.info("greetings");
>     DatagramPacket p = new DatagramPacket(new byte[1000], 0, 1000);
>     ds.receive(p);
>     String s = new String(p.getData(), 0, p.getLength());
>     StringTokenizer st = new StringTokenizer(s, "<>() ");
>     assertEquals("14", st.nextToken());
>     assertEquals(3, st.nextToken().length());
>     st.nextToken(); // date
>     st.nextToken(); // time
>     assertEquals(appender.getLocalHostname(), st.nextToken());
> assertEquals(getClass().getName() + ".testActualLogging", st.nextToken());
>     st.nextToken(); // this filename:line number
>     assertEquals("greetings", st.nextToken());
>     ds.close();
>   }
>
>   public void testLeak() throws IOException {
>     DatagramSocket ds = new DatagramSocket();
>     for (int i = 0; i < 100; i++) {
> SyslogWriter sw = new SyslogWriter("localhost:" + ds.getLocalPort());
>       sw.close();
>     }
>     ds.close();
>   }
>


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to