2007-11-29 12:54:54 +00:00
/*
* Copyright 2007 Bill Medland
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2.1 of the License , or ( at your option ) any later version .
*
* This library 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
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 , USA
*/
# include <wine/test.h>
# include <stdarg.h>
# include "windef.h"
# include "winbase.h"
# include "odbcinst.h"
static void test_SQLConfigMode ( void )
{
BOOL bool_ret ;
DWORD error_code ;
RETCODE sql_ret ;
UWORD config_mode ;
int i ;
ok ( SQLGetConfigMode ( NULL ) , " SQLGetConfigMode(NULL) should succeed \n " ) ;
bool_ret = SQLGetConfigMode ( & config_mode ) ;
ok ( bool_ret & & config_mode = = ODBC_BOTH_DSN , " Failed to get the initial SQLGetConfigMode or it was not both \n " ) ;
bool_ret = SQLSetConfigMode ( 3 ) ;
sql_ret = SQLInstallerErrorW ( 1 , & error_code , NULL , 0 , NULL ) ;
ok ( ! bool_ret & & sql_ret = = SQL_SUCCESS_WITH_INFO & & error_code = = ODBC_ERROR_INVALID_PARAM_SEQUENCE , " SQLSetConfigMode with invalid argument did not fail correctly \n " ) ;
ok ( ODBC_SYSTEM_DSN = = 2 & & ODBC_USER_DSN = = 1 & & ODBC_BOTH_DSN = = 0 , " SQLSetConfigMode modes not as expected \n " ) ;
for ( i = ODBC_SYSTEM_DSN ; i > = ODBC_BOTH_DSN ; - - i )
{
ok ( SQLSetConfigMode ( ( UWORD ) i ) , " SQLSetConfigMode Failed to set config mode \n " ) ;
bool_ret = SQLGetConfigMode ( & config_mode ) ;
ok ( bool_ret & & config_mode = = i , " Failed to confirm SQLSetConfigMode. \n " ) ;
}
/* And that leaves it correctly on BOTH */
}
static void test_SQLInstallerError ( void )
{
RETCODE sql_ret ;
/* MSDN states that the error number should be between 1 and 8. Passing 0 is an error */
sql_ret = SQLInstallerError ( 0 , NULL , NULL , 0 , NULL ) ;
ok ( sql_ret = = SQL_ERROR , " SQLInstallerError(0...) failed with %d instead of SQL_ERROR \n " , sql_ret ) ;
/* However numbers greater than 8 do not return SQL_ERROR.
2008-05-12 08:33:26 +00:00
* I am currently unsure as to whether it should return SQL_NO_DATA or " the same as for error 8 " ;
2007-11-29 12:54:54 +00:00
* I have never been able to generate 8 errors to test it
*/
sql_ret = SQLInstallerError ( 65535 , NULL , NULL , 0 , NULL ) ;
ok ( sql_ret = = SQL_NO_DATA , " SQLInstallerError(>8...) failed with %d instead of SQL_NO_DATA \n " , sql_ret ) ;
/* Force an error to work with. This should generate ODBC_ERROR_INVALID_BUFF_LEN */
ok ( ! SQLGetInstalledDrivers ( 0 , 0 , 0 ) , " Failed to force an error for testing \n " ) ;
sql_ret = SQLInstallerError ( 2 , NULL , NULL , 0 , NULL ) ;
ok ( sql_ret = = SQL_NO_DATA , " Too many errors when forcing an error for testing \n " ) ;
/* Null pointers are acceptable in all obvious places */
sql_ret = SQLInstallerError ( 1 , NULL , NULL , 0 , NULL ) ;
ok ( sql_ret = = SQL_SUCCESS_WITH_INFO , " SQLInstallerError(null addresses) failed with %d instead of SQL_SUCCESS_WITH_INFO \n " , sql_ret ) ;
}
static void test_SQLInstallDriverManager ( void )
{
BOOL bool_ret ;
RETCODE sql_ret ;
DWORD error_code ;
CHAR target_path [ MAX_PATH ] ;
WORD path_out ;
/* NULL check */
bool_ret = SQLInstallDriverManager ( NULL , 0 , NULL ) ;
sql_ret = SQLInstallerErrorW ( 1 , & error_code , NULL , 0 , NULL ) ;
ok ( ! bool_ret , " SQLInstallDriverManager unexpectedly succeeded \n " ) ;
todo_wine
ok ( sql_ret = = SQL_SUCCESS_WITH_INFO & & error_code = = ODBC_ERROR_INVALID_BUFF_LEN ,
" Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN \n " ) ;
/* Length smaller than MAX_PATH */
bool_ret = SQLInstallDriverManager ( target_path , MAX_PATH / 2 , NULL ) ;
sql_ret = SQLInstallerErrorW ( 1 , & error_code , NULL , 0 , NULL ) ;
todo_wine {
ok ( ! bool_ret , " SQLInstallDriverManager unexpectedly succeeded \n " ) ;
ok ( sql_ret = = SQL_SUCCESS_WITH_INFO & & error_code = = ODBC_ERROR_INVALID_BUFF_LEN ,
" Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN \n " ) ;
}
path_out = 0xcafe ;
bool_ret = SQLInstallDriverManager ( target_path , MAX_PATH / 2 , & path_out ) ;
sql_ret = SQLInstallerErrorW ( 1 , & error_code , NULL , 0 , NULL ) ;
todo_wine {
ok ( ! bool_ret , " SQLInstallDriverManager unexpectedly succeeded \n " ) ;
ok ( sql_ret = = SQL_SUCCESS_WITH_INFO & & error_code = = ODBC_ERROR_INVALID_BUFF_LEN ,
" Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN \n " ) ;
ok ( path_out = = 0xcafe , " Expected path_out to not have changed \n " ) ;
}
/* Length OK */
bool_ret = SQLInstallDriverManager ( target_path , MAX_PATH , NULL ) ;
sql_ret = SQLInstallerErrorW ( 1 , & error_code , NULL , 0 , NULL ) ;
2009-05-17 07:05:22 +00:00
ok ( bool_ret , " SQLInstallDriverManager unexpectedly failed: %d \n " ,
error_code ) ;
if ( bool_ret )
ok ( sql_ret = = SQL_NO_DATA , " Expected SQL_NO_DATA, got %d \n " , sql_ret ) ;
else
ok ( sql_ret = = SQL_SUCCESS_WITH_INFO ,
" Expected SQL_SUCCESS_WITH_INFO, got %d \n " , sql_ret ) ;
2007-11-29 12:54:54 +00:00
path_out = 0xcafe ;
bool_ret = SQLInstallDriverManager ( target_path , MAX_PATH , & path_out ) ;
sql_ret = SQLInstallerErrorW ( 1 , & error_code , NULL , 0 , NULL ) ;
2009-05-17 07:05:22 +00:00
ok ( bool_ret , " SQLInstallDriverManager unexpectedly failed: %d \n " ,
error_code ) ;
if ( bool_ret )
ok ( sql_ret = = SQL_NO_DATA , " Expected SQL_NO_DATA, got %d \n " , sql_ret ) ;
else
ok ( sql_ret = = SQL_SUCCESS_WITH_INFO ,
" Expected SQL_SUCCESS_WITH_INFO, got %d \n " , sql_ret ) ;
2007-11-29 12:54:54 +00:00
/* path_out should in practice be less than 0xcafe */
ok ( path_out ! = 0xcafe , " Expected path_out to show the correct amount of bytes \n " ) ;
}
START_TEST ( misc )
{
test_SQLConfigMode ( ) ;
test_SQLInstallerError ( ) ;
test_SQLInstallDriverManager ( ) ;
}