diff -r f5050f1da672 -r 04becd199f91 javamanager/debugapi/tsrc/src.s60/testjavadebugapi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javamanager/debugapi/tsrc/src.s60/testjavadebugapi.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,218 @@ +/* +* Copyright (c) 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: Tests for Java Debug API +* +*/ +#include +#include +#include +#include +#include +#include +#include + + +#include "TestHarness.h" +#include "logger.h" +#include "javacommonutils.h" +#include "exceptionbase.h" +#include "javasymbianoslayer.h" +#include "javadebugapi.h" + +const char INSTALL_DIR[] = "c:\\java\\debugapitest\\"; +const char JAD_EXTENSION[] = ".jad"; +const char JAR_EXTENSION[] = ".jar"; + +const char* UEI_PARAMS = "-Xverbose:all,allocation,gc,gcverbose,class,classverbose,verifier,stackmaps," + "bytecodes,frames,stackchunks,exceptions,events,threading,monitors,networking" + "-Xdebug -Xrunjdwp:server=y,address=localhost:8000"; + +void logStrings(std::string aArg) +{ + LOG1(EDebugApi, EInfo, " '%s'", aArg.c_str()); +} + +std::list getFileList(const std::string& aPath, const std::string& aExtension) +{ + + std::list files; + + DIR *pDIR = opendir(aPath.c_str()); + if (pDIR != NULL) + { + struct dirent* pDirEnt = readdir(pDIR); + while (pDirEnt != NULL) + { + //check if file extension matches + if (strcmp((pDirEnt->d_name + strlen(pDirEnt->d_name) - aExtension.length()), aExtension.c_str()) == 0) + { + std::string file; + file = aPath + pDirEnt->d_name; + files.push_back(file); + } + pDirEnt = readdir(pDIR); + } + closedir(pDIR); + } + + return files; +} + + + +TEST_GROUP(TestJavaDebugApi) +{ + TEST_SETUP() + { + } + + TEST_TEARDOWN() + { + } +}; + + +/** + * Tests install, start, stop and uninstall for JADs + */ +TEST(TestJavaDebugApi, runAllJads) +{ + std::list files; + files = getFileList(INSTALL_DIR, JAD_EXTENSION); + LOG(EDebugApi, EInfo, "JAD files"); + std::for_each(files.begin(), files.end(), logStrings); + + CHECK(files.size() != 0); // fail if no files found + + for (std::list::const_iterator iter = files.begin(); iter != files.end(); ++iter) + { + // install app + std::auto_ptr filename(stringToDes((*iter).c_str())); + TUid suiteUid; + RArray applicationUids; + int rc = java::debug::installApp(*filename, suiteUid, applicationUids); + CHECK(rc == (int)ETrue); + + // start and stop each app + for (int i = 0; i < applicationUids.Count(); i++) + { + std::auto_ptr ueiParams(stringToDes(UEI_PARAMS)); + TProcessId pid; + rc = java::debug::startApp(applicationUids[i], *ueiParams, pid); + CHECK(rc == (int)ETrue); + RProcess process; + rc = process.Open(pid); + CHECK(rc == KErrNone); + TRequestStatus status; + process.Logon(status); + // wait a while so that runtime has got ueiParams + usleep(300000); //0.3s + rc = java::debug::stopApp(applicationUids[i]); + CHECK(rc == (int)ETrue); + User::WaitForRequest(status); + process.Close(); + } + + // uninstall app + rc = java::debug::uninstallApp(suiteUid); + CHECK(rc == (int)ETrue); + + applicationUids.Reset(); + } +} + +/** + * Tests install, start, stop and uninstall for JARs + */ +TEST(TestJavaDebugApi, runAllJars) +{ + EXPECT_N_LEAKS(1); + std::list files; + files = getFileList(INSTALL_DIR, JAR_EXTENSION); + LOG(EDebugApi, EInfo, "JAR files"); + std::for_each(files.begin(), files.end(), logStrings); + + CHECK(files.size() != 0); // fail if no files found + + for (std::list::const_iterator iter = files.begin(); iter != files.end(); ++iter) + { + // install app + std::auto_ptr filename(stringToDes((*iter).c_str())); + TUid suiteUid; + RArray applicationUids; + int rc = java::debug::installApp(*filename, suiteUid, applicationUids); + CHECK(rc == (int)ETrue); + + // start and stop each app + for (int i = 0; i < applicationUids.Count(); i++) + { + std::auto_ptr ueiParams(stringToDes(UEI_PARAMS)); + TProcessId pid; + rc = java::debug::startApp(applicationUids[i], *ueiParams, pid); + CHECK(rc == (int)ETrue); + RProcess process; + rc = process.Open(pid); + CHECK(rc == KErrNone); + TRequestStatus status; + process.Logon(status); + // wait a while so that runtime has got ueiParams + usleep(300000); //0.3s + rc = java::debug::stopApp(applicationUids[i]); + CHECK(rc == (int)ETrue); + User::WaitForRequest(status); + process.Close(); + } + + // uninstall app + rc = java::debug::uninstallApp(suiteUid); + CHECK(rc == (int)ETrue); + + applicationUids.Reset(); + } +} + +TEST(TestJavaDebugApi, installError) +{ + std::string file = "thisfiledoesnotexists.jar"; + std::auto_ptr filename(stringToDes(file.c_str())); + TUid suiteUid; + RArray applicationUids; + int rc = java::debug::installApp(*filename, suiteUid, applicationUids); + CHECK(rc == (int)EFalse); +} + +TEST(TestJavaDebugApi, uninstallError) +{ + EXPECT_N_LEAKS(1); + TUid suiteUid = TUid::Null(); + int rc = java::debug::uninstallApp(suiteUid); + CHECK(rc == (int)EFalse); +} + +TEST(TestJavaDebugApi, startError) +{ + TUid appUid = TUid::Null(); + std::auto_ptr ueiParams(stringToDes(UEI_PARAMS)); + TProcessId pid = 0; + int rc = java::debug::startApp(appUid, *ueiParams, pid); + CHECK(rc == (int)EFalse); +} + +TEST(TestJavaDebugApi, stopError) +{ + EXPECT_N_LEAKS(1); + TUid appUid = TUid::Null(); + int rc = java::debug::stopApp(appUid); + CHECK(rc == (int)ETrue); +}