[jira] Created: (NET-284) problem with TelnetClient.setSoTimeout() : not the proper behaviour

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[jira] Created: (NET-284) problem with TelnetClient.setSoTimeout() : not the proper behaviour

JIRA jira@apache.org
problem with TelnetClient.setSoTimeout() : not the proper behaviour
-------------------------------------------------------------------

                 Key: NET-284
                 URL: https://issues.apache.org/jira/browse/NET-284
             Project: Commons Net
          Issue Type: Bug
    Affects Versions: 2.0
         Environment: Windows XP, Sun JRE 6
            Reporter: dalouuu


Hi all,
Correct me if I'm wrong but I think that the telnetClient is not handling properly timeouts.

Just look at this junit testCase :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.SocketException;
import java.net.SocketTimeoutException;

import junit.framework.TestCase;
import org.apache.commons.net.telnet.*;

import org.junit.Test;

public class TelnetClientTest extends TestCase {
        private TelnetClient telnetClient;
        private BufferedReader in= null;
        private PrintWriter out= null;
       
        @Test
        public void testSetSoTimeout() {
               
                telnetClient = new TelnetClient();
               
                /*
                 * FIRST SCRIPT
                 */
                try {
                        telnetClient.connect("192.168.0.95", 23);
                } catch (SocketException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                } catch (IOException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                }
                assertTrue ("telnet client not connected", telnetClient.isConnected());
               
                in = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()));
                out = new PrintWriter(telnetClient.getOutputStream());
                String mes = null;
               
                // LOGIN
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt login", mes.endsWith("login: "));
                out.println("gptoadm");
                out.flush();
               
                // PASSWORD
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt password", mes.endsWith("Password: "));
                out.println("anatole");
                out.flush();
               
                // PROMPT
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("no prompt", mes.endsWith("$ "));
               
                // SEND PWD
                out.println("pwd");
                out.flush();
               
                // WAIT A LITTLE BIT TOO MUCH
                try {
                        Thread.sleep(1000);
                } catch(InterruptedException e) {
                }
               
                // READ RESULT OF PWD
                mes = getMessageFromTelnetServer(300);
               
                // READ AGAIN ... YES !
                String mes2 = getMessageFromTelnetServer(300);
               
                // CRASH HERE
                assertTrue("no result to pwd", mes.endsWith("$ "));
               
                // AND HERE
                assertEquals("should be empty but we get result of pwd", "" , mes2);
               
                this.disconnect();
               
        }
       
        private void disconnect() {
                try {
                        telnetClient.disconnect();
                } catch (IOException e) {}
        }
       
        private String getMessageFromTelnetServer(int timeout) {
                int numberOfBytes = 0;
                char[] msgChar = new char[2000];
               
                try {
                        telnetClient.setSoTimeout(timeout);
                } catch (Exception e) {
                        return "";
                }
               
                String res = "";
                read_loop:
                while (numberOfBytes >= 0) {
                        try {
                                numberOfBytes = in.read(msgChar, 0, msgChar.length);
                        } catch (SocketTimeoutException e) {
                                break read_loop;
                        } catch (IOException e) {
                                e.printStackTrace();
                                break read_loop;
                        }
                        res = res + String.copyValueOf(msgChar, 0, numberOfBytes);
                }
                return res;
        }

}


--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply | Threaded
Open this post in threaded view
|

[jira] Updated: (NET-284) problem with TelnetClient.setSoTimeout() : not the proper behaviour

