package edu.illinois.geoalarm.test;
import android.app.Activity;
import android.database.SQLException;
import android.test.ActivityInstrumentationTestCase2;
import edu.illinois.geoalarm.*;
import com.jayway.android.robotium.solo.Solo;
import android.test.suitebuilder.annotation.Smoke;
/**
* Tests the data usage portion of the app. Does this by setting values to zero,
* starting network activity, and then checking that values changed
* @author GeoAlarm
*
*/
public class DataUsageTest extends ActivityInstrumentationTestCase2<GeoAlarm>
{
Activity mActivity;
Activity mCurrentActivity;
Solo solo;
GeoAlarmDB database;
int latitude = -10238511;
int longitude = 40104150;
public DataUsageTest()
{
super("edu.illinois.geoalarm", GeoAlarm.class);
}
@Override
protected void setUp() throws Exception
{
super.setUp();
mActivity = this.getActivity();
solo = new Solo(getInstrumentation(), getActivity());
database = new GeoAlarmDB(mActivity);
try
{
database.openDataBase();
}
catch (SQLException e)
{
e.printStackTrace();
throw e;
}
database.setBytes(GeoAlarmDB.DB_TX_SESSION, 0);
database.setBytes(GeoAlarmDB.DB_RX_SESSION, 0);
database.setBytes(GeoAlarmDB.DB_TX, 0);
database.setBytes(GeoAlarmDB.DB_RX, 0);
database.setBytes(GeoAlarmDB.DB_RX_TARE_SESSION, 0);
database.setBytes(GeoAlarmDB.DB_TX_TARE_SESSION, 0);
solo.sendKey(Solo.MENU);
solo.clickOnText("Options");
solo.assertCurrentActivity("Expected Options Activity", Options.class);
}
@Override
protected void tearDown() throws Exception
{
solo.goBack();
database.close();
mActivity.finish();
super.tearDown();
}
/**
* Tests that TX session usage data is updated correctly
* @throws InterruptedException
*/
@Smoke
public void testTXSessionDataUsage() throws InterruptedException
{
String sessionTX = solo.getText(12).getText().toString(); // Corresponds to sessionTX
assertEquals(" 0 MB", sessionTX);
long sessionTXbytes = database.getBytes(GeoAlarmDB.DB_TX_SESSION);
assertEquals(sessionTXbytes, 0);
// Transition to Map activity to transfer some data, the transition back
solo.goBack();
solo.clickOnImage(1); // Corresponds to map button
// Animate the map to cause data transfer
Thread.sleep(1000);
((RouteMap)solo.getCurrentActivity()).setMapCenter(latitude, longitude);
latitude -= 1000;
longitude-= 1000;
Thread.sleep(1000);
//Transition to options activity
solo.goBack();
solo.sendKey(Solo.MENU);
solo.clickOnText("Options");
sessionTX = solo.getText(12).getText().toString(); // Corresponds to sessionTX
assertFalse(sessionTX.equals(" 0 MB"));
sessionTXbytes = database.getBytes(GeoAlarmDB.DB_TX_SESSION);
assertTrue(sessionTXbytes > 0);
}
/**
* Tests that RX session usage data is updated correctly
* @throws InterruptedException
*/
@Smoke
public void testRXSessionDataUsage() throws InterruptedException
{
String sessionRX = solo.getText(14).getText().toString(); // Corresponds to sessionRX
assertEquals(" 0 MB", sessionRX);
long sessionRXbytes = database.getBytes(GeoAlarmDB.DB_RX_SESSION);
assertEquals(0, sessionRXbytes);
// Transition to Map activity to transfer some data, the transition back
solo.goBack();
solo.clickOnImage(1); // Corresponds to map button
// Animate the map to cause data transfer
Thread.sleep(1000);
((RouteMap)solo.getCurrentActivity()).setMapCenter(latitude, longitude);
latitude -= 1000;
longitude-= 1000;
Thread.sleep(1000);
//Transition to options activity
solo.goBack();
solo.sendKey(Solo.MENU);
solo.clickOnText("Options");
sessionRX = solo.getText(14).getText().toString(); // Corresponds to sessionRX
assertFalse(sessionRX.equals(" 0 MB"));
sessionRXbytes = database.getBytes(GeoAlarmDB.DB_RX_SESSION);
assertTrue(sessionRXbytes > 0);
}
/**
* Tests that TX total usage data is updated correctly
* @throws InterruptedException
*/
@Smoke
public void testTotalTXDataUsage() throws InterruptedException
{
String totalTX = solo.getText(16).getText().toString(); // Corresponds to totalTX
assertEquals(" 0 MB", totalTX);
long totalTXBytes = database.getBytes(GeoAlarmDB.DB_TX);
assertEquals(0, totalTXBytes);
// Transition to Map activity to transfer some data, the transition back
solo.goBack();
solo.clickOnImage(1); // Corresponds to map button
// Animate the map to cause data transfer
Thread.sleep(1000);
((RouteMap)solo.getCurrentActivity()).setMapCenter(latitude, longitude);
latitude -= 1000;
longitude-= 1000;
Thread.sleep(1000);
//Transition to options activity
solo.goBack();
solo.sendKey(Solo.MENU);
solo.clickOnText("Options");
totalTX = solo.getText(16).getText().toString();
assertFalse(totalTX.equals(" 0 MB"));
totalTXBytes = database.getBytes(GeoAlarmDB.DB_TX);
assertTrue(totalTXBytes > 0);
}
/**
* Tests the RX usage data is updated correctly
* @throws InterruptedException
*/
@Smoke
public void testTotalRXDataUsage() throws InterruptedException
{
String totalRX = solo.getText(18).getText().toString(); // Corresponds to totalRX
assertEquals(" 0 MB", totalRX);
long totalRXBytes = database.getBytes(GeoAlarmDB.DB_RX);
assertEquals(0, totalRXBytes);
// Transition to Map activity
solo.goBack();
solo.clickOnImage(1); // Corresponds to map button
// Animate the map to cause data transfer
Thread.sleep(1000);
((RouteMap)solo.getCurrentActivity()).setMapCenter(latitude, longitude);
latitude -= 1000;
longitude-= 1000;
Thread.sleep(1000);
//Transition to options activity
solo.goBack();
solo.sendKey(Solo.MENU);
solo.clickOnText("Options");
totalRX = solo.getText(18).getText().toString();
assertFalse(totalRX.equals(" 0 MB"));
totalRXBytes = database.getBytes(GeoAlarmDB.DB_RX);
assertTrue(totalRXBytes > 0);
}
}