/** * This file is part of ElasticDroid. * * ElasticDroid is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * ElasticDroid is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with ElasticDroid. If not, see <http://www.gnu.org/licenses/>. * * Authored by siddhu on 15 Dec 2010 */ package org.elasticdroid.test; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Properties; import org.apache.http.ConnectionClosedException; import org.elasticdroid.model.SshConnectorModel; import org.elasticdroid.testharness.TestListActivity; import android.content.Intent; import android.test.ActivityInstrumentationTestCase2; /** * @author siddhu * * 15 Dec 2010 */ public class SSHConnectorModelTest extends ActivityInstrumentationTestCase2<TestListActivity> { /** * Test connection Data */ private HashMap<String, String> connectionData; /** * properties file with test connection data */ private Properties connectionProperties; /** * properties file with test input data */ private Properties inputProperties; /** * Test output properties */ private Properties outputProperties; /** * @param activityClass * @throws IOException */ public SSHConnectorModelTest() { super("org.elasticdroid.testharness", TestListActivity.class); } public void setUp() { connectionProperties = new Properties(); inputProperties = new Properties(); outputProperties = new Properties(); InputStream connectionPropStream, inputPropStream, expOutPropStream; //read input and expected output try { connectionPropStream = getInstrumentation().getContext().getResources().getAssets(). open("ec2_connection_data.properties"); inputPropStream = getInstrumentation().getContext().getResources().getAssets().open( "ssh_connector_input.properties"); expOutPropStream = getInstrumentation().getContext().getResources(). getAssets().open("ssh_connector_output.properties"); connectionProperties.load(connectionPropStream); inputProperties.load(inputPropStream); outputProperties.load(expOutPropStream); } catch (IOException e) { e.printStackTrace(); System.exit(-1); } //add connection data connectionData = new HashMap<String, String>(); connectionData.put("username", connectionProperties.getProperty("username")); connectionData.put("accessKey", connectionProperties.getProperty("accessKey")); connectionData.put("secretAccessKey", connectionProperties.getProperty ("secretAccessKey")); connectionData.put("endpoint", connectionProperties.getProperty("endpoint")); //pass a blank intent to the activity Intent intent = new Intent(); setActivityIntent(intent); } /** * SUCCESS TEST: Test if SSHConnector returns a URI when the machine has port 22 open * to this device's IP. * * Expected return value: String */ public void testPort22Open() { SshConnectorModel sshConnectorModel = new SshConnectorModel(getActivity(), connectionData, inputProperties.getProperty("username"), inputProperties.getProperty("hostname") ); Object result = sshConnectorModel.prepareSshUri(new String[]{inputProperties.getProperty( "testPort22Open.securityGroups")}); if (!(result instanceof String)) { fail("Expected result of type string, as port 22 is open."); } } /** * SUCCESS TEST: Test if SSHConnector returns a URI when the machine has another port (not 22) * open to this device's IP. * * Expected return value: String */ public void testSpecifiedPortOpen() { SshConnectorModel sshConnectorModel = new SshConnectorModel(getActivity(), connectionData, inputProperties.getProperty("username"), inputProperties.getProperty("hostname"), Integer.valueOf(inputProperties.getProperty("testSpecifiedPortOpen.toPort")) ); Object result = sshConnectorModel.prepareSshUri(new String[]{inputProperties.getProperty( "testSpecifiedPortOpen.securityGroups")}); if (!(result instanceof String)) { fail("Expected result of type string, as port is open."); } } /** * FAILURE: Test if SSHConnector returns a URI when the selected port is not open * * Expected return value: ConnectionClosedException */ public void testSpecifiedPortClosed() { SshConnectorModel sshConnectorModel = new SshConnectorModel(getActivity(), connectionData, inputProperties.getProperty("username"), inputProperties.getProperty("hostname"), Integer.valueOf(inputProperties.getProperty("testSpecifiedPortClosed.toPort")) ); Object result = sshConnectorModel.prepareSshUri(new String[]{inputProperties.getProperty( "testSpecifiedPortClosed.securityGroups")}); if (!(result instanceof ConnectionClosedException)) { fail("Expected result of type string, as port is open."); } else { ConnectionClosedException exception = (ConnectionClosedException) result; assertEquals("This port is not open", exception.getMessage()); } } /** * FAILURE: Test if SSHConnector returns a URI when the selected IP address range is not open. * * Expected return value: ConnectionClosedException */ public void testDeviceIpBlocked() { SshConnectorModel sshConnectorModel = new SshConnectorModel(getActivity(), connectionData, inputProperties.getProperty("username"), inputProperties.getProperty("hostname"), Integer.valueOf(inputProperties.getProperty("testDeviceIpBlocked.toPort")) ); Object result = sshConnectorModel.prepareSshUri(new String[]{inputProperties.getProperty( "testDeviceIpBlocked.securityGroups")}); if (!(result instanceof ConnectionClosedException)) { fail("Expected result of type ConnectionClosedException."); } else { ConnectionClosedException exception = (ConnectionClosedException) result; assertEquals("Your IP address is not allowed to access this port", exception.getMessage()); } } }