JIRA jira@apache.org

     [ https://issues.apache.org/jira/browse/NET-284?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

dalouuu updated NET-284:
------------------------

    Description:
Hi all,
Correct me if I'm wrong but I think that the telnetClient is not handling properly timeouts.

Just look at this junit testCase :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.SocketException;
import java.net.SocketTimeoutException;

import junit.framework.TestCase;
import org.apache.commons.net.telnet.*;

import org.junit.Test;

public class TelnetClientTest extends TestCase {
        private TelnetClient telnetClient;
        private BufferedReader in= null;
        private PrintWriter out= null;
       
        @Test
        public void testSetSoTimeout() {
               
                telnetClient = new TelnetClient();
               
                /*
                 * FIRST SCRIPT
                 */
                try {
                        telnetClient.connect("192.168.0.95", 23);
                } catch (SocketException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                } catch (IOException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                }
                assertTrue ("telnet client not connected", telnetClient.isConnected());
               
                in = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()));
                out = new PrintWriter(telnetClient.getOutputStream());
                String mes = null;
               
                // LOGIN
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt login", mes.endsWith("login: "));
                out.println("root");
                out.flush();
               
                // PASSWORD
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt password", mes.endsWith("Password: "));
                out.println("rootpwd");
                out.flush();
               
                // PROMPT
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("no prompt", mes.endsWith("$ "));
               
                // SEND PWD
                out.println("pwd");
                out.flush();
               
                // WAIT A LITTLE BIT TOO MUCH
                try {
                        Thread.sleep(1000);
                } catch(InterruptedException e) {
                }
               
                // READ RESULT OF PWD
                mes = getMessageFromTelnetServer(300);
               
                // READ AGAIN ... YES !
                String mes2 = getMessageFromTelnetServer(300);
               
                // CRASH HERE
                assertTrue("no result to pwd", mes.endsWith("$ "));
               
                // AND HERE
                assertEquals("should be empty but we get result of pwd", "" , mes2);
               
                this.disconnect();
               
        }
       
        private void disconnect() {
                try {
                        telnetClient.disconnect();
                } catch (IOException e) {}
        }
       
        private String getMessageFromTelnetServer(int timeout) {
                int numberOfBytes = 0;
                char[] msgChar = new char[2000];
               
                try {
                        telnetClient.setSoTimeout(timeout);
                } catch (Exception e) {
                        return "";
                }
               
                String res = "";
                read_loop:
                while (numberOfBytes >= 0) {
                        try {
                                numberOfBytes = in.read(msgChar, 0, msgChar.length);
                        } catch (SocketTimeoutException e) {
                                break read_loop;
                        } catch (IOException e) {
                                e.printStackTrace();
                                break read_loop;
                        }
                        res = res + String.copyValueOf(msgChar, 0, numberOfBytes);
                }
                return res;
        }

}


  was:
Hi all,
Correct me if I'm wrong but I think that the telnetClient is not handling properly timeouts.

Just look at this junit testCase :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.SocketException;
import java.net.SocketTimeoutException;

import junit.framework.TestCase;
import org.apache.commons.net.telnet.*;

import org.junit.Test;

public class TelnetClientTest extends TestCase {
        private TelnetClient telnetClient;
        private BufferedReader in= null;
        private PrintWriter out= null;
       
        @Test
        public void testSetSoTimeout() {
               
                telnetClient = new TelnetClient();
               
                /*
                 * FIRST SCRIPT
                 */
                try {
                        telnetClient.connect("192.168.0.95", 23);
                } catch (SocketException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                } catch (IOException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                }
                assertTrue ("telnet client not connected", telnetClient.isConnected());
               
                in = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()));
                out = new PrintWriter(telnetClient.getOutputStream());
                String mes = null;
               
                // LOGIN
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt login", mes.endsWith("login: "));
                out.println("gptoadm");
                out.flush();
               
                // PASSWORD
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt password", mes.endsWith("Password: "));
                out.println("anatole");
                out.flush();
               
                // PROMPT
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("no prompt", mes.endsWith("$ "));
               
                // SEND PWD
                out.println("pwd");
                out.flush();
               
                // WAIT A LITTLE BIT TOO MUCH
                try {
                        Thread.sleep(1000);
                } catch(InterruptedException e) {
                }
               
                // READ RESULT OF PWD
                mes = getMessageFromTelnetServer(300);
               
                // READ AGAIN ... YES !
                String mes2 = getMessageFromTelnetServer(300);
               
                // CRASH HERE
                assertTrue("no result to pwd", mes.endsWith("$ "));
               
                // AND HERE
                assertEquals("should be empty but we get result of pwd", "" , mes2);
               
                this.disconnect();
               
        }
       
        private void disconnect() {
                try {
                        telnetClient.disconnect();
                } catch (IOException e) {}
        }
       
        private String getMessageFromTelnetServer(int timeout) {
                int numberOfBytes = 0;
                char[] msgChar = new char[2000];
               
                try {
                        telnetClient.setSoTimeout(timeout);
                } catch (Exception e) {
                        return "";
                }
               
                String res = "";
                read_loop:
                while (numberOfBytes >= 0) {
                        try {
                                numberOfBytes = in.read(msgChar, 0, msgChar.length);
                        } catch (SocketTimeoutException e) {
                                break read_loop;
                        } catch (IOException e) {
                                e.printStackTrace();
                                break read_loop;
                        }
                        res = res + String.copyValueOf(msgChar, 0, numberOfBytes);
                }
                return res;
        }

}



> problem with TelnetClient.setSoTimeout() : not the proper behaviour
> -------------------------------------------------------------------
>
>                 Key: NET-284
>                 URL: https://issues.apache.org/jira/browse/NET-284
>             Project: Commons Net
>          Issue Type: Bug
>    Affects Versions: 2.0
>         Environment: Windows XP, Sun JRE 6
>            Reporter: dalouuu
>
> Hi all,
> Correct me if I'm wrong but I think that the telnetClient is not handling properly timeouts.
> Just look at this junit testCase :
> import java.io.BufferedReader;
> import java.io.IOException;
> import java.io.InputStreamReader;
> import java.io.PrintWriter;
> import java.net.SocketException;
> import java.net.SocketTimeoutException;
> import junit.framework.TestCase;
> import org.apache.commons.net.telnet.*;
> import org.junit.Test;
> public class TelnetClientTest extends TestCase {
> private TelnetClient telnetClient;
> private BufferedReader in= null;
> private PrintWriter out= null;
>
> @Test
> public void testSetSoTimeout() {
>
> telnetClient = new TelnetClient();
>
> /*
> * FIRST SCRIPT
> */
> try {
> telnetClient.connect("192.168.0.95", 23);
> } catch (SocketException e) {
> e.printStackTrace();
> this.disconnect();
> fail("Error connect");
> } catch (IOException e) {
> e.printStackTrace();
> this.disconnect();
> fail("Error connect");
> }
> assertTrue ("telnet client not connected", telnetClient.isConnected());
>
> in = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()));
> out = new PrintWriter(telnetClient.getOutputStream());
> String mes = null;
>
> // LOGIN
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("Pas de prompt login", mes.endsWith("login: "));
> out.println("root");
> out.flush();
>
> // PASSWORD
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("Pas de prompt password", mes.endsWith("Password: "));
> out.println("rootpwd");
> out.flush();
>
> // PROMPT
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("no prompt", mes.endsWith("$ "));
>
> // SEND PWD
> out.println("pwd");
> out.flush();
>
> // WAIT A LITTLE BIT TOO MUCH
> try {
> Thread.sleep(1000);
> } catch(InterruptedException e) {
> }
>
> // READ RESULT OF PWD
> mes = getMessageFromTelnetServer(300);
>
> // READ AGAIN ... YES !
> String mes2 = getMessageFromTelnetServer(300);
>
> // CRASH HERE
> assertTrue("no result to pwd", mes.endsWith("$ "));
>
> // AND HERE
> assertEquals("should be empty but we get result of pwd", "" , mes2);
>
> this.disconnect();
>
> }
>
> private void disconnect() {
> try {
> telnetClient.disconnect();
> } catch (IOException e) {}
> }
>
> private String getMessageFromTelnetServer(int timeout) {
> int numberOfBytes = 0;
> char[] msgChar = new char[2000];
>
> try {
> telnetClient.setSoTimeout(timeout);
> } catch (Exception e) {
> return "";
> }
>
> String res = "";
> read_loop:
> while (numberOfBytes >= 0) {
> try {
> numberOfBytes = in.read(msgChar, 0, msgChar.length);
> } catch (SocketTimeoutException e) {
> break read_loop;
> } catch (IOException e) {
> e.printStackTrace();
> break read_loop;
> }
> res = res + String.copyValueOf(msgChar, 0, numberOfBytes);
> }
> return res;
> }
> }

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply | Threaded
Open this post in threaded view
|

[jira] Updated: (NET-284) problem with TelnetClient.setSoTimeout() : not the proper behaviour

JIRA jira@apache.org
In reply to this post by JIRA jira@apache.org

     [ https://issues.apache.org/jira/browse/NET-284?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sebb updated NET-284:
---------------------

    Component/s: Telnet

> problem with TelnetClient.setSoTimeout() : not the proper behaviour
> -------------------------------------------------------------------
>
>                 Key: NET-284
>                 URL: https://issues.apache.org/jira/browse/NET-284
>             Project: Commons Net
>          Issue Type: Bug
>          Components: Telnet
>    Affects Versions: 2.0
>         Environment: Windows XP, Sun JRE 6
>            Reporter: dalouuu
>
> Hi all,
> Correct me if I'm wrong but I think that the telnetClient is not handling properly timeouts.
> Just look at this junit testCase :
> import java.io.BufferedReader;
> import java.io.IOException;
> import java.io.InputStreamReader;
> import java.io.PrintWriter;
> import java.net.SocketException;
> import java.net.SocketTimeoutException;
> import junit.framework.TestCase;
> import org.apache.commons.net.telnet.*;
> import org.junit.Test;
> public class TelnetClientTest extends TestCase {
> private TelnetClient telnetClient;
> private BufferedReader in= null;
> private PrintWriter out= null;
>
> @Test
> public void testSetSoTimeout() {
>
> telnetClient = new TelnetClient();
>
> /*
> * FIRST SCRIPT
> */
> try {
> telnetClient.connect("192.168.0.95", 23);
> } catch (SocketException e) {
> e.printStackTrace();
> this.disconnect();
> fail("Error connect");
> } catch (IOException e) {
> e.printStackTrace();
> this.disconnect();
> fail("Error connect");
> }
> assertTrue ("telnet client not connected", telnetClient.isConnected());
>
> in = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()));
> out = new PrintWriter(telnetClient.getOutputStream());
> String mes = null;
>
> // LOGIN
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("Pas de prompt login", mes.endsWith("login: "));
> out.println("root");
> out.flush();
>
> // PASSWORD
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("Pas de prompt password", mes.endsWith("Password: "));
> out.println("rootpwd");
> out.flush();
>
> // PROMPT
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("no prompt", mes.endsWith("$ "));
>
> // SEND PWD
> out.println("pwd");
> out.flush();
>
> // WAIT A LITTLE BIT TOO MUCH
> try {
> Thread.sleep(1000);
> } catch(InterruptedException e) {
> }
>
> // READ RESULT OF PWD
> mes = getMessageFromTelnetServer(300);
>
> // READ AGAIN ... YES !
> String mes2 = getMessageFromTelnetServer(300);
>
> // CRASH HERE
> assertTrue("no result to pwd", mes.endsWith("$ "));
>
> // AND HERE
> assertEquals("should be empty but we get result of pwd", "" , mes2);
>
> this.disconnect();
>
> }
>
> private void disconnect() {
> try {
> telnetClient.disconnect();
> } catch (IOException e) {}
> }
>
> private String getMessageFromTelnetServer(int timeout) {
> int numberOfBytes = 0;
> char[] msgChar = new char[2000];
>
> try {
> telnetClient.setSoTimeout(timeout);
> } catch (Exception e) {
> return "";
> }
>
> String res = "";
> read_loop:
> while (numberOfBytes >= 0) {
> try {
> numberOfBytes = in.read(msgChar, 0, msgChar.length);
> } catch (SocketTimeoutException e) {
> break read_loop;
> } catch (IOException e) {
> e.printStackTrace();
> break read_loop;
> }
> res = res + String.copyValueOf(msgChar, 0, numberOfBytes);
> }
> return res;
> }
> }

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply | Threaded
Open this post in threaded view
|

[jira] Updated: (NET-284) problem with TelnetClient.setSoTimeout() : not the proper behaviour

