1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 23:05:47 +02:00

[249102] created unit tests for shells subsystem.

This commit is contained in:
Anna Dushistova 2008-10-01 14:50:39 +00:00
parent c4b6e60cea
commit 2a7a61e020
2 changed files with 175 additions and 0 deletions

View file

@ -47,6 +47,7 @@ public class RSEShellSubsystemTestSuite extends DelegatingTestSuiteHolder {
TestSuite suite = new TestSuite("RSEShellSubsystemTestSuite"); //$NON-NLS-1$
// add the single test suites to the overall one here.
suite.addTestSuite(ShellServiceTest.class);
suite.addTestSuite(ShellSubSystemTest.class);
return suite;
}

View file

@ -0,0 +1,174 @@
/*******************************************************************************
* Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Anna Dushistova (MontaVista) - adapted from FileServiceTest
* Anna Dushistova (MontaVista) - [249102][testing] Improve ShellService Unittests
*******************************************************************************/
package org.eclipse.rse.tests.subsystems.shells;
import java.lang.reflect.Method;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.services.shells.IShellService;
import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteCommandShell;
import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteOutput;
import org.eclipse.rse.subsystems.shells.core.subsystems.servicesubsystem.IShellServiceSubSystem;
import org.eclipse.rse.subsystems.shells.core.subsystems.servicesubsystem.ShellServiceSubSystem;
import org.eclipse.rse.tests.core.connection.RSEBaseConnectionTestCase;
public class ShellSubSystemTest extends RSEBaseConnectionTestCase {
private String fPropertiesFileName;
// For testing the test: verify methods on Local
public static String fDefaultPropertiesFile = "localConnection.properties";
private IShellServiceSubSystem shellSubSystem;
private IProgressMonitor mon = new NullProgressMonitor();
/**
* Constructor with specific test name.
*
* @param name
* test to execute
*/
public ShellSubSystemTest(String name) {
this(name, fDefaultPropertiesFile);
}
/**
* Constructor with connection type and specific test name.
*
* @param name
* test to execute
* @param propertiesFileName
* file with connection properties to use
*/
public ShellSubSystemTest(String name, String propertiesFileName) {
super(name);
fPropertiesFileName = propertiesFileName;
if (propertiesFileName != null) {
int idx = propertiesFileName.indexOf("Connection.properties");
String targetName = propertiesFileName.substring(0, idx);
setTargetName(targetName);
}
}
public static Test suite() {
String baseName = ShellSubSystemTest.class.getName();
TestSuite suite = new TestSuite(baseName);
// // Add a test suite for each connection type
String[] connTypes = { "local", "ssh" };
// String[] connTypes = { "local" };
// String[] connTypes = { "ssh" };
for (int i = 0; i < connTypes.length; i++) {
String suiteName = connTypes[i];
String propFileName = connTypes[i] == null ? null : connTypes[i]
+ "Connection.properties";
TestSuite subSuite = new TestSuite(baseName + "." + suiteName);
Method[] m = ShellSubSystemTest.class.getMethods();
for (int j = 0; j < m.length; j++) {
String testName = m[j].getName();
if (testName.startsWith("test")) {
subSuite.addTest(new ShellSubSystemTest(testName,
propFileName));
}
}
suite.addTest(subSuite);
}
return suite;
}
protected IShellServiceSubSystem getShellServiceSubSystem() {
if (fPropertiesFileName == null) {
return null;
}
IHost host = getHost(fPropertiesFileName);
ISubSystem[] ss = RSECorePlugin.getTheSystemRegistry()
.getServiceSubSystems(host, IShellService.class);
for (int i = 0; i < ss.length; i++) {
if (ss[i] instanceof ShellServiceSubSystem) {
return (ShellServiceSubSystem) ss[i];
}
}
return null;
}
public void setUp() throws Exception {
super.setUp();
shellSubSystem = getShellServiceSubSystem();
shellSubSystem.checkIsConnected(getDefaultProgressMonitor());
}
public void tearDown() throws Exception {
super.tearDown();
}
public boolean isWindows() {
return shellSubSystem.getHost().getSystemType().isWindows();
}
public void testRunShell() throws Exception {
// the IRemoteCommandShell returned should have getOutputAt() and
// similar methods
if (shellSubSystem.canRunShell()) {
IRemoteCommandShell cmd = shellSubSystem.runShell(null, mon);
assertNotNull(cmd);
shellSubSystem.sendCommandToShell("echo test"+shellSubSystem.getParentRemoteCmdSubSystemConfiguration().getCommandSeparator()+" exit", cmd, mon);
while (cmd.isActive()) {
Thread.sleep(200);
}
assertNotNull(cmd.getOutputAt(0));
shellSubSystem.removeShell(cmd);
}
}
public void testRunCommand() throws Exception {
if (shellSubSystem.canRunCommand()) {
Object[] results = shellSubSystem
.runCommand("echo test\r\nexit", null, mon);
boolean matchFound = false;
Object cmdObject = results[0];
assertTrue(cmdObject instanceof IRemoteCommandShell);
while (((IRemoteCommandShell)cmdObject).isActive()) {
Thread.sleep(200);
}
Object[] result = ((IRemoteCommandShell) cmdObject)
.listOutput();
for (int i = 0; i < result.length; i++) {
System.out.println(((IRemoteOutput) result[i]).getText());
matchFound = ((IRemoteOutput) result[i]).getText().equals(
"test");
if (matchFound)
break;
}
assertTrue(matchFound);
}
}
public void testCancelShell() throws Exception {
if (shellSubSystem.canRunShell()) {
IRemoteCommandShell cmd = shellSubSystem.runShell(null, mon);
shellSubSystem.cancelShell(cmd, mon);
assertFalse(cmd.isActive());
}
}
}