Java tutorial
/* * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" * which accompanies this distribution, and is available * at the URL "http://www.eclipse.org/legal/epl-v10.html". * * Initial Contributors: * Nokia Corporation - initial contribution. * * Contributors: * * Description: * */ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.regex.Matcher; import java.util.regex.Pattern; import junit.framework.TestCase; import org.apache.commons.net.telnet.TelnetClient; public class TelnetTest extends TestCase { /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ TelnetClient telnetClient = new TelnetClient(); InputStream is; OutputStream os; byte promptBuffer[] = new byte[11]; //"localhost# " String prompt = "localhost# "; //FTP&Telnet-Connection-001 //To Establish a connection from remote host to Symbian OS device(H2/H4) protected void setUp() throws Exception { super.setUp(); String address = System.getProperty("address"); telnetClient.connect(/*"172.0.0.3"*/address); is = telnetClient.getInputStream(); os = telnetClient.getOutputStream(); is.read(promptBuffer); } /* (non-Javadoc) * @see junit.framework.TestCase#tearDown() */ //FTP&Telnet-Connection-002 //To Close a connection from remote host to Symbian OS device(H2/H4) protected void tearDown() throws Exception { super.tearDown(); os.write("exit\r\n".getBytes()); os.flush(); telnetClient.disconnect(); } private String readUntil(InputStream in, String pattern) throws IOException { StringBuffer sb = new StringBuffer(); while (!(sb.toString().endsWith(prompt))) { sb.append((char) in.read()); } return sb.toString(); } public void testAYT() throws IOException, IllegalArgumentException, InterruptedException { assertTrue(telnetClient.sendAYT(5000)); } public void testCd() throws IOException { os.write("cd c:\r\n".getBytes()); os.flush(); is.read(promptBuffer); //"localhost# " assertEquals(prompt, new String(promptBuffer)); } public void testPwd() throws IOException { os.write("pwd\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); s = s.substring(1, s.indexOf(prompt)); assertEquals(":\\Private\\2000cd0f\\\r\n", s); } public void testCdPwd() throws IOException { os.write("cd c:\r\n".getBytes()); os.flush(); is.read(promptBuffer); //"localhost# " assertEquals(new String(promptBuffer), prompt); os.write("pwd\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); s = s.substring(0, s.indexOf(prompt)); assertEquals("c:\r\n", s); } //DEF117414 //zsh cannot run external commands after running 82 commands //TODO: change maxIter to 100 when fixed public void testPs() throws IOException { int maxIter = 2; for (int i = 0; i < maxIter; i++) { os.write("ps\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); s = s.substring(0, s.indexOf(prompt)); System.out.println(s); System.out.println("iteration " + (i + 1) + " of " + maxIter); Pattern p = Pattern.compile(".*ps.EXE\\[2000ee91\\]\\d\\d\\d\\d\r\n$", Pattern.DOTALL | Pattern.CASE_INSENSITIVE); //Pattern.DOTALL => '.' includes end of line Matcher m = p.matcher(s); assertTrue(m.matches()); } } //DEF116570 //after few successful ps and grep, when you do ps and grep on non exsiting string the emulator hangs public void testPsGrepNonExistingString() throws IOException { int maxIter = 2; for (int i = 0; i < maxIter; i++) { os.write("ps | grep nonexisting\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); s = s.substring(0, s.indexOf(prompt)); assertEquals(0, s.length()); } } //FTP&Telnet-Remote Execution-001 //To Launch a process on a remote Symbian OS device(H2/H4) from PC public void testFTP_Telnet_Remote_Execution_001() throws IOException { os.write("testexecute c:\\nonexisting.script\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); assertEquals(11, s.length()); } //FTP&Telnet-Remote Execution-002 //To pool all the process on the symbian OS device(H2/H4) from PC public void testFTP_Telnet_Remote_Execution_002() throws IOException { os.write("ps\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); s = s.substring(0, s.indexOf(prompt)); // System.out.println(s); Pattern p = Pattern.compile(".*ps.EXE\\[2000ee91\\]\\d\\d\\d\\d\r\n$", Pattern.DOTALL | Pattern.CASE_INSENSITIVE); //Pattern.DOTALL => '.' includes end of line Matcher m = p.matcher(s); assertTrue(m.matches()); } //FTP&Telnet-Remote Execution-003 // Kill any process on Symbian OS device(H2/H4) from PC public void testFTP_Telnet_Remote_Execution_003() throws IOException { os.write("testexecute\r\n".getBytes()); os.flush(); //this shell will lock, open another one and kill TEF TelnetClient tc = new TelnetClient(); tc.connect(telnetClient.getRemoteAddress()); InputStream is2 = tc.getInputStream(); OutputStream os2 = tc.getOutputStream(); readUntil(is2, prompt); os2.write("ps | grep TestExecute\r\n".getBytes()); os2.flush(); String s = readUntil(is2, prompt); Pattern p = Pattern.compile(".*\\D+(\\d+)\\s[\\s:\\d]+TestExecute Script Engine.*", Pattern.DOTALL | Pattern.CASE_INSENSITIVE); //Pattern.DOTALL => '.' includes end of line Matcher m = p.matcher(s); assertTrue(m.matches()); String s1 = m.group(1); int pid = Integer.parseInt(s1); os2.write(("kill " + pid + "\r\n").getBytes()); os2.flush(); readUntil(is2, prompt); os2.write("bye\r\n".getBytes()); os2.flush(); //we should be able now to close the other shell readUntil(is, prompt); } //FTP&Telnet-Remote Execution-004 //To verify the output stream of any Symbian OS process(H2/H4) to PC public void testFTP_Telnet_Remote_Execution_004() throws IOException { os.write("helloworld $PIPE\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); assertTrue(s.length() > 0); //should print "ABCDEFG...".length() > 0 } //FTP&Telnet-Remote Execution-005 //To verify the Standard Error display on Symbian OS device(H2/H4) to PC public void testFTP_Telnet_Remote_Execution_005() throws IOException { os.write("aaa\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); assertEquals("zsh: command not found: aaa", s.substring(0, s.lastIndexOf("\r\n"))); } //FTP&Telnet-Software Install-001 //Install a SIS file on the Symbian OS device (H2/H4) from PC public void testFTP_Telnet_Install_001() throws IOException { os.write("install c:\\10210d02.sis\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); assertEquals("Return Code: 0", s.substring(0, s.lastIndexOf("\r\n"))); } //FTP&Telnet-Software Install-002 //Uninstall the SIS file on the symbian OS device (H2/H4) from PC public void testFTP_Telnet_Install_002() throws IOException { os.write("uninstall 10210d02\r\n".getBytes()); os.flush(); String s = readUntil(is, prompt); assertEquals("Return Code: 0", s.substring(0, s.lastIndexOf("\r\n"))); } }