JIRA jira@apache.org
In reply to this post by JIRA jira@apache.org

     [ https://issues.apache.org/jira/browse/NET-284?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sebb updated NET-284:
---------------------

    Description:
Hi all,
Correct me if I'm wrong but I think that the telnetClient is not handling properly timeouts.

Just look at this junit testCase :

{code}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.SocketException;
import java.net.SocketTimeoutException;

import junit.framework.TestCase;
import org.apache.commons.net.telnet.*;

import org.junit.Test;

public class TelnetClientTest extends TestCase {
        private TelnetClient telnetClient;
        private BufferedReader in= null;
        private PrintWriter out= null;
       
        @Test
        public void testSetSoTimeout() {
               
                telnetClient = new TelnetClient();
               
                /*
                 * FIRST SCRIPT
                 */
                try {
                        telnetClient.connect("192.168.0.95", 23);
                } catch (SocketException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                } catch (IOException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                }
                assertTrue ("telnet client not connected", telnetClient.isConnected());
               
                in = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()));
                out = new PrintWriter(telnetClient.getOutputStream());
                String mes = null;
               
                // LOGIN
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt login", mes.endsWith("login: "));
                out.println("root");
                out.flush();
               
                // PASSWORD
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt password", mes.endsWith("Password: "));
                out.println("rootpwd");
                out.flush();
               
                // PROMPT
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("no prompt", mes.endsWith("$ "));
               
                // SEND PWD
                out.println("pwd");
                out.flush();
               
                // WAIT A LITTLE BIT TOO MUCH
                try {
                        Thread.sleep(1000);
                } catch(InterruptedException e) {
                }
               
                // READ RESULT OF PWD
                mes = getMessageFromTelnetServer(300);
               
                // READ AGAIN ... YES !
                String mes2 = getMessageFromTelnetServer(300);
               
                // CRASH HERE
                assertTrue("no result to pwd", mes.endsWith("$ "));
               
                // AND HERE
                assertEquals("should be empty but we get result of pwd", "" , mes2);
               
                this.disconnect();
               
        }
       
        private void disconnect() {
                try {
                        telnetClient.disconnect();
                } catch (IOException e) {}
        }
       
        private String getMessageFromTelnetServer(int timeout) {
                int numberOfBytes = 0;
                char[] msgChar = new char[2000];
               
                try {
                        telnetClient.setSoTimeout(timeout);
                } catch (Exception e) {
                        return "";
                }
               
                String res = "";
                read_loop:
                while (numberOfBytes >= 0) {
                        try {
                                numberOfBytes = in.read(msgChar, 0, msgChar.length);
                        } catch (SocketTimeoutException e) {
                                break read_loop;
                        } catch (IOException e) {
                                e.printStackTrace();
                                break read_loop;
                        }
                        res = res + String.copyValueOf(msgChar, 0, numberOfBytes);
                }
                return res;
        }

}
{code}


  was:
Hi all,
Correct me if I'm wrong but I think that the telnetClient is not handling properly timeouts.

Just look at this junit testCase :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.SocketException;
import java.net.SocketTimeoutException;

import junit.framework.TestCase;
import org.apache.commons.net.telnet.*;

import org.junit.Test;

public class TelnetClientTest extends TestCase {
        private TelnetClient telnetClient;
        private BufferedReader in= null;
        private PrintWriter out= null;
       
        @Test
        public void testSetSoTimeout() {
               
                telnetClient = new TelnetClient();
               
                /*
                 * FIRST SCRIPT
                 */
                try {
                        telnetClient.connect("192.168.0.95", 23);
                } catch (SocketException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                } catch (IOException e) {
                        e.printStackTrace();
                        this.disconnect();
                        fail("Error connect");
                }
                assertTrue ("telnet client not connected", telnetClient.isConnected());
               
                in = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()));
                out = new PrintWriter(telnetClient.getOutputStream());
                String mes = null;
               
                // LOGIN
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt login", mes.endsWith("login: "));
                out.println("root");
                out.flush();
               
                // PASSWORD
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("Pas de prompt password", mes.endsWith("Password: "));
                out.println("rootpwd");
                out.flush();
               
                // PROMPT
                mes = getMessageFromTelnetServer(300);
                assertNotNull("mes is null", mes);
                assertTrue("no prompt", mes.endsWith("$ "));
               
                // SEND PWD
                out.println("pwd");
                out.flush();
               
                // WAIT A LITTLE BIT TOO MUCH
                try {
                        Thread.sleep(1000);
                } catch(InterruptedException e) {
                }
               
                // READ RESULT OF PWD
                mes = getMessageFromTelnetServer(300);
               
                // READ AGAIN ... YES !
                String mes2 = getMessageFromTelnetServer(300);
               
                // CRASH HERE
                assertTrue("no result to pwd", mes.endsWith("$ "));
               
                // AND HERE
                assertEquals("should be empty but we get result of pwd", "" , mes2);
               
                this.disconnect();
               
        }
       
        private void disconnect() {
                try {
                        telnetClient.disconnect();
                } catch (IOException e) {}
        }
       
        private String getMessageFromTelnetServer(int timeout) {
                int numberOfBytes = 0;
                char[] msgChar = new char[2000];
               
                try {
                        telnetClient.setSoTimeout(timeout);
                } catch (Exception e) {
                        return "";
                }
               
                String res = "";
                read_loop:
                while (numberOfBytes >= 0) {
                        try {
                                numberOfBytes = in.read(msgChar, 0, msgChar.length);
                        } catch (SocketTimeoutException e) {
                                break read_loop;
                        } catch (IOException e) {
                                e.printStackTrace();
                                break read_loop;
                        }
                        res = res + String.copyValueOf(msgChar, 0, numberOfBytes);
                }
                return res;
        }

}



> problem with TelnetClient.setSoTimeout() : not the proper behaviour
> -------------------------------------------------------------------
>
>                 Key: NET-284
>                 URL: https://issues.apache.org/jira/browse/NET-284
>             Project: Commons Net
>          Issue Type: Bug
>          Components: Telnet
>    Affects Versions: 2.0
>         Environment: Windows XP, Sun JRE 6
>            Reporter: dalouuu
>
> Hi all,
> Correct me if I'm wrong but I think that the telnetClient is not handling properly timeouts.
> Just look at this junit testCase :
> {code}
> import java.io.BufferedReader;
> import java.io.IOException;
> import java.io.InputStreamReader;
> import java.io.PrintWriter;
> import java.net.SocketException;
> import java.net.SocketTimeoutException;
> import junit.framework.TestCase;
> import org.apache.commons.net.telnet.*;
> import org.junit.Test;
> public class TelnetClientTest extends TestCase {
> private TelnetClient telnetClient;
> private BufferedReader in= null;
> private PrintWriter out= null;
>
> @Test
> public void testSetSoTimeout() {
>
> telnetClient = new TelnetClient();
>
> /*
> * FIRST SCRIPT
> */
> try {
> telnetClient.connect("192.168.0.95", 23);
> } catch (SocketException e) {
> e.printStackTrace();
> this.disconnect();
> fail("Error connect");
> } catch (IOException e) {
> e.printStackTrace();
> this.disconnect();
> fail("Error connect");
> }
> assertTrue ("telnet client not connected", telnetClient.isConnected());
>
> in = new BufferedReader(new InputStreamReader(telnetClient.getInputStream()));
> out = new PrintWriter(telnetClient.getOutputStream());
> String mes = null;
>
> // LOGIN
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("Pas de prompt login", mes.endsWith("login: "));
> out.println("root");
> out.flush();
>
> // PASSWORD
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("Pas de prompt password", mes.endsWith("Password: "));
> out.println("rootpwd");
> out.flush();
>
> // PROMPT
> mes = getMessageFromTelnetServer(300);
> assertNotNull("mes is null", mes);
> assertTrue("no prompt", mes.endsWith("$ "));
>
> // SEND PWD
> out.println("pwd");
> out.flush();
>
> // WAIT A LITTLE BIT TOO MUCH
> try {
> Thread.sleep(1000);
> } catch(InterruptedException e) {
> }
>
> // READ RESULT OF PWD
> mes = getMessageFromTelnetServer(300);
>
> // READ AGAIN ... YES !
> String mes2 = getMessageFromTelnetServer(300);
>
> // CRASH HERE
> assertTrue("no result to pwd", mes.endsWith("$ "));
>
> // AND HERE
> assertEquals("should be empty but we get result of pwd", "" , mes2);
>
> this.disconnect();
>
> }
>
> private void disconnect() {
> try {
> telnetClient.disconnect();
> } catch (IOException e) {}
> }
>
> private String getMessageFromTelnetServer(int timeout) {
> int numberOfBytes = 0;
> char[] msgChar = new char[2000];
>
> try {
> telnetClient.setSoTimeout(timeout);
> } catch (Exception e) {
> return "";
> }
>
> String res = "";
> read_loop:
> while (numberOfBytes >= 0) {
> try {
> numberOfBytes = in.read(msgChar, 0, msgChar.length);
> } catch (SocketTimeoutException e) {
> break read_loop;
> } catch (IOException e) {
> e.printStackTrace();
> break read_loop;
> }
> res = res + String.copyValueOf(msgChar, 0, numberOfBytes);
> }
> return res;
> }
> }
> {code}

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.