<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<title>TelnetAppenderTest xref</title>
<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
</head>
<body>
<pre>

<a name="1" href="#1">1</a>   <em class="jxr_comment">/*</em>
<a name="2" href="#2">2</a>   <em class="jxr_comment"> * Licensed to the Apache Software Foundation (ASF) under one or more</em>
<a name="3" href="#3">3</a>   <em class="jxr_comment"> * contributor license agreements.  See the NOTICE file distributed with</em>
<a name="4" href="#4">4</a>   <em class="jxr_comment"> * this work for additional information regarding copyright ownership.</em>
<a name="5" href="#5">5</a>   <em class="jxr_comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</em>
<a name="6" href="#6">6</a>   <em class="jxr_comment"> * (the "License"); you may not use this file except in compliance with</em>
<a name="7" href="#7">7</a>   <em class="jxr_comment"> * the License.  You may obtain a copy of the License at</em>
<a name="8" href="#8">8</a>   <em class="jxr_comment"> *</em>
<a name="9" href="#9">9</a>   <em class="jxr_comment"> *      <a href="http://www.apache.org/licenses/LICENSE-2.0" target="alexandria_uri">http://www.apache.org/licenses/LICENSE-2.0</a></em>
<a name="10" href="#10">10</a>  <em class="jxr_comment"> *</em>
<a name="11" href="#11">11</a>  <em class="jxr_comment"> * Unless required by applicable law or agreed to in writing, software</em>
<a name="12" href="#12">12</a>  <em class="jxr_comment"> * distributed under the License is distributed on an "AS IS" BASIS,</em>
<a name="13" href="#13">13</a>  <em class="jxr_comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</em>
<a name="14" href="#14">14</a>  <em class="jxr_comment"> * See the License for the specific language governing permissions and</em>
<a name="15" href="#15">15</a>  <em class="jxr_comment"> * limitations under the License.</em>
<a name="16" href="#16">16</a>  <em class="jxr_comment"> */</em>
<a name="17" href="#17">17</a>  <strong class="jxr_keyword">package</strong> org.apache.log4j.net;
<a name="18" href="#18">18</a>  
<a name="19" href="#19">19</a>  <strong class="jxr_keyword">import</strong> java.io.ByteArrayOutputStream;
<a name="20" href="#20">20</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
<a name="21" href="#21">21</a>  <strong class="jxr_keyword">import</strong> java.io.InputStream;
<a name="22" href="#22">22</a>  <strong class="jxr_keyword">import</strong> java.net.Socket;
<a name="23" href="#23">23</a>  
<a name="24" href="#24">24</a>  <strong class="jxr_keyword">import</strong> org.apache.log4j.Logger;
<a name="25" href="#25">25</a>  <strong class="jxr_keyword">import</strong> org.apache.log4j.PatternLayout;
<a name="26" href="#26">26</a>  
<a name="27" href="#27">27</a>  <strong class="jxr_keyword">import</strong> junit.framework.TestCase;
<a name="28" href="#28">28</a>  
<a name="29" href="#29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../org/apache/log4j/net/TelnetAppenderTest.html">TelnetAppenderTest</a> <strong class="jxr_keyword">extends</strong> TestCase {
<a name="30" href="#30">30</a>  
<a name="31" href="#31">31</a>    <strong class="jxr_keyword">int</strong> port = 54353;
<a name="32" href="#32">32</a>    ByteArrayOutputStream bo = <strong class="jxr_keyword">new</strong> ByteArrayOutputStream();
<a name="33" href="#33">33</a>  
<a name="34" href="#34">34</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../org/apache/log4j/net/TelnetAppenderTest.html">ReadThread</a> <strong class="jxr_keyword">extends</strong> Thread {
<a name="35" href="#35">35</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> run() {
<a name="36" href="#36">36</a>        <strong class="jxr_keyword">try</strong> {
<a name="37" href="#37">37</a>          Socket s = <strong class="jxr_keyword">new</strong> Socket(<span class="jxr_string">"localhost"</span>, port);
<a name="38" href="#38">38</a>          InputStream i = s.getInputStream();
<a name="39" href="#39">39</a>          <strong class="jxr_keyword">while</strong> (!Thread.interrupted()) {
<a name="40" href="#40">40</a>            <strong class="jxr_keyword">int</strong> c = i.read();
<a name="41" href="#41">41</a>            <strong class="jxr_keyword">if</strong> (c == -1)
<a name="42" href="#42">42</a>              <strong class="jxr_keyword">break</strong>;
<a name="43" href="#43">43</a>            bo.write(c);
<a name="44" href="#44">44</a>          }
<a name="45" href="#45">45</a>          s.close();
<a name="46" href="#46">46</a>        } <strong class="jxr_keyword">catch</strong> (IOException e) {
<a name="47" href="#47">47</a>          e.printStackTrace();
<a name="48" href="#48">48</a>        }
<a name="49" href="#49">49</a>      }
<a name="50" href="#50">50</a>    }
<a name="51" href="#51">51</a>  
<a name="52" href="#52">52</a>    <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testIt() <strong class="jxr_keyword">throws</strong> Exception {
<a name="53" href="#53">53</a>      <strong class="jxr_keyword">int</strong> oldActive = Thread.activeCount();
<a name="54" href="#54">54</a>      TelnetAppender ta = <strong class="jxr_keyword">new</strong> TelnetAppender();
<a name="55" href="#55">55</a>      ta.setName(<span class="jxr_string">"ta"</span>);
<a name="56" href="#56">56</a>      ta.setPort(port);
<a name="57" href="#57">57</a>      ta.setLayout(<strong class="jxr_keyword">new</strong> PatternLayout(<span class="jxr_string">"%p - %m"</span>));
<a name="58" href="#58">58</a>      ta.activateOptions();
<a name="59" href="#59">59</a>      Logger l = Logger.getLogger(<span class="jxr_string">"x"</span>);
<a name="60" href="#60">60</a>      l.addAppender(ta);
<a name="61" href="#61">61</a>      Thread t = <strong class="jxr_keyword">new</strong> <a href="../../../../org/apache/log4j/net/TelnetAppenderTest.html">ReadThread</a>();
<a name="62" href="#62">62</a>      t.start();
<a name="63" href="#63">63</a>      Thread.sleep(200);
<a name="64" href="#64">64</a>      l.info(<span class="jxr_string">"hi"</span>);
<a name="65" href="#65">65</a>      Thread.sleep(1000);
<a name="66" href="#66">66</a>      ta.close();
<a name="67" href="#67">67</a>      Thread.sleep(200);
<a name="68" href="#68">68</a>      t.interrupt();
<a name="69" href="#69">69</a>      t.join();
<a name="70" href="#70">70</a>      String s = bo.toString();
<a name="71" href="#71">71</a>      assertTrue(s.endsWith(<span class="jxr_string">"INFO - hi"</span>));
<a name="72" href="#72">72</a>      <strong class="jxr_keyword">if</strong>(System.getProperty(<span class="jxr_string">"java.vendor"</span>).indexOf(<span class="jxr_string">"Free"</span>) == -1) {
<a name="73" href="#73">73</a>          assertEquals(oldActive, Thread.activeCount());
<a name="74" href="#74">74</a>      }
<a name="75" href="#75">75</a>    }
<a name="76" href="#76">76</a>  
<a name="77" href="#77">77</a>  }
</pre>
<hr/><div id="footer">This page was automatically generated by <a href="http://maven.apache.org/">Maven</a></div></body>
</html>

