You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							312 lines
						
					
					
						
							13 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							312 lines
						
					
					
						
							13 KiB
						
					
					
				
								/* /////////////////////////////////////////////////////////////////////////
							 | 
						|
								 * File:        test/unit/test.unit.be.N/test.unit.be.N.c
							 | 
						|
								 *
							 | 
						|
								 * Purpose:     Implementation file for the test.unit.be.N project.
							 | 
						|
								 *
							 | 
						|
								 * Created:     29th January 2008
							 | 
						|
								 * Updated:     22nd March 2010
							 | 
						|
								 *
							 | 
						|
								 * Status:      Wizard-generated
							 | 
						|
								 *
							 | 
						|
								 * License:     (Licensed under the Synesis Software Open License)
							 | 
						|
								 *
							 | 
						|
								 *              Copyright (c) 2008-2010, Synesis Software Pty Ltd.
							 | 
						|
								 *              All rights reserved.
							 | 
						|
								 *
							 | 
						|
								 *              www:        http://www.synesis.com.au/software
							 | 
						|
								 *
							 | 
						|
								 * ////////////////////////////////////////////////////////////////////// */
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								#include <pantheios/backends/be.N.h>
							 | 
						|
								#include <pantheios/init_codes.h>
							 | 
						|
								
							 | 
						|
								#include <xtests/xtests.h>
							 | 
						|
								
							 | 
						|
								#include <stlsoft/stlsoft.h>        /* for STLSOFT_NUM_ELEMENTS */
							 | 
						|
								
							 | 
						|
								#include <stdio.h>                  /* for fprintf() */
							 | 
						|
								#include <stdlib.h>                 /* for EXIT_SUCCESS, EXIT_FAILURE */
							 | 
						|
								
							 | 
						|
								const PAN_CHAR_T PANTHEIOS_FE_PROCESS_IDENTITY[] = PANTHEIOS_LITERAL_STRING("test.unit.be.N");
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								#define DECLARE_BACK_END_IMPL_N(n)                                          \
							 | 
						|
								                                                                            \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_N_test_ ## n ## _init(                 \
							 | 
						|
								        PAN_CHAR_T const*   processIdentity                                 \
							 | 
						|
								    ,   int                 backEndId                                       \
							 | 
						|
								    ,   void const*         init                                            \
							 | 
						|
								    ,   void*               reserved                                        \
							 | 
						|
								    ,   void**              ptoken                                          \
							 | 
						|
								    );                                                                      \
							 | 
						|
								    PANTHEIOS_CALL(void) pantheios_be_N_test_ ## n ## _uninit(void* token); \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_N_test_ ## n ## _logEntry(             \
							 | 
						|
								        void*               beToken                                         \
							 | 
						|
								    ,   void*               feToken                                         \
							 | 
						|
								    ,   int                 severity                                        \
							 | 
						|
								    ,   PAN_CHAR_T const*   entry                                           \
							 | 
						|
								    ,   size_t              cchEntry                                        \
							 | 
						|
								    );                                                                      \
							 | 
						|
								                                                                            \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_N_test_ ## n ## _init(                 \
							 | 
						|
								        PAN_CHAR_T const*   processIdentity                                 \
							 | 
						|
								    ,   int                 backEndId                                       \
							 | 
						|
								    ,   void const*         init                                            \
							 | 
						|
								    ,   void*               reserved                                        \
							 | 
						|
								    ,   void**              ptoken                                          \
							 | 
						|
								    )                                                                       \
							 | 
						|
								    {                                                                       \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(processIdentity);                           \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(backEndId);                                 \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(init);                                      \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(reserved);                                  \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(ptoken);                                    \
							 | 
						|
								                                                                            \
							 | 
						|
								        if(s_retVals[n] >= 0)                                               \
							 | 
						|
								        {                                                                   \
							 | 
						|
								            ++s_initCounts[n];                                              \
							 | 
						|
								        }                                                                   \
							 | 
						|
								                                                                            \
							 | 
						|
								        return s_retVals[n];                                                \
							 | 
						|
								    }                                                                       \
							 | 
						|
								                                                                            \
							 | 
						|
								    PANTHEIOS_CALL(void) pantheios_be_N_test_ ## n ## _uninit(void* token)  \
							 | 
						|
								    {                                                                       \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(token);                                     \
							 | 
						|
								                                                                            \
							 | 
						|
								        --s_initCounts[n];                                                  \
							 | 
						|
								    }                                                                       \
							 | 
						|
								                                                                            \
							 | 
						|
								    PANTHEIOS_CALL(int) pantheios_be_N_test_ ## n ## _logEntry(             \
							 | 
						|
								        void*               beToken                                         \
							 | 
						|
								    ,   void*               feToken                                         \
							 | 
						|
								    ,   int                 severity                                        \
							 | 
						|
								    ,   PAN_CHAR_T const*   entry                                           \
							 | 
						|
								    ,   size_t              cchEntry                                        \
							 | 
						|
								    )                                                                       \
							 | 
						|
								    {                                                                       \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(beToken);                                   \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(feToken);                                   \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(severity);                                  \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(entry);                                     \
							 | 
						|
								        STLSOFT_SUPPRESS_UNUSED(cchEntry);                                  \
							 | 
						|
								                                                                            \
							 | 
						|
								        return 0;                                                           \
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								#define NUM_BACKENDS    (5)
							 | 
						|
								
							 | 
						|
								static int s_retVals[1 + NUM_BACKENDS];     /* 0th element is not used. */
							 | 
						|
								static int s_initCounts[1 + NUM_BACKENDS];  /* 0th element is not used. */
							 | 
						|
								static int s_flags[1 + NUM_BACKENDS] =
							 | 
						|
								{
							 | 
						|
								    -1,     /* 0th element is not used. */
							 | 
						|
								    0,
							 | 
						|
								    PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE,
							 | 
						|
								    0,
							 | 
						|
								    0,
							 | 
						|
								    PANTHEIOS_BE_N_F_INIT_ONLY_IF_PREVIOUS_FAILED
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								DECLARE_BACK_END_IMPL_N(1)
							 | 
						|
								DECLARE_BACK_END_IMPL_N(2)
							 | 
						|
								DECLARE_BACK_END_IMPL_N(3)
							 | 
						|
								DECLARE_BACK_END_IMPL_N(4)
							 | 
						|
								DECLARE_BACK_END_IMPL_N(5)
							 | 
						|
								
							 | 
						|
								pan_be_N_t PAN_BE_N_BACKEND_LIST[] =
							 | 
						|
								{
							 | 
						|
								    /* NOTE: The flags in this one are ignored, as they're set up every time
							 | 
						|
								     * by the reset_state_() function (below) and the test setup code.
							 | 
						|
								     */
							 | 
						|
								
							 | 
						|
								    PANTHEIOS_BE_N_STDFORM_ENTRY(1, pantheios_be_N_test_1, 0),
							 | 
						|
								    PANTHEIOS_BE_N_STDFORM_ENTRY(2, pantheios_be_N_test_2, 0),
							 | 
						|
								    PANTHEIOS_BE_N_STDFORM_ENTRY(3, pantheios_be_N_test_3, 0),
							 | 
						|
								    PANTHEIOS_BE_N_STDFORM_ENTRY(4, pantheios_be_N_test_4, 0),
							 | 
						|
								    PANTHEIOS_BE_N_STDFORM_ENTRY(5, pantheios_be_N_test_5, 0),
							 | 
						|
								    PANTHEIOS_BE_N_TERMINATOR_ENTRY
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								static void reset_state_(void)
							 | 
						|
								{
							 | 
						|
								    int i;
							 | 
						|
								    for(i = 0; i != NUM_BACKENDS; ++i)
							 | 
						|
								    {
							 | 
						|
								        PAN_BE_N_BACKEND_LIST[i].flags  =   s_flags[1 + i]; /* Replace the desired flags */
							 | 
						|
								        s_retVals[i]                    =   0;              /* Mark to pass */
							 | 
						|
								        s_initCounts[0]                 =   0;              /* Reset init ref count */
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								/* ////////////////////////////////////////////////////////////////////// */
							 | 
						|
								
							 | 
						|
								int main(int argc, char** argv)
							 | 
						|
								{
							 | 
						|
								    int retCode = EXIT_SUCCESS;
							 | 
						|
								    int verbosity = 2;
							 | 
						|
								
							 | 
						|
								    XTESTS_COMMANDLINE_PARSEVERBOSITY(argc, argv, &verbosity);
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    STLSOFT_STATIC_ASSERT(NUM_BACKENDS + 1 == STLSOFT_NUM_ELEMENTS(s_retVals));
							 | 
						|
								    STLSOFT_STATIC_ASSERT(NUM_BACKENDS + 1 == STLSOFT_NUM_ELEMENTS(s_initCounts));
							 | 
						|
								    STLSOFT_STATIC_ASSERT(NUM_BACKENDS + 1 == STLSOFT_NUM_ELEMENTS(s_flags));
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								    if(XTESTS_START_RUNNER("test.unit.be.N", verbosity))
							 | 
						|
								    {
							 | 
						|
								        /* Test-1 */
							 | 
						|
								        if(XTESTS_CASE_BEGIN("Test-1", "Verify that all five succeed"))
							 | 
						|
								        {
							 | 
						|
								            void*   token;
							 | 
						|
								            int     res;
							 | 
						|
								
							 | 
						|
								            reset_state_();
							 | 
						|
								
							 | 
						|
								            res = pantheios_be_init(PANTHEIOS_FE_PROCESS_IDENTITY, NULL, &token);
							 | 
						|
								
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(PANTHEIOS_INIT_RC_SUCCESS, res);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(1, s_initCounts[1]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(1, s_initCounts[2]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(1, s_initCounts[3]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(1, s_initCounts[4]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[5]);
							 | 
						|
								
							 | 
						|
								            pantheios_be_uninit(token);
							 | 
						|
								
							 | 
						|
								            XTESTS_CASE_END("Test-1");
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /* Test-2 */
							 | 
						|
								        if(XTESTS_CASE_BEGIN("Test-2", "Verify that #1 failure causes all to fail"))
							 | 
						|
								        {
							 | 
						|
								            void*   token;
							 | 
						|
								            int     res;
							 | 
						|
								
							 | 
						|
								            reset_state_();
							 | 
						|
								
							 | 
						|
								            s_retVals[1]    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								
							 | 
						|
								            res = pantheios_be_init(PANTHEIOS_FE_PROCESS_IDENTITY, NULL, &token);
							 | 
						|
								
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE, res);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[1]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[2]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[3]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[4]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[5]);
							 | 
						|
								
							 | 
						|
								            /* pantheios_be_uninit(token); */
							 | 
						|
								
							 | 
						|
								            XTESTS_CASE_END("Test-2");
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /* Test-3 */
							 | 
						|
								        if(XTESTS_CASE_BEGIN("Test-3", "Verify that #2 failure is benign"))
							 | 
						|
								        {
							 | 
						|
								            void*   token;
							 | 
						|
								            int     res;
							 | 
						|
								
							 | 
						|
								            reset_state_();
							 | 
						|
								
							 | 
						|
								            s_retVals[2]    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								
							 | 
						|
								            res = pantheios_be_init(PANTHEIOS_FE_PROCESS_IDENTITY, NULL, &token);
							 | 
						|
								
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(PANTHEIOS_INIT_RC_SUCCESS, res);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(1, s_initCounts[1]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[2]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(1, s_initCounts[3]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(1, s_initCounts[4]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[5]);
							 | 
						|
								
							 | 
						|
								            pantheios_be_uninit(token);
							 | 
						|
								
							 | 
						|
								            XTESTS_CASE_END("Test-3");
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /* Test-4 */
							 | 
						|
								        if(XTESTS_CASE_BEGIN("Test-4", "Verify that failure of 4 out of five, where all ignore init-failure, does not cause failure"))
							 | 
						|
								        {
							 | 
						|
								            void*   token;
							 | 
						|
								            int     res;
							 | 
						|
								
							 | 
						|
								            reset_state_();
							 | 
						|
								
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[0].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[1].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[2].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[3].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[4].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								
							 | 
						|
								            s_retVals[1]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								            s_retVals[2]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								            s_retVals[3]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								            s_retVals[4]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								            s_retVals[5]                    =   0;
							 | 
						|
								
							 | 
						|
								            res = pantheios_be_init(PANTHEIOS_FE_PROCESS_IDENTITY, NULL, &token);
							 | 
						|
								
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(PANTHEIOS_INIT_RC_SUCCESS, res);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[1]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[2]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[3]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[4]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(1, s_initCounts[5]);
							 | 
						|
								
							 | 
						|
								            pantheios_be_uninit(token);
							 | 
						|
								
							 | 
						|
								            XTESTS_CASE_END("Test-4");
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        /* Test-5 */
							 | 
						|
								        if(XTESTS_CASE_BEGIN("Test-5", "Verify that failure of 5 out of five, where all ignore init-failure, does cause failure"))
							 | 
						|
								        {
							 | 
						|
								            void*   token;
							 | 
						|
								            int     res;
							 | 
						|
								
							 | 
						|
								            reset_state_();
							 | 
						|
								
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[0].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[1].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[2].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[3].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								            PAN_BE_N_BACKEND_LIST[4].flags  =   PANTHEIOS_BE_N_F_IGNORE_INIT_FAILURE;
							 | 
						|
								
							 | 
						|
								            s_retVals[1]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								            s_retVals[2]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								            s_retVals[3]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								            s_retVals[4]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								            s_retVals[5]                    =   PANTHEIOS_FE_INIT_RC_INTENDED_FAILURE;
							 | 
						|
								
							 | 
						|
								            res = pantheios_be_init(PANTHEIOS_FE_PROCESS_IDENTITY, NULL, &token);
							 | 
						|
								
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(PANTHEIOS_BE_INIT_RC_ALL_BACKEND_INITS_FAILED, res);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[1]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[2]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[3]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[4]);
							 | 
						|
								            XTESTS_TEST_INTEGER_EQUAL(0, s_initCounts[5]);
							 | 
						|
								
							 | 
						|
								            /* pantheios_be_uninit(token); */
							 | 
						|
								
							 | 
						|
								            XTESTS_CASE_END("Test-5");
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								        XTESTS_PRINT_RESULTS();
							 | 
						|
								
							 | 
						|
								        XTESTS_END_RUNNER_UPDATE_EXITCODE(&retCode);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return retCode;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								/* ///////////////////////////// end of file //////////////////////////// */
							 |