⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 telnetclienttest.java

📁 apache推出的net包
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright 2003-2004 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.commons.net.telnet;import junit.framework.TestCase;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PipedInputStream;import java.io.PipedOutputStream;/*** * JUnit test class for TelnetClient.s * Implements protocol compliance tests * <p> * @author Bruno D'Avanzo ***/public class TelnetClientTest extends TestCase implements TelnetNotificationHandler{    /**     * Handy holder to hold both sides of the connection     * used in testing for clarity.     */    private class TestConnection {        TelnetTestSimpleServer server;        TelnetClient client;        int port;        TestConnection(                TelnetTestSimpleServer server,                 TelnetClient client,                 int port)         {            this.server = server;            this.client = client;            this.port = port;        }        protected void close() {            TelnetClientTest.this.closeConnection(                    this.server, this.client, this.port);        }      }           // four connections with different properties    // to use in tests.    private TestConnection STANDARD;    private TestConnection OPTIONS;    private TestConnection ANSI;    private TestConnection NOREAD;        private int NUM_CONNECTIONS = 4;         protected int numdo = 0;    protected int numdont = 0;    protected int numwill = 0;    protected int numwont = 0;    /***     * main for running the test.     ***/    public static void main(String args[])    {        junit.textui.TestRunner.run(TelnetClientTest.class);    }    /***     * open connections needed for the tests for the test.     ***/    protected void setUp() throws Exception     {        super.setUp();        for (int port = 3333, socket = 0; socket < NUM_CONNECTIONS && port < 4000; port++)         {            TelnetTestSimpleServer server = null;            TelnetClient client = null;           try {               server = new TelnetTestSimpleServer(port);                switch (socket) {               		case 0:               		    client = new TelnetClient();                        // redundant but makes code clearer.                        client.setReaderThread(true);               		    break;               		case 1:               		    client = new TelnetClient();                        TerminalTypeOptionHandler ttopt =                             new TerminalTypeOptionHandler("VT100", false, false, true, false);                        EchoOptionHandler echoopt =                             new EchoOptionHandler(true, false, true, false);                        SuppressGAOptionHandler gaopt =                             new SuppressGAOptionHandler(true, true, true, true);                        client.addOptionHandler(ttopt);                        client.addOptionHandler(echoopt);                        client.addOptionHandler(gaopt);               		    break;               		case 2:                        client = new TelnetClient("ANSI");               		    break;               		case 3:                        client = new TelnetClient();                        client.setReaderThread(false);               		    break;               }               client.connect("127.0.0.1", port);               switch (socket) {               		case 0:               		    STANDARD = new TestConnection(server, client, port);               		    break;               		case 1:               		    OPTIONS = new TestConnection(server, client, port);               		    break;               		case 2:               		    ANSI = new TestConnection(server, client, port);               		    break;               		case 3:               		    NOREAD = new TestConnection(server, client, port);               		    break;               		                   }                              // only increment socket number on success               socket++;           } catch (IOException e) {               closeConnection(server, client, port);               System.err.println("failed to open client-server connection on port " + port);           }       }       Thread.sleep(1000);    }        /*      * @throws java.lang.Exception     */    protected void tearDown() throws Exception {        NOREAD.close();        ANSI.close();        OPTIONS.close();        STANDARD.close();        try {            Thread.sleep(1000);        } catch (InterruptedException ie) {            //do nothing        }        super.tearDown();    }           void closeConnection(TelnetTestSimpleServer server, TelnetClient client, int port) {        if (server != null) {            server.disconnect();            server.stop();        }        try {            if (client != null) {                client.disconnect();            }        } catch (IOException e) {            System.err.println("failed to close client-server connection on port " + port);            System.err.println("ERROR in closeConnection(), "+ e.getMessage());        }            }    /***     * tests the initial condition of the sessions     ***/    public void testInitial() throws Exception    {        boolean connect1_ok = false;        boolean connect2_ok = false;        boolean connect3_ok = false;        boolean init2_ok = false;        boolean add_invalid_ok1 = false;        boolean add_invalid_ok2 = false;        byte buffread2[] = new byte[9];        byte expected2[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WILL,             (byte) TelnetOption.ECHO,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WILL,             (byte) TelnetOption.SUPPRESS_GO_AHEAD,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO,             (byte) TelnetOption.SUPPRESS_GO_AHEAD,        };        SimpleOptionHandler hand = new SimpleOptionHandler(550);        try        {            STANDARD.client.addOptionHandler(hand);        }        catch (Exception e)        {            add_invalid_ok1 = true;        }        try        {            OPTIONS.client.addOptionHandler(hand);        }        catch (Exception e)        {            add_invalid_ok2 = true;        }        InputStream is1 = STANDARD.server.getInputStream();        Thread.sleep(1000);        if(is1.available() == 0)        {            connect1_ok = true;        }        Thread.sleep(1000);        InputStream is2 = OPTIONS.server.getInputStream();        if(is2.available() == 9)        {            is2.read(buffread2);            connect2_ok = true;            if(equalBytes(buffread2, expected2))                 init2_ok = true;        }        InputStream is3 = ANSI.server.getInputStream();        Thread.sleep(1000);        if(is3.available() == 0)        {            connect3_ok = true;        }        assertTrue(connect1_ok);        assertTrue(connect2_ok);        assertTrue(connect3_ok);        assertTrue(!STANDARD.client.getLocalOptionState(TelnetOption.ECHO));        assertTrue(!STANDARD.client.getRemoteOptionState(TelnetOption.ECHO));        assertTrue(!OPTIONS.client.getLocalOptionState(TelnetOption.ECHO));        assertTrue(!OPTIONS.client.getRemoteOptionState(TelnetOption.ECHO));        assertTrue(!ANSI.client.getLocalOptionState(TelnetOption.TERMINAL_TYPE));        assertTrue(!ANSI.client.getRemoteOptionState(TelnetOption.TERMINAL_TYPE));        assertTrue(init2_ok);        assertTrue(add_invalid_ok1);        assertTrue(add_invalid_ok2);    }    /***     * protocol compliance test for option negotiation     ***/    public void testOptionNegotiation() throws Exception    {        boolean negotiation1_ok = false;        byte buffread1[] = new byte[6];        byte send1[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO, (byte) 15,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WILL, (byte) 15,        };        byte expected1[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WONT, (byte) 15,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DONT, (byte) 15,        };        boolean negotiation2_ok = false;        byte buffread2[] = new byte[9];        byte send2[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO,             (byte) TelnetOption.TERMINAL_TYPE,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DONT,             (byte) TelnetOption.ECHO,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO,             (byte) TelnetOption.SUPPRESS_GO_AHEAD,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WONT,             (byte) TelnetOption.SUPPRESS_GO_AHEAD        };        byte expected2[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WILL,             (byte) TelnetOption.TERMINAL_TYPE,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WONT,             (byte) TelnetOption.ECHO,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DONT,             (byte) TelnetOption.SUPPRESS_GO_AHEAD        };        byte buffread2b[] = new byte[11];        byte send2b[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.SB,             (byte) TelnetOption.TERMINAL_TYPE,            (byte) 1, (byte) TelnetCommand.IAC, (byte) TelnetCommand.SE,        };        byte expected2b[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.SB,             (byte) TelnetOption.TERMINAL_TYPE,            (byte) 0, (byte) 'V', (byte) 'T', (byte) '1', (byte) '0',             (byte) '0',             (byte) TelnetCommand.IAC, (byte) TelnetCommand.SE,        };        boolean negotiation3_ok = false;        byte buffread3[] = new byte[6];        byte send3[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO,             (byte) TelnetOption.TERMINAL_TYPE,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO,            (byte) TelnetOption.SUPPRESS_GO_AHEAD        };        byte expected3[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WILL,             (byte) TelnetOption.TERMINAL_TYPE,            (byte) TelnetCommand.IAC, (byte) TelnetCommand.WONT,             (byte) TelnetOption.SUPPRESS_GO_AHEAD        };        byte buffread3b[] = new byte[10];        byte send3b[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.SB,             (byte) TelnetOption.TERMINAL_TYPE,            (byte) 1, (byte) TelnetCommand.IAC, (byte) TelnetCommand.SE,        };        byte expected3b[] =        {            (byte) TelnetCommand.IAC, (byte) TelnetCommand.SB,             (byte) TelnetOption.TERMINAL_TYPE,            (byte) 0, (byte) 'A', (byte) 'N', (byte) 'S', (byte) 'I',             (byte) TelnetCommand.IAC, (byte) TelnetCommand.SE,        };        InputStream is1 = STANDARD.server.getInputStream();        OutputStream os1 = STANDARD.server.getOutputStream();        is1.skip(is1.available());        os1.write(send1);        os1.flush();        Thread.sleep(1000);        if(is1.available() == 6)        {            is1.read(buffread1);            if(equalBytes(buffread1, expected1))                negotiation1_ok = true;        }        InputStream is2 = OPTIONS.server.getInputStream();        OutputStream os2 = OPTIONS.server.getOutputStream();        Thread.sleep(1000);        is2.skip(is2.available());        os2.write(send2);        os2.flush();        Thread.sleep(1000);        if(is2.available() == 9)        {            is2.read(buffread2);            if(equalBytes(buffread2, expected2))                negotiation2_ok = true;            if(negotiation2_ok)            {                negotiation2_ok = false;                os2.write(send2b);                os2.flush();                Thread.sleep(1000);                if(is2.available() == 11)                {                    is2.read(buffread2b);                    if(equalBytes(buffread2b, expected2b))                        negotiation2_ok = true;                }            }        }        InputStream is3 = ANSI.server.getInputStream();        OutputStream os3 = ANSI.server.getOutputStream();        Thread.sleep(1000);        is3.skip(is3.available());        os3.write(send3);        os3.flush();        Thread.sleep(1000);        if(is3.available() == 6)        {            is3.read(buffread3);            if(equalBytes(buffread3, expected3))                negotiation3_ok = true;            if(negotiation3_ok)            {                negotiation3_ok = false;                os3.write(send3b);                os3.flush();                Thread.sleep(1000);                if(is3.available() == 10)                {                    is3.read(buffread3b);                    if(equalBytes(buffread3b, expected3b))                            negotiation3_ok = true;                }            }        }        assertTrue(negotiation1_ok);        assertTrue(negotiation2_ok);        assertTrue(negotiation3_ok);        assertTrue(!STANDARD.client.getLocalOptionState(15));        assertTrue(!STANDARD.client.getRemoteOptionState(15));        assertTrue(!STANDARD.client.getLocalOptionState(TelnetOption.TERMINAL_TYPE));        assertTrue(!OPTIONS.client.getLocalOptionState(TelnetOption.ECHO));        assertTrue(!OPTIONS.client.getRemoteOptionState(TelnetOption.ECHO));        assertTrue(OPTIONS.client.getLocalOptionState(TelnetOption.SUPPRESS_GO_AHEAD));        assertTrue(!OPTIONS.client.getRemoteOptionState(TelnetOption.SUPPRESS_GO_AHEAD));        assertTrue(OPTIONS.client.getLocalOptionState(TelnetOption.TERMINAL_TYPE));        assertTrue(ANSI.client.getLocalOptionState(TelnetOption.TERMINAL_TYPE));        assertTrue(!OPTIONS.client.getLocalOptionState(TelnetOption.ECHO));    }    /***     * protocol compliance test for option renegotiation     ***/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -