diff -r e20de85af2ee -r ce057bb09d0b genericopenlibs/openenvcore/libc/test/testsysunistd/src/tsysunistdblocks.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/openenvcore/libc/test/testsysunistd/src/tsysunistdblocks.cpp Fri Jun 04 16:20:51 2010 +0100 @@ -0,0 +1,1488 @@ +/* +* Copyright (c) 2002-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: +* +*/ + + + +#include "tsysunistd.h" + +// ----------------------------------------------------------------------------- +//Function Name :ftruncate_fileL +//API Tested :ftruncate +//API Description:Truncates the given file (using file descriptor) to the +//length specified. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::ftruncate_file( ) + { + // Print to UI + _LIT( KFailed, "Failed" ); + _LIT( KFtruncate, "In ftruncate" ); + // Print to log file + INFO_PRINTF1( KFtruncate ); + char array[KMAXCHARS]; + + char ch = 'h'; + TInt i = 0; + TInt retVal=KErrGeneral; + TInt retVal2; + off_t retSize; + TInt retrn = KErrGeneral; + + struct stat buf; + + for(i = 0; i < KMAXCHARS - 1; i++) + { + array[i] = ch; + } + + array[i] = '\0'; + + int fp = open("C:\\test_ftruncate.txt", O_RDWR|O_CREAT); + int fd; + if(fp != -1) + { + INFO_PRINTF2(_L("fp: %d"),fp ); + size_t size = write( fp, array, KMAXCHARS ); + INFO_PRINTF2(_L("Size of file after writing : %d"),size ); + INFO_PRINTF2(_L("fp: %d"),fp); + if((fp != -1) && (size == KMAXCHARS)) + { + int sizebytwo = size/2; + INFO_PRINTF2(_L("sizebytwo before ftruncate %d"),sizebytwo ); + retVal = ftruncate( fp, sizebytwo ); + INFO_PRINTF2(_L("retVal from ftruncate %d"),retVal); + close(fp); + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF1(_L("else for retVal couldn open file")); + retrn = KErrGeneral; + } + fd = open("C:\\test_ftruncate.txt", O_RDONLY); + if((fd != -1) && (!retVal)) + { + INFO_PRINTF2(_L("fd: %d"),fd ); + retVal2 = fstat( fd, &buf ); + if ( !retVal2 ) + { + retSize = buf.st_size; + if( retSize == (size/2 ) ) + { + INFO_PRINTF2(_L("Passed -> retSize = %d"),retSize); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + retrn = KErrNone; + } + else + { + INFO_PRINTF2(_L("Failed -> retSize = %d"),retSize); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + retrn = KErrGeneral; + } + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF1(_L("fstat failed")); + retrn = KErrGeneral; + } + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF1(_L("Couldn open file after truncate")); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + retrn = KErrGeneral; + } + close(fd); + int ret = remove("C:\\test_ftruncate.txt"); + } + else + { + INFO_PRINTF1(_L("Couldn create/open")); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + + return retrn ; + } + + +// ----------------------------------------------------------------------------- +//Function Name :ftruncate_dirL +//API Tested :ftruncate +//API Description:Truncates the given file (using file descriptor) to the +//length specified. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::ftruncate_dir( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KFtruncate, "In ftruncate" ); + INFO_PRINTF1( KFtruncate ); + TInt retrn = KErrGeneral; + + int mkdr = mkdir("C:\\test1", S_IWUSR); + if( !mkdr ) + { + int fp = open("C:\\test1", O_RDONLY); + if( fp != -1 ) + { + TInt retVal; + size_t size = 10; + + retVal = ftruncate( fp, size ); + + int cls = close(fp); + if( !cls ) + { + int rmdr = rmdir("C:\\test1"); + } + if( !retVal ) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed); + retrn = KErrNone; + } + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + retrn = KErrGeneral; + } + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + retrn = KErrGeneral; + } + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :ftruncate_numL +//API Tested :ftruncate +//API Description:Truncates the given file (using file descriptor) to the +//length specified. +// ----------------------------------------------------------------------------- + + +TInt CTestSysunistd::ftruncate_num( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KFtruncate, "In ftruncate" ); + INFO_PRINTF1( KFtruncate ); + TInt retrn = KErrGeneral; + + TInt retVal; + size_t size = 10; + + retVal = ftruncate( 3, size ); + + if( !retVal ) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :ftruncate_sizL +//API Tested :ftruncate +//API Description:Truncates the given file (using file descriptor) to the +//length specified. +// ----------------------------------------------------------------------------- + + +TInt CTestSysunistd::ftruncate_siz( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KFtruncate, "In ftruncate" ); + INFO_PRINTF1( KFtruncate ); + + char array[KMAXCHARS]; + + char ch = 'h'; + TInt i = 0; + TInt retVal; + TInt retrn = KErrGeneral; + + for(i = 0; i < KMAXCHARS - 1; i++) + { + array[i] = ch; + } + + array[i] = '\0'; + + int fp = open("C:\\test_siz.txt", O_RDWR|O_CREAT); + if(fp != -1) + { + size_t size = write( fp, array, KMAXCHARS ); + retVal = ftruncate( fp, size*2 ); + if(retVal == -1 ) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + close(fp); + int ret = remove("C:\\test_siz.txt"); + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + retrn = KErrGeneral; + } + return retrn ; + } +// ----------------------------------------------------------------------------- +//Function Name :fchdir_dirL +//API Tested :fchdir +//API Description:The fchdir() function shall be equivalent to chdir() except that +//the directory that is to be the new current working directory is +//specified by the file descriptor fildes. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::fchdir_dir( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KFchdir, "In fchdir" ); + INFO_PRINTF1( KFchdir ); + TInt retrn = KErrGeneral; + + TInt retVal; + + int mkdr = mkdir("C:\\test_dir", S_IWUSR); + if( !mkdr ) + { + int opn = open("C:\\test_dir", O_RDONLY); + if( opn != -1 ) + { + retVal = fchdir( opn ); + + if( !retVal ) + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone ; + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + int cls = close(opn); + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + retrn = KErrGeneral; + } + rmdir("C:\\test_dir"); + + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + retrn = KErrGeneral; + } + return retrn ; + } +// ----------------------------------------------------------------------------- +//Function Name :fchdir_fileL +//API Tested :fchdir +//API Description:The fchdir() function shall be equivalent to chdir() except that +//the directory that is to be the new current working directory is +//specified by the file descriptor fildes. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::fchdir_file( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KFchdir, "In fchdir" ); + INFO_PRINTF1( KFchdir ); + TInt retrn = KErrGeneral; + + TInt retVal; + + int opn = open("C:\\test_fchdir.txt", O_RDWR|O_CREAT); + if( opn != -1 ) + { + + retVal = fchdir( opn ); + + if( !retVal ) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + close( opn ); + int ret = remove("C:\\test_fchdir.txt"); + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + return retrn ; + } +// ----------------------------------------------------------------------------- +//Function Name :fchdir_numL +//API Tested :fchdir +//API Description:The fchdir() function shall be equivalent to chdir() except that +//the directory that is to be the new current working directory is +//specified by the file descriptor fildes. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::fchdir_num( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KFchdir, "In fchdir" ); + // Print to log file + INFO_PRINTF1( KFchdir ); + TInt retrn = KErrGeneral; + + TInt retVal; + + retVal = fchdir( 2 ); + + if( !retVal ) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + return retrn ; + } +// ----------------------------------------------------------------------------- +//Function Name :fdatasync_fileL +//API Tested :fdatasync +//API Description:The fdatasync() function shall force all currently queued I/O +//operations associated with the file indicated by file descriptor fildes to the +//synchronized I/O completion state. +// ----------------------------------------------------------------------------- + + +TInt CTestSysunistd::fdatasync_file( ) + { + + int fd ; + TBuf8<50> string ; + TPtrC String ; + TInt Expected ; + _LIT( KString, "Parameter1" ); + TBool res = GetStringFromConfig(ConfigSection(), KString, String ); + if(!res) + { + _LIT(Kerr , " Failed to read input file name from ini file ") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + + string.Copy(String) ; + + char *file = (char *) string.Ptr() ; + file[string.Length()] = '\0' ; + + + _LIT( KExpected, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), KExpected, Expected); + if(!res) + { + _LIT(Kerr , "Failed to read expected value from ini file.") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + + _LIT( KFdatasync, "In fdatasync" ); + INFO_PRINTF1( KFdatasync ); + + if(Expected < 0) + { + fdatasync(-1) ; + + if(errno != EBADF) + { + _LIT(Kerr , "Failed to set errno value ") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + return KErrNone ; + } + + if((fd = open(file , O_CREAT | O_RDWR , 0666)) < 0) + { + _LIT(Kopen , "Failed to create file ") ; + INFO_PRINTF1(Kopen) ; + return KErrGeneral ; + } + + if(fdatasync(fd) < 0) + { + _LIT(Kerr , "Fdatasync failed ") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + close(fd); + remove(file); + return KErrNone ; + } +// ----------------------------------------------------------------------------- +//Function Name :getpagesizeL +//API Tested :getpagesize +//API Description:The function getpagesize() returns the number of bytes in a +//page, where "page" defines the unit of data that is brought into memory at once +//(ex: files are mapped in page-sized units). +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::getpagesizeL( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KGetpagesize, "In getpagesize" ); + INFO_PRINTF1( KGetpagesize ); + + int retVal = 0; + TInt retrn; + + retVal = getpagesize(); + + if( retVal >= 0) + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :getpriorityL +//API Tested :getpriority +//API Description:This function checks if the which and who parameters sent +//are 'the process priority' and 'the current process' respectively,i.e. PROC_PROCESS +//and 0 respectively. The function getpriority() shall ignore the values PRIO_PGRP, +//PRIO_USER as the argument 'which' and any other value other than 0 for 'who' shall +//not be considered. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::getpriorityL( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KGetpriority, "In getpriority" ); + INFO_PRINTF1( KGetpriority ); + + int retVal = 0; + TInt retrn; + errno = 0; + retVal = getpriority(PRIO_PROCESS, 0); + + if((retVal == -1) && (errno)) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + + return retrn ; + + } +// ----------------------------------------------------------------------------- +//Function Name :getpriority_otherL +//API Tested :getpriority +//API Description:This function checks if the which and who parameters sent +//are 'the process priority' and 'the current process' respectively,i.e. PROC_PROCESS +//and 0 respectively. The function getpriority() shall ignore the values PRIO_PGRP, +//PRIO_USER as the argument 'which' and any other value other than 0 for 'who' shall +//not be considered. +// ----------------------------------------------------------------------------- + + +TInt CTestSysunistd::getpriority_other( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KGetpriority, "In getpriority" ); + INFO_PRINTF1( KGetpriority ); + + int retVal = 0; + TInt retrn; + errno = 0; + TInt which; + TInt who; + _LIT( Kwhich, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kwhich, which); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kwho, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kwho, who); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + + retVal = getpriority(which, who); + if((retVal == -1) && (errno)) + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + return retrn ; + + } +// ----------------------------------------------------------------------------- +//Function Name :setpriority_getL +//API Tested :setpriority +//API Description:This function setpriority() checks if the which and who +//parameters sent are 'the process priority' and 'the current process' respectively, +//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the +//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than +//0 for 'who' shall not be considered. +// ----------------------------------------------------------------------------- + + +TInt CTestSysunistd::setpriority_get( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KSetpriority, "In setpriority" ); + INFO_PRINTF1( KSetpriority ); + TInt prio_high, prio_low; + int retVal, retSet; + int retVal2 = -1, i; + TInt retrn=KErrNone; + errno = 0; + + retVal = getpriority(PRIO_PROCESS, 0); + + _LIT( Kprio_high, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kprio_high, prio_high); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kprio_low, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kprio_low, prio_low); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + for(i = prio_low;i> prio_high;i--) + { + if((retVal == -1) && (errno)) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + retSet = setpriority(PRIO_PROCESS, 0, retVal+i); + if(!retSet) + { + retVal2 = getpriority(PRIO_PROCESS, 0); + if(retVal2 == retVal+i) + { + INFO_PRINTF1( KPassed ); + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + } + } + retrn = KErrNone; + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :setpriority_highL +//API Tested :setpriority +//API Description:This function setpriority() checks if the which and who +//parameters sent are 'the process priority' and 'the current process' respectively, +//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the +//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than +//0 for 'who' shall not be considered. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::setpriority_high( ) + { + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KSetpriority, "In setpriority" ); + INFO_PRINTF1( KSetpriority ); + int retVal = 0, i; + TInt retrn; + errno = 0; + TInt prio_high_end; + TInt prio_high_start; + + _LIT( Kprio_high_start, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kprio_high_start, prio_high_start); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kprio_high_end, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kprio_high_end, prio_high_end); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + for (i = prio_high_start; i >= prio_high_end; i--) + { + retVal = setpriority(PRIO_PROCESS, 0, i); + if((retVal == -1) && (errno == ENOSYS)) + { + INFO_PRINTF1( KPassed ); + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + } + retrn = KErrNone; + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :setpriority_other_lowerL +//API Tested :setpriority +//API Description:This function setpriority() checks if the which and who +//parameters sent are 'the process priority' and 'the current process' respectively, +//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the +//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than +//0 for 'who' shall not be considered. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::setpriority_other_lower( ) + { + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KSetpriority, "In setpriority" ); + + INFO_PRINTF1( KSetpriority ); + int retVal = 0, i; + TInt retrn; + errno = 0; + TInt prio_low_end; + TInt prio_low_start; + + _LIT( Kprio_low_start, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kprio_low_start, prio_low_start); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kprio_low_end, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kprio_low_end, prio_low_end); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + for (i = prio_low_start; i <= prio_low_end; i++) + { + retVal = setpriority(PRIO_PROCESS, 0, i); + if(retVal == 0) + { + int retGet = getpriority(PRIO_PROCESS, 0); + if (retGet == LOWER_LIMIT_PRIORITY_LOWEST ) + { + INFO_PRINTF1( KPassed ); + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + } + retrn = KErrNone; + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :setpriority_other_higherL +//API Tested :setpriority +//API Description:This function setpriority() checks if the which and who +//parameters sent are 'the process priority' and 'the current process' respectively, +//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the +//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than +//0 for 'who' shall not be considered. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::setpriority_other_higher( ) + { + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KSetpriority, "In setpriority" ); + + INFO_PRINTF1( KSetpriority ); + int retVal = 0, i; + TInt retrn; + errno = 0; + TInt prio_high_end; + TInt prio_high_start; + + _LIT( Kprio_high_start, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kprio_high_start, prio_high_start); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kprio_high_end, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kprio_high_end, prio_high_end); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + for (i = prio_high_start; i >= prio_high_end; i--) + { + retVal = setpriority(PRIO_PROCESS, 0, i); + if(retVal == 0) + { + int retGet = getpriority(PRIO_PROCESS, 0); + if (retGet == UPPER_LIMIT_PRIORITY_ABOVE_NORMAL ) + { + INFO_PRINTF1( KPassed ); + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + } + retrn = KErrNone; + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :setpriority_other +//API Tested :setpriority +//API Description:This function setpriority() checks if the which and who +//parameters sent are 'the process priority' and 'the current process' respectively, +//i.e. PROC_PROCESS and 0 respectively.The function setpriority() shall ignore the +//values PRIO_PGRP, PRIO_USER as the argument 'which' and any other value other than +//0 for 'who' shall not be considered. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::setpriority_other( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KSetpriority, "In setpriority" ); + + INFO_PRINTF1( KSetpriority ); + + int retVal = 0, value; + TInt retrn; + errno = 0; + TInt which; + TInt who; + + _LIT( Kwhich, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kwhich, which); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kwho, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kwho, who); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kvalue, "Parameter3" ); + res = GetIntFromConfig(ConfigSection(), Kvalue, value); + if(!res) + { + _LIT(Kerr , "Failed to read third parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + retVal = setpriority(which, who, value); + if((retVal == -1) && (errno)) + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + return retrn ; + } +// ----------------------------------------------------------------------------- +//Function Name :nice_less_than_lowestL +//API Tested :nice +//API Description:The function nice() increases or decreases the priority value +//by adding the value 'incr' to the current priority.It internally uses getpriority and +//setpriority to set the priority to new value. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::nice_less_than_lowest( ) + { + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KSetpriority, "In setpriority" ); + + INFO_PRINTF1( KSetpriority ); + int retVal = 0, i; + TInt retrn; + errno = 0; + TInt prio_low_end; + TInt prio_low_start; + + _LIT( Kprio_low_start, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kprio_low_start, prio_low_start); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kprio_low_end, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kprio_low_end, prio_low_end); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + errno = 0; + for (i = prio_low_start; i >= prio_low_end; i--) + { + retVal = nice(i); + if((retVal == -1)&&(errno)) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + } + } + retrn = KErrNone; + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :nice_within_rangeL +//API Tested :nice +//API Description:The function nice() increases or decreases the priority value +//by adding the value 'incr' to the current priority.It internally uses getpriority and +//setpriority to set the priority to new value. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::nice_within_range( ) + { + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KSetpriority, "In nice" ); + + INFO_PRINTF1( KSetpriority ); + int retVal = 0, i; + TInt retrn; + errno = 0; + TInt prio_end; + TInt prio_start; + + _LIT( Kprio_start, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kprio_start, prio_start); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kprio_end, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kprio_end, prio_end); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + errno = 0; + for (i = prio_start; i >= prio_end; i--) + { + retVal = nice(i); + if((retVal == -1)&&(errno)) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + } + } + retrn = KErrNone; + return retrn ; + } +// ----------------------------------------------------------------------------- +//Function Name :nice_more_than_highestL +//API Tested :nice +//API Description:The function nice() increases or decreases the priority value +//by adding the value 'incr' to the current priority.It internally uses getpriority and +//setpriority to set the priority to new value. +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::nice_more_than_highest( ) + { + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KSetpriority, "In nice" ); + INFO_PRINTF1( KSetpriority ); + int retVal = 0, i; + TInt retrn; + errno = 0; + TInt prio_high_end; + TInt prio_high_start; + + _LIT( Kprio_high_start, "Parameter1" ); + TBool res = GetIntFromConfig(ConfigSection(), Kprio_high_start, prio_high_start); + if(!res) + { + _LIT(Kerr , "Failed to read first parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + _LIT( Kprio_high_end, "Parameter2" ); + res = GetIntFromConfig(ConfigSection(), Kprio_high_end, prio_high_end); + if(!res) + { + _LIT(Kerr , "Failed to read second parameter from ini file") ; + INFO_PRINTF1(Kerr) ; + return KErrGeneral ; + } + errno = 0; + + for (i = prio_high_start; i >= prio_high_end; i--) + { + retVal = nice(i); + if((retVal == -1)&&(errno)) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + } + } + retrn = KErrNone; + return retrn ; + } + +// ----------------------------------------------------------------------------- +//Function Name :pathconf_validL +//API Tested :pathconf +//API Description:pathconf returns configuration option name +//input --> _PC_XXXX_XXXX constants +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::pathconf_valid() + { + _LIT( KFailed, "Failed" ); + TInt ret = KErrNone; + + INFO_PRINTF1(_L("In pathconf_Test0L")); + + int fp = open("C:\\test_pathconf1.txt", O_RDWR|O_CREAT); + if(fp != -1) + { + int n = pathconf("C:\\test_pathconf1.txt", _PC_LINK_MAX); + + INFO_PRINTF2(_L("{Expected: (> _POSIX_LINK_MAX) } %d"), n); + + if( n < _POSIX_LINK_MAX ) + { + ret = KErrGeneral; + } + + n = pathconf("C:\\test_pathconf1.txt", _PC_NAME_MAX); + + INFO_PRINTF2(_L("{Expected: (> _POSIX_NAME_MAX) } %d"), n); + + if( n < _POSIX_NAME_MAX ) + { + ret = KErrGeneral; + } + + n = pathconf("C:\\test_pathconf1.txt", _PC_PATH_MAX); + + INFO_PRINTF2(_L("{Expected: (> _POSIX_PATH_MAX) } %d"), n); + + if( n < _POSIX_PATH_MAX ) + { + ret = KErrGeneral; + } + + n = pathconf("C:\\test_pathconf1.txt", _PC_PIPE_BUF); + + INFO_PRINTF2(_L("{Expected: (> _POSIX_PIPE_BUF) } %d"), n); + + if( n < _POSIX_PIPE_BUF ) + { + + ret = KErrGeneral; + } + + close(fp); + int retVal = remove("C:\\test_pathconf1.txt"); + } + else + { + INFO_PRINTF1( KFailed ); + ret = KErrGeneral; + } + return ret; + } + + +// ----------------------------------------------------------------------------- +//Function Name :pathconf_invalidL +//API Tested :pathconf +//API Description:pathconf sets EINVAL when invalid constant is the input +//input --> _PC_XXXX_XXXX constants +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::pathconf_invalid() + { + TInt ret = KErrNone; + _LIT( KFailed, "Failed" ); + INFO_PRINTF1(_L("In pathconf_Test1L")); + + + #define _PC_INV_CONST 100 + + errno = 0; + int fp = open("C:\\test_pathconf.txt", O_RDWR|O_CREAT); + if(fp != -1) + { + int n = pathconf("C:\\test_pathconf.txt", _PC_INV_CONST); + + INFO_PRINTF2(_L("{Expected: -1 } %d"), n); + + if( n != -1 || errno != EINVAL) + { + INFO_PRINTF2(_L("errno was set to - %d"), errno); + ret = KErrGeneral; + } + close(fp); + int retVal = remove("C:\\test_pathconf.txt"); + } + else + { + INFO_PRINTF1( KFailed ); + INFO_PRINTF2(_L("The errno value is %d\n"),errno); + ret = KErrGeneral; + } + + return ret; + } + +// ----------------------------------------------------------------------------- +//Function Name :unameL +//API Tested :uname +//API Description:The uname function stores NUL -terminated strings of +//information identifying the current system into the structure referenced by +//utsname structure( that consists sysname, nodename, release, version, machine). +// ----------------------------------------------------------------------------- + +TInt CTestSysunistd::unameL( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KFtruncate, "In uname" ); + // Print to log file + INFO_PRINTF1( KFtruncate ); + TInt retrn = KErrGeneral; + + TInt retVal; + struct utsname name; + + + retVal = uname( &name ); + + if( !retVal ) + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + else + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + + return retrn ; + + } + +// ----------------------------------------------------------------------------- +//Function Name :uname_nullL +//API Tested :uname +//API Description:The uname function stores NUL -terminated strings of +//information identifying the current system into the structure referenced by +//utsname structure( that consists sysname, nodename, release, version, machine). +// ----------------------------------------------------------------------------- +TInt CTestSysunistd::uname_null( ) + { + + // Print to UI + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + + _LIT( KFtruncate, "In uname_null" ); + // Print to log file + INFO_PRINTF1( KFtruncate ); + TInt retrn = KErrGeneral; + + TInt retVal; + struct utsname* name = NULL; + errno = 0; + + retVal = uname( name ); + + if( !retVal ) + { + INFO_PRINTF1( KFailed ); + retrn = KErrGeneral; + } + else + { + INFO_PRINTF1( KPassed ); + retrn = KErrNone; + } + + return retrn ; + } + +/*Test Case Name :ftruncate_fileL + *API Tested :ftruncate() + *Test case Description :To Check the error condtion by using a large value (off_t) which are greater than TInt(32 bit). + */ + +TInt CTestSysunistd::ftruncate_negTest( ) + { + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + TInt retrn = KErrGeneral; + TInt retval = 0; +#if defined(SYMBIAN_OE_LARGE_FILE_SUPPORT) && !defined(SYMBIAN_OE_NO_LFS) + off_t offval = ULLONG_MAX; +#else + off_t offval = UINT_MAX; +#endif /* SYMBIAN_OE_LARGE_FILE_SUPPORT && !SYMBIAN_OE_NO_LFS */ + int fp = open("C:\\truncate.txt", O_RDWR|O_CREAT); + if(fp != -1) + { + retval = ftruncate( fp,offval); + INFO_PRINTF2(_L("Value returned by truncate in this case is : %d"), retval); + INFO_PRINTF2(_L("errno was set to : %d"), errno); + if(retval == -1 && errno == 22) + { + INFO_PRINTF1( KPassed); + retrn = KErrNone; + } + else + { + INFO_PRINTF1(KFailed); + } + } + close(fp); + unlink("C:\\truncate.txt"); + return retrn ; + } + +/*Test Case Name :truncate_fileL + *API Tested :truncate() + * Test case Description:To Check the error condtion by using a large value (off_t) which are greater than TInt(32 bit). + */ + +TInt CTestSysunistd::truncate_negTest( ) + { + _LIT( KPassed, "Passed" ); + _LIT( KFailed, "Failed" ); + TInt retrn = KErrGeneral; + TInt retval = 0; +#if defined(SYMBIAN_OE_LARGE_FILE_SUPPORT) && !defined(SYMBIAN_OE_NO_LFS) + off_t offval = ULLONG_MAX; +#else + off_t offval = UINT_MAX; +#endif /* SYMBIAN_OE_LARGE_FILE_SUPPORT && !SYMBIAN_OE_NO_LFS */ + char file[15] = "C:\\input.txt"; + int fp = open("c:\\input.txt", O_RDWR|O_CREAT); + if(fp ==-1) + { + INFO_PRINTF2(_L("File opening failed with errno =%d\n"),errno); + return KErrGeneral; + } + retval = truncate(file, offval); + INFO_PRINTF2(_L("Value returned by truncate in this case is : %d"), retval); + INFO_PRINTF2(_L("errno was set to : %d"), errno); + if(retval == -1 && errno == 22) + { + INFO_PRINTF1( KPassed); + retrn = KErrNone; + } + else + { + INFO_PRINTF1(KFailed); + } + close(fp); + unlink("C:\\input.txt"); + return retrn ; + } + + +/*Test Case Name :fcntl_largefileTest + *API Tested :fcntl() + *Test case Description:To Check whether fcntl() call returns the correct fd when F_DUPFD is passed. + */ + +TInt CTestSysunistd::fcntl_largefileTest( ) + { + int retVal = KErrNone; + char* filedir = "c:\\largefile.txt"; + off_t length = 0xFF;//255 + int fd = open(filedir, O_CREAT|O_RDWR, 0666); + int val = ftruncate(fd, length); + int thirdarg = 7; + + int ret; + int fd2 = fcntl(fd, F_DUPFD, thirdarg); + INFO_PRINTF2(_L("first fcntl call returns = %d"), fd2); + if(fd2 >= thirdarg) + { + INFO_PRINTF2(_L("Passed, the file descriptor is >= third argument i.e %d"), thirdarg); + } + else + { + ERR_PRINTF2(_L("Failed, the file descriptor is < third argument i.e %d"), thirdarg); + retVal = -1; + close(fd); + close(fd2); + unlink(filedir); + return retVal; + } + thirdarg = 10; + int fd3 = fcntl(fd, F_DUPFD, thirdarg); + INFO_PRINTF2(_L("second fcntl call returns = %d"), fd3); + if(fd3 >= thirdarg) + { + INFO_PRINTF2(_L("Passed, the file descriptor is >= third argument i.e %d"), thirdarg); + } + else + { + ERR_PRINTF2(_L("Failed, the file descriptor is < third argument i.e %d"), thirdarg); + retVal = -1; + goto cleanup; + } + //making use of the duplicate fd3 obtained by the fcntl call + ret = write(fd3, "merlyn", 6); + if (6 == ret) + { + INFO_PRINTF2(_L("write returns = %d"), ret); + } + else + { + ERR_PRINTF3(_L("write returns = %d and errno = %d\n"), ret, errno); + retVal = -1; + goto cleanup; + } + ret = lseek(fd3, -255, SEEK_END);//seek to begining of file + if (0 == ret) + { + INFO_PRINTF2(_L("lseek returns = %d"), ret); + } + else + { + ERR_PRINTF3(_L("lseek returns = %d and errno = %d"), ret, errno); + retVal = -1; + goto cleanup; + } + char buf[20]; + ret = read(fd3, buf, 6); + if ((6 == ret) && (strncmp(buf, "merlyn", 6) == 0)) + { + INFO_PRINTF2(_L("read returns = %d"), ret); + } + else + { + ERR_PRINTF3(_L("read returns = %d and errno = %d"), ret, errno); + retVal = -1; + goto cleanup; + } +cleanup: + close(fd); + close(fd2); + close(fd3); + unlink(filedir); + return retVal; + } + +// ----------------------------------------------------------------------------- +// CTestSysunistd::?member_function +// ?implementation_description +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// + + +// ========================== OTHER EXPORTED FUNCTIONS ========================= +// None + +// End of File