📄 telnetclienttest.java
字号:
public void testOptionRenegotiation() throws Exception { boolean negotiation1_ok = false; byte buffread[] = new byte[6]; byte send[] = { (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO, (byte) TelnetOption.ECHO, (byte) TelnetCommand.IAC, (byte) TelnetCommand.DONT, (byte) TelnetOption.SUPPRESS_GO_AHEAD, (byte) TelnetCommand.IAC, (byte) TelnetCommand.WONT, (byte) TelnetOption.SUPPRESS_GO_AHEAD }; byte expected[] = { (byte) TelnetCommand.IAC, (byte) TelnetCommand.WONT, (byte) TelnetOption.SUPPRESS_GO_AHEAD, (byte) TelnetCommand.IAC, (byte) TelnetCommand.DONT, (byte) TelnetOption.SUPPRESS_GO_AHEAD }; byte buffread2[] = new byte[3]; byte send2[] = { (byte) TelnetCommand.IAC, (byte) TelnetCommand.DONT, (byte) TelnetOption.ECHO, }; byte expected2[] = { (byte) TelnetCommand.IAC, (byte) TelnetCommand.WONT, (byte) TelnetOption.ECHO, }; InputStream is = OPTIONS.server.getInputStream(); OutputStream os = OPTIONS.server.getOutputStream(); Thread.sleep(1000); is.skip(is.available()); os.write(send); os.flush(); Thread.sleep(1000); if(is.available() == 6) { is.read(buffread); if(equalBytes(buffread, expected)) negotiation1_ok = true; if(negotiation1_ok) { negotiation1_ok = false; os.write(send2); os.flush(); Thread.sleep(1000); if(is.available() == 3) { is.read(buffread2); if(equalBytes(buffread2, expected2)) negotiation1_ok = true; } } } assertTrue(negotiation1_ok); assertTrue(!OPTIONS.client.getLocalOptionState(TelnetOption.ECHO)); } /*** * test of option negotiation notification ***/ public void testNotification() throws Exception { byte buffread1[] = new byte[6]; byte send1[] = { (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO, (byte) 15, (byte) TelnetCommand.IAC, (byte) TelnetCommand.WILL, (byte) 15, }; 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 buffread2b[] = new byte[11]; numdo = 0; numdont = 0; numwill = 0; numwont = 0; OPTIONS.client.registerNotifHandler(this); InputStream is1 = STANDARD.server.getInputStream(); OutputStream os1 = STANDARD.server.getOutputStream(); is1.skip(is1.available()); os1.write(send1); os1.flush(); Thread.sleep(500); if(is1.available() > 0) { is1.read(buffread1); } InputStream is2 = OPTIONS.server.getInputStream(); OutputStream os2 = OPTIONS.server.getOutputStream(); Thread.sleep(500); is2.skip(is2.available()); os2.write(send2); os2.flush(); Thread.sleep(500); if(is2.available() > 0) { is2.read(buffread2); Thread.sleep(1000); if(is2.available() > 0) { is2.read(buffread2b); } } assertTrue(numdo == 2); assertTrue(numdont == 1); assertTrue(numwont == 1); assertTrue(numwill == 0); } /*** * protocol compliance test in case of option handler removal ***/ public void testDeleteOptionHandler() throws Exception { boolean remove_ok = false; boolean remove_invalid_ok1 = false; boolean remove_invalid_ok2 = false; byte buffread[] = new byte[6]; byte send[] = { (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO, (byte) TelnetOption.ECHO, (byte) TelnetCommand.IAC, (byte) TelnetCommand.DO, (byte) TelnetOption.SUPPRESS_GO_AHEAD, (byte) TelnetCommand.IAC, (byte) TelnetCommand.WILL, (byte) TelnetOption.SUPPRESS_GO_AHEAD }; byte expected[] = { (byte) TelnetCommand.IAC, (byte) TelnetCommand.WONT, (byte) TelnetOption.SUPPRESS_GO_AHEAD, (byte) TelnetCommand.IAC, (byte) TelnetCommand.DONT, (byte) TelnetOption.SUPPRESS_GO_AHEAD }; InputStream is = OPTIONS.server.getInputStream(); OutputStream os = OPTIONS.server.getOutputStream(); Thread.sleep(1000); is.skip(is.available()); os.write(send); os.flush(); Thread.sleep(1000); if(is.available() == 0) { OPTIONS.client.deleteOptionHandler(TelnetOption.SUPPRESS_GO_AHEAD); Thread.sleep(1000); if(is.available() == 6) { is.read(buffread); if(equalBytes(buffread, expected)) remove_ok = true; } } try { OPTIONS.client.deleteOptionHandler(TelnetOption.SUPPRESS_GO_AHEAD); } catch (Exception e) { remove_invalid_ok1 = true; } try { OPTIONS.client.deleteOptionHandler(550); } catch (Exception e) { remove_invalid_ok2 = true; } assertTrue(remove_ok); assertTrue(remove_invalid_ok1); assertTrue(remove_invalid_ok2); assertTrue(OPTIONS.client.getLocalOptionState(TelnetOption.ECHO)); assertTrue(!OPTIONS.client.getLocalOptionState(TelnetOption.SUPPRESS_GO_AHEAD)); assertTrue(!OPTIONS.client.getLocalOptionState(TelnetOption.SUPPRESS_GO_AHEAD)); } /*** * test of AYT functionality ***/ public void testAYT() throws Exception { boolean ayt_true_ok = false; boolean ayt_false_ok = false; byte AYT[] = { (byte) TelnetCommand.IAC, (byte) TelnetCommand.AYT }; byte response[] = { (byte) '[', (byte) 'Y', (byte) 'e', (byte) 's', (byte) ']' }; String inputs[] = new String[1]; String outputs[] = new String[1]; inputs[0] = new String (AYT); outputs[0] = new String (response); OutputStream os = ANSI.server.getOutputStream(); InputStream is = ANSI.server.getInputStream(); TelnetTestResponder tr = new TelnetTestResponder(is, os, inputs, outputs, 30000); assertNotNull(tr); boolean res1 = ANSI.client.sendAYT(2000); if(res1 == true) ayt_true_ok=true; Thread.sleep(1000); is.skip(is.available()); boolean res2 = ANSI.client.sendAYT(2000); if(res2 == false) ayt_false_ok=true; assertTrue(ayt_true_ok); assertTrue(ayt_false_ok); } /*** * test of Spy functionality ***/ public void testSpy() throws Exception { boolean test1spy_ok = false; boolean test2spy_ok = false; boolean stopspy_ok = false; byte expected1[] = { (byte) 't', (byte) 'e', (byte) 's', (byte) 't', (byte) '1' }; byte expected2[] = { (byte) 't', (byte) 'e', (byte) 's', (byte) 't', (byte) '2' }; PipedOutputStream po = new PipedOutputStream(); PipedInputStream pi = new PipedInputStream(po); OutputStream os = STANDARD.server.getOutputStream(); OutputStream ostc = STANDARD.client.getOutputStream(); STANDARD.client.registerSpyStream(po); os.write("test1".getBytes()); os.flush(); Thread.sleep(1000); byte buffer[] = new byte[5]; if(pi.available() == 5) { pi.read(buffer); if(equalBytes(buffer, expected1)) test1spy_ok = true; } ostc.write("test2".getBytes()); ostc.flush(); Thread.sleep(1000); if(pi.available() == 5) { pi.read(buffer); if(equalBytes(buffer, expected2)) test2spy_ok = true; } STANDARD.client.stopSpyStream(); os.write("test1".getBytes()); os.flush(); ostc.write("test2".getBytes()); ostc.flush(); Thread.sleep(1000); if(pi.available() == 0) { stopspy_ok = true; } assertTrue(test1spy_ok); assertTrue(test2spy_ok); assertTrue(stopspy_ok); } /*** * test of setReaderThread ***/ public void testSetReaderThread() throws Exception { boolean negotiation1_ok = false; boolean negotiation2_ok = false; boolean read_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, }; InputStream is1 = NOREAD.server.getInputStream(); OutputStream os1 = NOREAD.server.getOutputStream(); is1.skip(is1.available()); os1.write(send1); os1.flush(); os1.write("A".getBytes()); os1.flush(); Thread.sleep(1000); InputStream instr = NOREAD.client.getInputStream(); byte[] buff = new byte[4]; int ret_read = 0; ret_read = instr.read(buff); if((ret_read == 1) && (buff[0] == 'A')) { read_ok = true; } // if(is1.available() == 6) //{ is1.read(buffread1); if(equalBytes(buffread1, expected1)) negotiation1_ok = true; //} InputStream is2 = STANDARD.server.getInputStream(); OutputStream os2 = STANDARD.server.getOutputStream(); Thread.sleep(1000); is2.skip(is2.available()); os2.write(send1); os2.flush(); Thread.sleep(1000); //if(is2.available() == 6) //{ is2.read(buffread1); if(equalBytes(buffread1, expected1)) negotiation2_ok = true; //} assertTrue(!NOREAD.client.getReaderThread()); assertTrue(STANDARD.client.getReaderThread()); assertTrue("Expected read_ok to be true, got " + read_ok, read_ok); assertTrue("Expected negotiation1_ok to be true, got " + negotiation1_ok, negotiation1_ok); assertTrue("Expected negotiation2_ok to be true, got " + negotiation2_ok, negotiation2_ok); } /*** * Helper method. compares two arrays of int ***/ protected boolean equalBytes(byte a1[], byte a2[]) { if(a1.length != a2.length) { return(false); } else { boolean result = true; for(int ii=0; ii<a1.length; ii++) { if(a1[ii]!= a2[ii]) result = false; } return(result); } } /*** * Callback method called when TelnetClient receives an option * negotiation command. * <p> * @param negotiation_code - type of negotiation command received * (RECEIVED_DO, RECEIVED_DONT, RECEIVED_WILL, RECEIVED_WONT) * <p> * @param option_code - code of the option negotiated * <p> ***/ public void receivedNegotiation(int negotiation_code, int option_code) { if(negotiation_code == TelnetNotificationHandler.RECEIVED_DO) { numdo++; } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_DONT) { numdont++; } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_WILL) { numwill++; } else if(negotiation_code == TelnetNotificationHandler.RECEIVED_WONT) { numwont++; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -