LCOV - code coverage report
Current view: top level - test - suite_libdebug-memtrack.c (source / functions) Hit Total Coverage
Test: libdebug.info Lines: 484 500 96.8 %
Date: 2025-02-25 19:28:31 Functions: 25 25 100.0 %

          Line data    Source code
       1             : /**   @file  suite_libdebug-memtrack.c
       2             :  *   @brief  Check Libdebug memtrack functions
       3             :  *  @author  François Cerbelle (Fanfan), francois@cerbelle.net
       4             :  *
       5             :  *  @internal
       6             :  *       Created:  24/06/2024
       7             :  *      Revision:  none
       8             :  * Last modified:  2024-12-19 19:51
       9             :  *      Compiler:  gcc
      10             :  *  Organization:  Cerbelle.net
      11             :  *     Copyright:  Copyright (c) 2024, François Cerbelle
      12             :  *
      13             :  *  This source code is released for free distribution under the terms of the
      14             :  *  GNU General Public License as published by the Free Software Foundation.
      15             :  */
      16             : 
      17             : #ifdef HAVE_CONFIG_H
      18             : #include "config.h"
      19             : #endif
      20             : 
      21             : #define _XOPEN_SOURCE 500                       /* snprintf */
      22             : #include "libdebug/memtrack.h"
      23             : #include "oom.h"                                /* oomfill_setup */
      24             : #include <check.h>
      25             : #include <unistd.h>                             /* pid_t getpid() */
      26             : #include <sys/stat.h>                           /* mkdir(), chdir(), mode_t */
      27             : #include <stdio.h>                              /* fprintf */
      28             : #include <stdlib.h>                             /* abort() */
      29             : #include "checktools.inc"
      30             : 
      31             : #ifndef NDEBUG
      32             : extern void memtrack_reset();
      33             : #endif
      34             : 
      35             : #ifndef NDEBUG
      36           3 : START_TEST(getallocatedRAM_first) {
      37             :     unsigned int l_result;
      38             : 
      39             :     oomfill_fill(_i*sizeof(TMemBlock),2);
      40           3 :     l_result=memtrack_getallocatedRAM();
      41             :     oomfill_free();
      42             :     /* Always 0, except when initialized WithData */
      43             :     /* Uninitialized returns 0, Initialized returns 0, OOM uninitialized returns 0 */
      44           3 :     ck_assert(0==l_result);
      45           3 : }
      46             : END_TEST
      47             : #endif /* NDEBUG */
      48             : 
      49             : #ifndef NDEBUG
      50           3 : START_TEST(getallocatedblocks_first) {
      51             :     unsigned int l_result;
      52             :     oomfill_fill(_i*sizeof(TMemBlock),2);
      53           3 :     l_result = memtrack_getallocatedblocks();
      54             :     oomfill_free();
      55             :     /* Always 0, except when initialized WithData */
      56             :     /* Uninitialized returns 0, Initialized returns 0, OOM uninitialized returns 0 */
      57           3 :     ck_assert(l_result==0);
      58           3 : }
      59             : END_TEST
      60             : #endif /* NDEBUG */
      61             : 
      62             : #ifndef NDEBUG
      63           6 : START_TEST(getblocksize_first) {
      64             :     size_t l_result;
      65             : 
      66             :     oomfill_fill(_i*sizeof(TMemBlock),2);
      67           6 :     l_result = memtrack_getblocksize(NULL);
      68             :     oomfill_free();
      69             :     /* Always 0, because asking for "NULL" size */
      70           6 :     ck_assert(0==l_result);
      71           6 : }
      72             : END_TEST
      73             : #endif /* NDEBUG */
      74             : 
      75             : #ifndef NDEBUG
      76           6 : START_TEST(getblocksize_null) {
      77             :     uint64_t l_NbBlocks;
      78             :     size_t l_BlockSize;
      79             :     size_t l_RAMSize;
      80             : 
      81             :     /* LibMemTrack consistency check preparation */
      82           6 :     l_NbBlocks=memtrack_getallocatedblocks();
      83           6 :     l_RAMSize=memtrack_getallocatedRAM();
      84           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
      85             : 
      86             :     /* Run tests under constraint */
      87             :     /* Already initialized in previous lines, thus no need for allocation */
      88             :     oomfill_fill(_i,2);
      89           6 :     l_BlockSize=memtrack_getblocksize(NULL);
      90             :     oomfill_free();
      91             : 
      92             :     /* Check expected results */
      93           6 :     ck_assert_msg(0==l_BlockSize,"Blocksize of NULL pointer should be 0");
      94             : 
      95             :     /* Check no new block registered */
      96           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
      97           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
      98           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
      99           6 : }
     100             : END_TEST
     101             : #endif /* NDEBUG */
     102             : 
     103             : #ifndef NDEBUG
     104           6 : START_TEST(getblocksize_missing) {
     105             :     uint64_t l_NbBlocks;
     106             :     size_t l_BlockSize;
     107             :     size_t l_RAMSize;
     108             : 
     109             :     /* LibMemTrack consistency check preparation */
     110           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     111           6 :     l_RAMSize=memtrack_getallocatedRAM();
     112           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     113             : 
     114             :     /* Already initialized in previous lines, thus no need for allocation */
     115             :     oomfill_fill(_i,2);
     116           6 :     l_BlockSize=memtrack_getblocksize((void*)999);
     117             :     oomfill_free();
     118             : 
     119             :     /* Check results */
     120           6 :     ck_assert_msg(0==l_BlockSize,"Blocksize of missing pointer should be 0");
     121             : 
     122             :     /* Check no new block registered */
     123           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     124           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     125           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     126           6 : }
     127             : END_TEST
     128             : #endif /* NDEBUG */
     129             : 
     130             : #ifndef NDEBUG
     131           6 : START_TEST(addblock_null_first) {
     132             :     unsigned int l_result;
     133             : 
     134             :     /* First test to trigger autoinit */
     135             :     /* Try to create/update a new blocks with null values */
     136             :     /* Initialize memtrack and fail */
     137             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     138           6 :     l_result = memtrack_addblock(
     139             :                    NULL,       /* Pointer */
     140             :                    10,         /* Size */
     141             :                    __FILE__,   /* Source code filename */
     142             :                    __LINE__,   /* Source code line number */
     143             :                    __DATE__,   /* Compilation date */
     144             :                    __TIME__,   /* Compilation time */
     145             :                    __func__    /* Source code function, GNU extension */
     146             :                );
     147             :     oomfill_free();
     148             : 
     149             :     /* Check results */
     150           6 :     ck_assert_msg(1==l_result,"Should not be able to register a NULL pointer");
     151           6 :     ck_assert_msg(0==memtrack_getblocksize(NULL),"Blocksize of NULL pointer should be 0");
     152             :     /* Can not check the block counters value, it depends on WithData */
     153           6 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     154           6 : }
     155             : END_TEST
     156             : #endif
     157             : 
     158             : #ifndef NDEBUG
     159           6 : START_TEST(delblock_null_first) {
     160             :     unsigned int l_result;
     161             : 
     162             :     /* Initialize memtrack and fail */
     163             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     164           6 :     l_result = memtrack_delblock(
     165             :                    NULL,       /* Pointer */
     166             :                    __FILE__,   /* Source code filename */
     167             :                    __LINE__,   /* Source code line number */
     168             :                    __DATE__,   /* Compilation date */
     169             :                    __TIME__,   /* Compilation time */
     170             :                    __func__    /* Source code function, GNU extension */
     171             :                );
     172             :     oomfill_free();
     173             : 
     174             :     /* Check results */
     175           6 :     ck_assert_msg(1==l_result,"Should not be able to unregister a NULL pointer");
     176           6 :     ck_assert_msg(0==memtrack_getblocksize(NULL),"Blocksize of NULL pointer should be 0");
     177             :     /* Can not check the block counters value, it depends on WithData */
     178           6 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     179           6 : }
     180             : END_TEST
     181             : #endif
     182             : 
     183             : #ifndef NDEBUG
     184           6 : START_TEST(addblock_null) {
     185             :     uint64_t l_NbBlocks;
     186             :     size_t l_RAMSize;
     187             :     unsigned int result;
     188             : 
     189             :     /* LibMemTrack consistency check preparation */
     190           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     191           6 :     l_RAMSize=memtrack_getallocatedRAM();
     192           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     193             : 
     194             :     /* Already initialized in previous lines, thus no need for allocation */
     195             :     /* Try to create/update a new blocks with null values, fails, no need for RAM */
     196             :     oomfill_fill(_i,2);
     197           6 :     result=memtrack_addblock(
     198             :                NULL,       /* Pointer */
     199             :                10,         /* Size */
     200             :                __FILE__,   /* Source code filename */
     201             :                __LINE__,   /* Source code line number */
     202             :                __DATE__,   /* Compilation date */
     203             :                __TIME__,   /* Compilation time */
     204             :                __func__    /* Source code function, GNU extension */
     205             :            );
     206             :     oomfill_free();
     207             : 
     208             :     /* Check results */
     209           6 :     ck_assert_msg(1==result,"Should not be able to register a NULL pointer");
     210           6 :     ck_assert_msg(0==memtrack_getblocksize(NULL),"Blocksize of NULL pointer should be 0");
     211           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     212           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     213           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     214           6 : }
     215             : END_TEST
     216             : #endif
     217             : 
     218             : #ifndef NDEBUG
     219           6 : START_TEST(addblock_duplicate) {
     220             :     uint64_t l_NbBlocks;
     221             :     size_t l_RAMSize;
     222             :     unsigned int result;
     223             : 
     224             :     /* LibMemTrack consistency check preparation */
     225           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     226           6 :     l_RAMSize=memtrack_getallocatedRAM();
     227           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     228             : 
     229             :     /* Already initialized in previous lines, thus no need for allocation */
     230             :     /* Try to create/update one new block  */
     231             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     232           6 :     result=memtrack_addblock(
     233             :                (void*)999, /* Pointer */
     234             :                10,         /* Size */
     235             :                __FILE__,   /* Source code filename */
     236             :                __LINE__,   /* Source code line number */
     237             :                __DATE__,   /* Compilation date */
     238             :                __TIME__,   /* Compilation time */
     239             :                __func__    /* Source code function, GNU extension */
     240             :            );
     241             :     oomfill_free();
     242           6 :     ck_assert((0==result)||(oomfill_enabled()));
     243           6 :     if (0!=result) {
     244             :         /* OOM occured, fix that */
     245           0 :         result=memtrack_addblock(
     246             :                    (void*)999, /* Pointer */
     247             :                    10,         /* Size */
     248             :                    __FILE__,   /* Source code filename */
     249             :                    __LINE__,   /* Source code line number */
     250             :                    __DATE__,   /* Compilation date */
     251             :                    __TIME__,   /* Compilation time */
     252             :                    __func__    /* Source code function, GNU extension */
     253             :                );
     254             :     }
     255           6 :     l_NbBlocks+=1;
     256           6 :     l_RAMSize+=10;
     257             : 
     258             :     /* Check results */
     259           6 :     ck_assert_msg(0==result,"Should able to register a pointer");
     260           6 :     ck_assert_msg(10==memtrack_getblocksize((void*)999),"Blocksize of pointer should be 10");
     261           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     262           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     263           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     264             : 
     265             :     /* Add a duplicate, should fail */
     266             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     267           6 :     result=memtrack_addblock(
     268             :                (void*)999, /* Pointer */
     269             :                20,         /* Size */
     270             :                __FILE__,   /* Source code filename */
     271             :                __LINE__,   /* Source code line number */
     272             :                __DATE__,   /* Compilation date */
     273             :                __TIME__,   /* Compilation time */
     274             :                __func__    /* Source code function, GNU extension */
     275             :            );
     276             :     oomfill_free();
     277             : 
     278             :     /* Check results */
     279           6 :     ck_assert_msg(1==result,"Should not be able to register a duplicate pointer");
     280           6 :     ck_assert_msg(10==memtrack_getblocksize((void*)999),"Duplicate pointer updated the size");
     281           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     282           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     283           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     284             : 
     285             :     /* Cleanup */
     286           6 :     result = memtrack_delblock(
     287             :                  (void*)999, /* Pointer */
     288             :                  __FILE__,   /* Source code filename */
     289             :                  __LINE__,   /* Source code line number */
     290             :                  __DATE__,   /* Compilation date */
     291             :                  __TIME__,   /* Compilation time */
     292             :                  __func__    /* Source code function, GNU extension */
     293             :              );
     294           6 :     ck_assert(0==result);
     295           6 : }
     296             : END_TEST
     297             : #endif
     298             : 
     299             : #ifndef NDEBUG
     300           6 : START_TEST(addblock_empty) {
     301             :     uint64_t l_NbBlocks;
     302             :     size_t l_RAMSize;
     303             :     unsigned int result;
     304             : 
     305             :     /* LibMemTrack consistency check preparation */
     306           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     307           6 :     l_RAMSize=memtrack_getallocatedRAM();
     308           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     309             : 
     310             :     /* Try to create/add a new  block with empty values */
     311             :     /* Already initialized and empty val will fail, thus no need for RAM */
     312             :     oomfill_fill(_i,2);
     313           6 :     result=memtrack_addblock(
     314             :                (void*)999, /* Pointer */
     315             :                0,          /* Size */
     316             :                __FILE__,   /* Source code filename */
     317             :                __LINE__,   /* Source code line number */
     318             :                __DATE__,   /* Compilation date */
     319             :                __TIME__,   /* Compilation time */
     320             :                __func__    /* Source code function, GNU extension */
     321             :            );
     322             :     oomfill_free();
     323             : 
     324             :     /* Check results */
     325           6 :     ck_assert_msg(1==result,"Should not be able to register a 0 sized pointer");
     326           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of missing block should be 0");
     327           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     328           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     329           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     330             : 
     331             :     /* Try to create/add a new  block with empty values */
     332             :     oomfill_fill(_i,2);
     333           6 :     result=memtrack_addblock(
     334             :                (void*)999, /* Pointer */
     335             :                1,          /* Size */
     336             :                "",         /* Source code filename */
     337             :                __LINE__,   /* Source code line number */
     338             :                __DATE__,   /* Compilation date */
     339             :                __TIME__,   /* Compilation time */
     340             :                __func__    /* Source code function, GNU extension */
     341             :            );
     342             :     oomfill_free();
     343             : 
     344             :     /* Check results */
     345           6 :     ck_assert_msg(1==result,"Should not be able to register a pointer without filename");
     346           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of missing block should be 0");
     347           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     348           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     349           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     350             : 
     351             :     /* Try to create/add a new  block with empty values */
     352             :     oomfill_fill(_i,2);
     353           6 :     result=memtrack_addblock(
     354             :                (void*)999, /* Pointer */
     355             :                1,          /* Size */
     356             :                __FILE__,   /* Source code filename */
     357             :                0,          /* Source code line number */
     358             :                __DATE__,   /* Compilation date */
     359             :                __TIME__,   /* Compilation time */
     360             :                __func__    /* Source code function, GNU extension */
     361             :            );
     362             :     oomfill_free();
     363             : 
     364             :     /* Check results */
     365           6 :     ck_assert_msg(1==result,"Should not be able to register a pointer à line number 0");
     366           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of missing block should be 0");
     367           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     368           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     369           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     370             : 
     371             :     /* Try to create/add a new  block with empty values */
     372             :     oomfill_fill(_i,2);
     373           6 :     result=memtrack_addblock(
     374             :                (void*)999, /* Pointer */
     375             :                1,          /* Size */
     376             :                __FILE__,   /* Source code filename */
     377             :                __LINE__,   /* Source code line number */
     378             :                "",         /* Compilation date */
     379             :                __TIME__,   /* Compilation time */
     380             :                __func__    /* Source code function, GNU extension */
     381             :            );
     382             :     oomfill_free();
     383             : 
     384             :     /* Check results */
     385           6 :     ck_assert_msg(1==result,"Should not be able to register a pointer without a compilation date");
     386           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of missing block should be 0");
     387           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     388           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     389           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     390             : 
     391             :     /* Try to create/add a new  block with empty values */
     392             :     oomfill_fill(_i,2);
     393           6 :     result=memtrack_addblock(
     394             :                (void*)999, /* Pointer */
     395             :                1,          /* Size */
     396             :                __FILE__,   /* Source code filename */
     397             :                __LINE__,   /* Source code line number */
     398             :                __DATE__,   /* Compilation date */
     399             :                "",         /* Compilation time */
     400             :                __func__    /* Source code function, GNU extension */
     401             :            );
     402             :     oomfill_free();
     403             : 
     404             :     /* Check results */
     405           6 :     ck_assert_msg(1==result,"Should not be able to register a pointer without a compilation time");
     406           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of missing block should be 0");
     407           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     408           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     409           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     410             : 
     411             :     /* Try to create/add a new  block with empty values */
     412             :     oomfill_fill(_i,2);
     413           6 :     result=memtrack_addblock(
     414             :                (void*)999, /* Pointer */
     415             :                1,          /* Size */
     416             :                __FILE__,   /* Source code filename */
     417             :                __LINE__,   /* Source code line number */
     418             :                __DATE__,   /* Compilation date */
     419             :                __TIME__,   /* Compilation time */
     420             :                ""          /* Source code function, GNU extension */
     421             :            );
     422             :     oomfill_free();
     423             : 
     424             :     /* Check results */
     425           6 :     ck_assert_msg(1==result,"Should not be able to register a pointer without a function name");
     426           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of missing block should be 0");
     427           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     428           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     429           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     430           6 : }
     431             : END_TEST
     432             : #endif /* NDEBUG */
     433             : 
     434             : #ifndef NDEBUG
     435           6 : START_TEST(addblock_longstrings) {
     436             :     uint64_t l_NbBlocks;
     437             :     size_t l_BlockSize;
     438             :     size_t l_RAMSize;
     439             :     unsigned int result;
     440           6 :     char *szLongString =
     441             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     442             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     443             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     444             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     445             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     446             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     447             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     448             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     449             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     450             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     451             :         ;
     452             : 
     453             :     /* LibMemTrack consistency check preparation */
     454           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     455           6 :     l_RAMSize=memtrack_getallocatedRAM();
     456           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     457             : 
     458             :     /* Try to create/add a new  block with empty values */
     459             :     oomfill_fill(_i*(sizeof(TMemBlock)+sizeof(*szLongString)),2);
     460           6 :     result=memtrack_addblock(
     461             :                (void*)999,  /* Pointer */
     462             :                1,           /* Size */
     463             :                szLongString,/* Source code filename */
     464             :                __LINE__,    /* Source code line number */
     465             :                __DATE__,    /* Compilation date */
     466             :                __TIME__,    /* Compilation time */
     467             :                __func__     /* Source code function, GNU extension */
     468             :            );
     469             :     oomfill_free();
     470             : 
     471             :     /* Check results */
     472           6 :     ck_assert((0==result)||(oomfill_enabled()));
     473           6 :     if (0==result) {
     474           6 :         l_NbBlocks+=1;
     475           6 :         l_RAMSize+=1;
     476           6 :         l_BlockSize=1;
     477             :     } else {
     478             :         /* result is false while oom testing : OOM occured */
     479           0 :         l_BlockSize = 0;
     480             :     }
     481           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     482           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     483           6 :     ck_assert_msg(l_BlockSize==memtrack_getblocksize((void*)999),"Blocksize inconsistency");
     484           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     485             : 
     486             :     /* Try to create/add a new  block with empty values */
     487             :     oomfill_fill(_i*(sizeof(TMemBlock)+sizeof(*szLongString)),2);
     488           6 :     result=memtrack_addblock(
     489             :                (void*)998,  /* Pointer */
     490             :                2,           /* Size */
     491             :                __FILE__,    /* Source code filename */
     492             :                1,           /* Source code line number */
     493             :                szLongString,/* Compilation date */
     494             :                __TIME__,    /* Compilation time */
     495             :                __func__     /* Source code function, GNU extension */
     496             :            );
     497             :     oomfill_free();
     498             : 
     499             :     /* Check results */
     500           6 :     ck_assert((0==result)||(oomfill_enabled()));
     501           6 :     if (0==result) {
     502           6 :         l_NbBlocks+=1;
     503           6 :         l_RAMSize+=2;
     504           6 :         l_BlockSize=2;
     505             :     } else {
     506             :         /* result is false while oom testing : OOM occured */
     507           0 :         l_BlockSize = 0;
     508             :     }
     509           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     510           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     511           6 :     ck_assert_msg(l_BlockSize==memtrack_getblocksize((void*)998),"Blocksize inconsistency");
     512           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     513             : 
     514             :     /* Try to create/add a new  block with empty values */
     515             :     oomfill_fill(_i*(sizeof(TMemBlock)+sizeof(*szLongString)),2);
     516           6 :     result=memtrack_addblock(
     517             :                (void*)997,  /* Pointer */
     518             :                3,           /* Size */
     519             :                __FILE__,    /* Source code filename */
     520             :                1,           /* Source code line number */
     521             :                __DATE__,    /* Compilation date */
     522             :                szLongString,/* Compilation time */
     523             :                __func__     /* Source code function, GNU extension */
     524             :            );
     525             :     oomfill_free();
     526             : 
     527             :     /* Check results */
     528           6 :     ck_assert((0==result)||(oomfill_enabled()));
     529           6 :     if (0==result) {
     530           6 :         l_NbBlocks+=1;
     531           6 :         l_RAMSize+=3;
     532           6 :         l_BlockSize=3;
     533             :     } else {
     534             :         /* result is false while oom testing : OOM occured */
     535           0 :         l_BlockSize = 0;
     536             :     }
     537           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     538           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     539           6 :     ck_assert_msg(l_BlockSize==memtrack_getblocksize((void*)997),"Blocksize inconsistency");
     540           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     541             : 
     542             :     /* Try to create/add a new  block with empty values */
     543             :     oomfill_fill(_i*(sizeof(TMemBlock)+sizeof(*szLongString)),2);
     544           6 :     result=memtrack_addblock(
     545             :                (void*)996,  /* Pointer */
     546             :                4,           /* Size */
     547             :                __FILE__,    /* Source code filename */
     548             :                1,           /* Source code line number */
     549             :                __DATE__,    /* Compilation date */
     550             :                __TIME__,    /* Compilation time */
     551             :                szLongString /* Source code function, GNU extension */
     552             :            );
     553             :     oomfill_free();
     554             : 
     555             :     /* Check results */
     556           6 :     ck_assert((0==result)||(oomfill_enabled()));
     557           6 :     if (0==result) {
     558           6 :         l_NbBlocks+=1;
     559           6 :         l_RAMSize+=4;
     560           6 :         l_BlockSize=4;
     561             :     } else {
     562             :         /* result is false while oom testing : OOM occured */
     563           0 :         l_BlockSize = 0;
     564             :     }
     565           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     566           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     567           6 :     ck_assert_msg(l_BlockSize==memtrack_getblocksize((void*)996),"Blocksize inconsistency");
     568           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     569           6 : }
     570             : END_TEST
     571             : #endif /* NDEBUG */
     572             : 
     573             : #ifndef NDEBUG
     574           6 : START_TEST(delblock_null) {
     575             :     uint64_t l_NbBlocks;
     576             :     size_t l_RAMSize;
     577             :     unsigned int result;
     578             : 
     579             :     /* Functor autoinit already tested in a previous test, can surround with sanity checks */
     580           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     581           6 :     l_RAMSize=memtrack_getallocatedRAM();
     582           6 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks count differs");
     583             : 
     584             :     /* Run tests under constraint */
     585             :     oomfill_fill(_i,2);
     586           6 :     result=memtrack_delblock(
     587             :                NULL,       /* Pointer */
     588             :                __FILE__,   /* Source code filename */
     589             :                __LINE__,   /* Source code line number */
     590             :                __DATE__,   /* Compilation date */
     591             :                __TIME__,   /* Compilation time */
     592             :                __func__    /* Source code function, GNU extension */
     593             :            );
     594             :     oomfill_free();
     595             : 
     596             :     /* Check results should always fail, oom or not */
     597           6 :     ck_assert_msg(1==result,"Should not be able to unregister a NULL pointer");
     598           6 :     ck_assert_msg(0==memtrack_getblocksize(NULL),"Blocksize of NULL pointer should be 0");
     599           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     600           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     601           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     602           6 : }
     603             : END_TEST
     604             : #endif /* NDEBUG */
     605             : 
     606             : #ifndef NDEBUG
     607           6 : START_TEST(delblock_missing) {
     608             :     uint64_t l_NbBlocks;
     609             :     size_t l_RAMSize;
     610             :     unsigned int result;
     611             : 
     612             :     /* Functor autoinit already tested in a previous test, can surround with sanity checks */
     613           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     614           6 :     l_RAMSize=memtrack_getallocatedRAM();
     615           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     616             : 
     617             :     /* Run tests under constraint */
     618             :     oomfill_fill(_i,2);
     619           6 :     result=memtrack_delblock(
     620             :                (void*)999, /* Pointer */
     621             :                __FILE__,   /* Source code filename */
     622             :                __LINE__,   /* Source code line number */
     623             :                __DATE__,   /* Compilation date */
     624             :                __TIME__,   /* Compilation time */
     625             :                __func__    /* Source code function, GNU extension */
     626             :            );
     627             :     oomfill_free();
     628             : 
     629             :     /* Check results should always fail, oom or not */
     630           6 :     ck_assert_msg(1==result,"Should not be able to unregister a missing pointer");
     631           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of missing pointer should be 0");
     632           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count changed");
     633           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM changed");
     634           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     635           6 : }
     636             : END_TEST
     637             : #endif /* NDEBUG */
     638             : 
     639             : #ifndef NDEBUG
     640           6 : START_TEST(addblock1_delblock1) {
     641             :     uint64_t l_NbBlocks;
     642             :     size_t l_RAMSize;
     643             :     unsigned int result;
     644             : 
     645             :     /* LibMemTrack consistency check preparation */
     646           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     647           6 :     l_RAMSize=memtrack_getallocatedRAM();
     648           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     649             : 
     650             :     /* Ensure that block does not already exist */
     651           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"The 999 block should not already exist");
     652             : 
     653             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     654             :     /* Create a new block */
     655           6 :     result=memtrack_addblock(
     656             :                (void*)999, /* Pointer */
     657             :                10,         /* Size */
     658             :                __FILE__,   /* Source code filename */
     659             :                __LINE__,   /* Source code line number */
     660             :                __DATE__,   /* Compilation date */
     661             :                __TIME__,   /* Compilation time */
     662             :                __func__    /* Source code function, GNU extension */
     663             :            );
     664             :     oomfill_free();
     665             : 
     666             :     /* Intermediate check */
     667           6 :     ck_assert((0==result)||(oomfill_enabled()));
     668           6 :     if (0==result) {
     669             :         /* No OOM error, update the check counters */
     670           6 :         l_NbBlocks+=1;
     671           6 :         l_RAMSize+=10;
     672           6 :         ck_assert_msg(10==memtrack_getblocksize((void*)999),"Blocksize of 999 block should be 10");
     673             :     } else {
     674           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of 999 missing block should be 0");
     675             :     }
     676           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     677           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     678             : 
     679             :     oomfill_fill(_i,2);
     680             :     /* Delete the created block */
     681           6 :     result = memtrack_delblock(
     682             :                  (void*)999, /* Pointer */
     683             :                  __FILE__,   /* Source code filename */
     684             :                  __LINE__,   /* Source code line number */
     685             :                  __DATE__,   /* Compilation date */
     686             :                  __TIME__,   /* Compilation time */
     687             :                  __func__    /* Source code function, GNU extension */
     688             :              );
     689             :     oomfill_free();
     690             : 
     691             :     /* Check results */
     692           6 :     ck_assert((0==result)||(oomfill_enabled()));
     693           6 :     if (0==result) {
     694             :         /* No OOM error, update the check counters */
     695           6 :         l_NbBlocks-=1;
     696           6 :         l_RAMSize-=10;
     697             :     }
     698           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     699           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     700           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of deleted 999 block should be 0");
     701           6 : }
     702             : END_TEST
     703             : #endif /* NDEBUG */
     704             : 
     705             : #ifndef NDEBUG
     706           6 : START_TEST(addblock12_delblock12) {
     707             :     uint64_t l_NbBlocks;
     708             :     size_t l_RAMSize;
     709             :     unsigned int result;
     710             : 
     711             :     /* LibMemTrack consistency check preparation */
     712           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     713           6 :     l_RAMSize=memtrack_getallocatedRAM();
     714           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     715             : 
     716             :     /* Ensure that block does not already exist */
     717           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"The 999 block should not already exist");
     718             : 
     719             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     720             :     /* Create a new block */
     721           6 :     result=memtrack_addblock(
     722             :                (void*)999, /* Pointer */
     723             :                10,         /* Size */
     724             :                __FILE__,   /* Source code filename */
     725             :                __LINE__,   /* Source code line number */
     726             :                __DATE__,   /* Compilation date */
     727             :                __TIME__,   /* Compilation time */
     728             :                __func__    /* Source code function, GNU extension */
     729             :            );
     730             :     oomfill_free();
     731             : 
     732             :     /* Intermediate check */
     733           6 :     ck_assert((0==result)||(oomfill_enabled()));
     734           6 :     if (0==result) {
     735             :         /* No OOM error, update the check counters */
     736           6 :         l_NbBlocks+=1;
     737           6 :         l_RAMSize+=10;
     738           6 :         ck_assert_msg(10==memtrack_getblocksize((void*)999),"Blocksize of 999 block should be 10");
     739             :     } else {
     740           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of 999 missing block should be 0");
     741             :     }
     742           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     743           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     744             : 
     745             :     /* Ensure that block does not already exist */
     746           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)998),"The 998 block should not already exist");
     747             : 
     748             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     749             :     /* Create a new block */
     750           6 :     result=memtrack_addblock(
     751             :                (void*)998, /* Pointer */
     752             :                20,         /* Size */
     753             :                __FILE__,   /* Source code filename */
     754             :                __LINE__,   /* Source code line number */
     755             :                __DATE__,   /* Compilation date */
     756             :                __TIME__,   /* Compilation time */
     757             :                __func__    /* Source code function, GNU extension */
     758             :            );
     759             :     oomfill_free();
     760             : 
     761             :     /* Intermediate check */
     762           6 :     ck_assert((0==result)||(oomfill_enabled()));
     763           6 :     if (0==result) {
     764             :         /* No OOM error, update the check counters */
     765           6 :         l_NbBlocks+=1;
     766           6 :         l_RAMSize+=20;
     767           6 :         ck_assert_msg(20==memtrack_getblocksize((void*)998),"Blocksize of 998 block should be 10");
     768             :     } else {
     769           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)998),"Blocksize of 998 missing block should be 0");
     770             :     }
     771           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     772           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     773             : 
     774             :     oomfill_fill(_i,2);
     775             :     /* Delete the created block */
     776           6 :     result = memtrack_delblock(
     777             :                  (void*)999, /* Pointer */
     778             :                  __FILE__,   /* Source code filename */
     779             :                  __LINE__,   /* Source code line number */
     780             :                  __DATE__,   /* Compilation date */
     781             :                  __TIME__,   /* Compilation time */
     782             :                  __func__    /* Source code function, GNU extension */
     783             :              );
     784             :     oomfill_free();
     785             : 
     786             :     /* Check results */
     787           6 :     ck_assert((0==result)||(oomfill_enabled()));
     788           6 :     if (0==result) {
     789             :         /* No OOM error, update the check counters */
     790           6 :         l_NbBlocks-=1;
     791           6 :         l_RAMSize-=10;
     792             :     }
     793           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     794           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     795           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of deleted 999 block should be 0");
     796             : 
     797             :     oomfill_fill(_i,2);
     798             :     /* Delete the created block */
     799           6 :     result = memtrack_delblock(
     800             :                  (void*)998, /* Pointer */
     801             :                  __FILE__,   /* Source code filename */
     802             :                  __LINE__,   /* Source code line number */
     803             :                  __DATE__,   /* Compilation date */
     804             :                  __TIME__,   /* Compilation time */
     805             :                  __func__    /* Source code function, GNU extension */
     806             :              );
     807             :     oomfill_free();
     808             : 
     809             :     /* Check results */
     810           6 :     ck_assert((0==result)||(oomfill_enabled()));
     811           6 :     if (0==result) {
     812             :         /* No OOM error, update the check counters */
     813           6 :         l_NbBlocks-=1;
     814           6 :         l_RAMSize-=20;
     815             :     }
     816           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     817           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     818           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)998),"Blocksize of deleted 998 block should be 0");
     819           6 : }
     820             : END_TEST
     821             : #endif /* NDEBUG */
     822             : 
     823             : #ifndef NDEBUG
     824           6 : START_TEST(addblock12_delblock21) {
     825             :     uint64_t l_NbBlocks;
     826             :     size_t l_RAMSize;
     827             :     unsigned int result;
     828             : 
     829             :     /* LibMemTrack consistency check preparation */
     830           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     831           6 :     l_RAMSize=memtrack_getallocatedRAM();
     832           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     833             : 
     834             :     /* Ensure that block does not already exist */
     835           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"The 999 block should not already exist");
     836             : 
     837             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     838             :     /* Create a new block */
     839           6 :     result=memtrack_addblock(
     840             :                (void*)999, /* Pointer */
     841             :                10,         /* Size */
     842             :                __FILE__,   /* Source code filename */
     843             :                __LINE__,   /* Source code line number */
     844             :                __DATE__,   /* Compilation date */
     845             :                __TIME__,   /* Compilation time */
     846             :                __func__    /* Source code function, GNU extension */
     847             :            );
     848             :     oomfill_free();
     849             : 
     850             :     /* Intermediate check */
     851           6 :     ck_assert((0==result)||(oomfill_enabled()));
     852           6 :     if (0==result) {
     853             :         /* No OOM error, update the check counters */
     854           6 :         l_NbBlocks+=1;
     855           6 :         l_RAMSize+=10;
     856           6 :         ck_assert_msg(10==memtrack_getblocksize((void*)999),"Blocksize of 999 block should be 10");
     857             :     } else {
     858           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of 999 missing block should be 0");
     859             :     }
     860           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     861           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     862             : 
     863             :     /* Ensure that block does not already exist */
     864           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)998),"The 998 block should not already exist");
     865             : 
     866             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     867             :     /* Create a new block */
     868           6 :     result=memtrack_addblock(
     869             :                (void*)998, /* Pointer */
     870             :                20,         /* Size */
     871             :                __FILE__,   /* Source code filename */
     872             :                __LINE__,   /* Source code line number */
     873             :                __DATE__,   /* Compilation date */
     874             :                __TIME__,   /* Compilation time */
     875             :                __func__    /* Source code function, GNU extension */
     876             :            );
     877             :     oomfill_free();
     878             : 
     879             :     /* Intermediate check */
     880           6 :     ck_assert((0==result)||(oomfill_enabled()));
     881           6 :     if (0==result) {
     882             :         /* No OOM error, update the check counters */
     883           6 :         l_NbBlocks+=1;
     884           6 :         l_RAMSize+=20;
     885           6 :         ck_assert_msg(20==memtrack_getblocksize((void*)998),"Blocksize of 998 block should be 10");
     886             :     } else {
     887           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)998),"Blocksize of 998 missing block should be 0");
     888             :     }
     889           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     890           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     891             : 
     892             :     oomfill_fill(_i,2);
     893             :     /* Delete the created block */
     894           6 :     result = memtrack_delblock(
     895             :                  (void*)998, /* Pointer */
     896             :                  __FILE__,   /* Source code filename */
     897             :                  __LINE__,   /* Source code line number */
     898             :                  __DATE__,   /* Compilation date */
     899             :                  __TIME__,   /* Compilation time */
     900             :                  __func__    /* Source code function, GNU extension */
     901             :              );
     902             :     oomfill_free();
     903             : 
     904             :     /* Check results */
     905           6 :     ck_assert((0==result)||(oomfill_enabled()));
     906           6 :     if (0==result) {
     907             :         /* No OOM error, update the check counters */
     908           6 :         l_NbBlocks-=1;
     909           6 :         l_RAMSize-=20;
     910             :     }
     911           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     912           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     913           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)998),"Blocksize of deleted 998 block should be 0");
     914             : 
     915             :     oomfill_fill(_i,2);
     916             :     /* Delete the created block */
     917           6 :     result = memtrack_delblock(
     918             :                  (void*)999, /* Pointer */
     919             :                  __FILE__,   /* Source code filename */
     920             :                  __LINE__,   /* Source code line number */
     921             :                  __DATE__,   /* Compilation date */
     922             :                  __TIME__,   /* Compilation time */
     923             :                  __func__    /* Source code function, GNU extension */
     924             :              );
     925             :     oomfill_free();
     926             : 
     927             :     /* Check results */
     928           6 :     ck_assert((0==result)||(oomfill_enabled()));
     929           6 :     if (0==result) {
     930             :         /* No OOM error, update the check counters */
     931           6 :         l_NbBlocks-=1;
     932           6 :         l_RAMSize-=10;
     933             :     }
     934           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     935           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     936           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of deleted 999 block should be 0");
     937           6 : }
     938             : END_TEST
     939             : #endif /* NDEBUG */
     940             : 
     941             : #ifndef NDEBUG
     942           6 : START_TEST(addblock123_delblock123) {
     943             :     uint64_t l_NbBlocks;
     944             :     size_t l_RAMSize;
     945             :     unsigned int result;
     946             : 
     947             :     /* LibMemTrack consistency check preparation */
     948           6 :     l_NbBlocks=memtrack_getallocatedblocks();
     949           6 :     l_RAMSize=memtrack_getallocatedRAM();
     950           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
     951             : 
     952             :     /* Ensure that block does not already exist */
     953           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"The 999 block should not already exist");
     954             : 
     955             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     956             :     /* Create a new block */
     957           6 :     result=memtrack_addblock(
     958             :                (void*)999, /* Pointer */
     959             :                10,         /* Size */
     960             :                __FILE__,   /* Source code filename */
     961             :                __LINE__,   /* Source code line number */
     962             :                __DATE__,   /* Compilation date */
     963             :                __TIME__,   /* Compilation time */
     964             :                __func__    /* Source code function, GNU extension */
     965             :            );
     966             :     oomfill_free();
     967             : 
     968             :     /* Intermediate check */
     969           6 :     ck_assert((0==result)||(oomfill_enabled()));
     970           6 :     if (0==result) {
     971             :         /* No OOM error, update the check counters */
     972           6 :         l_NbBlocks+=1;
     973           6 :         l_RAMSize+=10;
     974           6 :         ck_assert_msg(10==memtrack_getblocksize((void*)999),"Blocksize of 999 block should be 10");
     975             :     } else {
     976           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of 999 missing block should be 0");
     977             :     }
     978           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
     979           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
     980             : 
     981             :     /* Ensure that block does not already exist */
     982           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)998),"The 998 block should not already exist");
     983             : 
     984             :     oomfill_fill(_i*sizeof(TMemBlock),2);
     985             :     /* Create a new block */
     986           6 :     result=memtrack_addblock(
     987             :                (void*)998, /* Pointer */
     988             :                20,         /* Size */
     989             :                __FILE__,   /* Source code filename */
     990             :                __LINE__,   /* Source code line number */
     991             :                __DATE__,   /* Compilation date */
     992             :                __TIME__,   /* Compilation time */
     993             :                __func__    /* Source code function, GNU extension */
     994             :            );
     995             :     oomfill_free();
     996             : 
     997             :     /* Intermediate check */
     998           6 :     ck_assert((0==result)||(oomfill_enabled()));
     999           6 :     if (0==result) {
    1000             :         /* No OOM error, update the check counters */
    1001           6 :         l_NbBlocks+=1;
    1002           6 :         l_RAMSize+=20;
    1003           6 :         ck_assert_msg(20==memtrack_getblocksize((void*)998),"Blocksize of 998 block should be 10");
    1004             :     } else {
    1005           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)998),"Blocksize of 998 missing block should be 0");
    1006             :     }
    1007           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1008           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1009             : 
    1010             :     /* Ensure that block does not already exist */
    1011           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)997),"The 997 block should not already exist");
    1012             : 
    1013             :     oomfill_fill(_i*sizeof(TMemBlock),2);
    1014             :     /* Create a new block */
    1015           6 :     result=memtrack_addblock(
    1016             :                (void*)997, /* Pointer */
    1017             :                30,         /* Size */
    1018             :                __FILE__,   /* Source code filename */
    1019             :                __LINE__,   /* Source code line number */
    1020             :                __DATE__,   /* Compilation date */
    1021             :                __TIME__,   /* Compilation time */
    1022             :                __func__    /* Source code function, GNU extension */
    1023             :            );
    1024             :     oomfill_free();
    1025             : 
    1026             :     /* Intermediate check */
    1027           6 :     ck_assert((0==result)||(oomfill_enabled()));
    1028           6 :     if (0==result) {
    1029             :         /* No OOM error, update the check counters */
    1030           6 :         l_NbBlocks+=1;
    1031           6 :         l_RAMSize+=30;
    1032           6 :         ck_assert_msg(30==memtrack_getblocksize((void*)997),"Blocksize of 997 block should be 10");
    1033             :     } else {
    1034           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)997),"Blocksize of 997 missing block should be 0");
    1035             :     }
    1036           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1037           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1038             : 
    1039             :     oomfill_fill(_i,2);
    1040             :     /* Delete the created block */
    1041           6 :     result = memtrack_delblock(
    1042             :                  (void*)999, /* Pointer */
    1043             :                  __FILE__,   /* Source code filename */
    1044             :                  __LINE__,   /* Source code line number */
    1045             :                  __DATE__,   /* Compilation date */
    1046             :                  __TIME__,   /* Compilation time */
    1047             :                  __func__    /* Source code function, GNU extension */
    1048             :              );
    1049             :     oomfill_free();
    1050             : 
    1051             :     /* Check results */
    1052           6 :     ck_assert((0==result)||(oomfill_enabled()));
    1053           6 :     if (0==result) {
    1054             :         /* No OOM error, update the check counters */
    1055           6 :         l_NbBlocks-=1;
    1056           6 :         l_RAMSize-=10;
    1057             :     }
    1058           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1059           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1060           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of deleted 999 block should be 0");
    1061             : 
    1062             :     oomfill_fill(_i,2);
    1063             :     /* Delete the created block */
    1064           6 :     result = memtrack_delblock(
    1065             :                  (void*)998, /* Pointer */
    1066             :                  __FILE__,   /* Source code filename */
    1067             :                  __LINE__,   /* Source code line number */
    1068             :                  __DATE__,   /* Compilation date */
    1069             :                  __TIME__,   /* Compilation time */
    1070             :                  __func__    /* Source code function, GNU extension */
    1071             :              );
    1072             :     oomfill_free();
    1073             : 
    1074             :     /* Check results */
    1075           6 :     ck_assert((0==result)||(oomfill_enabled()));
    1076           6 :     if (0==result) {
    1077             :         /* No OOM error, update the check counters */
    1078           6 :         l_NbBlocks-=1;
    1079           6 :         l_RAMSize-=20;
    1080             :     }
    1081           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1082           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1083           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)998),"Blocksize of deleted 998 block should be 0");
    1084             : 
    1085             :     oomfill_fill(_i,2);
    1086             :     /* Delete the created block */
    1087           6 :     result = memtrack_delblock(
    1088             :                  (void*)997, /* Pointer */
    1089             :                  __FILE__,   /* Source code filename */
    1090             :                  __LINE__,   /* Source code line number */
    1091             :                  __DATE__,   /* Compilation date */
    1092             :                  __TIME__,   /* Compilation time */
    1093             :                  __func__    /* Source code function, GNU extension */
    1094             :              );
    1095             :     oomfill_free();
    1096             : 
    1097             :     /* Check results */
    1098           6 :     ck_assert((0==result)||(oomfill_enabled()));
    1099           6 :     if (0==result) {
    1100             :         /* No OOM error, update the check counters */
    1101           6 :         l_NbBlocks-=1;
    1102           6 :         l_RAMSize-=30;
    1103             :     }
    1104           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1105           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1106           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)997),"Blocksize of deleted 997 block should be 0");
    1107           6 : }
    1108             : END_TEST
    1109             : #endif /* NDEBUG */
    1110             : 
    1111             : #ifndef NDEBUG
    1112           6 : START_TEST(addblock123_delblock2) {
    1113             :     uint64_t l_NbBlocks;
    1114             :     size_t l_RAMSize;
    1115             :     unsigned int result;
    1116             : 
    1117             :     /* LibMemTrack consistency check preparation */
    1118           6 :     l_NbBlocks=memtrack_getallocatedblocks();
    1119           6 :     l_RAMSize=memtrack_getallocatedRAM();
    1120           6 :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
    1121             : 
    1122             :     /* Ensure that block does not already exist */
    1123           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)999),"The 999 block should not already exist");
    1124             : 
    1125             :     oomfill_fill(_i*sizeof(TMemBlock),2);
    1126             :     /* Create a new block */
    1127           6 :     result=memtrack_addblock(
    1128             :                (void*)999, /* Pointer */
    1129             :                10,         /* Size */
    1130             :                __FILE__,   /* Source code filename */
    1131             :                __LINE__,   /* Source code line number */
    1132             :                __DATE__,   /* Compilation date */
    1133             :                __TIME__,   /* Compilation time */
    1134             :                __func__    /* Source code function, GNU extension */
    1135             :            );
    1136             :     oomfill_free();
    1137             : 
    1138             :     /* Intermediate check */
    1139           6 :     ck_assert((0==result)||(oomfill_enabled()));
    1140           6 :     if (0==result) {
    1141             :         /* No OOM error, update the check counters */
    1142           6 :         l_NbBlocks+=1;
    1143           6 :         l_RAMSize+=10;
    1144           6 :         ck_assert_msg(10==memtrack_getblocksize((void*)999),"Blocksize of 999 block should be 10");
    1145             :     } else {
    1146           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)999),"Blocksize of 999 missing block should be 0");
    1147             :     }
    1148           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1149           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1150             : 
    1151             :     /* Ensure that block does not already exist */
    1152           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)998),"The 998 block should not already exist");
    1153             : 
    1154             :     oomfill_fill(_i*sizeof(TMemBlock),2);
    1155             :     /* Create a new block */
    1156           6 :     result=memtrack_addblock(
    1157             :                (void*)998, /* Pointer */
    1158             :                20,         /* Size */
    1159             :                __FILE__,   /* Source code filename */
    1160             :                __LINE__,   /* Source code line number */
    1161             :                __DATE__,   /* Compilation date */
    1162             :                __TIME__,   /* Compilation time */
    1163             :                __func__    /* Source code function, GNU extension */
    1164             :            );
    1165             :     oomfill_free();
    1166             : 
    1167             :     /* Intermediate check */
    1168           6 :     ck_assert((0==result)||(oomfill_enabled()));
    1169           6 :     if (0==result) {
    1170             :         /* No OOM error, update the check counters */
    1171           6 :         l_NbBlocks+=1;
    1172           6 :         l_RAMSize+=20;
    1173           6 :         ck_assert_msg(20==memtrack_getblocksize((void*)998),"Blocksize of 998 block should be 10");
    1174             :     } else {
    1175           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)998),"Blocksize of 998 missing block should be 0");
    1176             :     }
    1177           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1178           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1179             : 
    1180             :     /* Ensure that block does not already exist */
    1181           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)997),"The 997 block should not already exist");
    1182             : 
    1183             :     oomfill_fill(_i*sizeof(TMemBlock),2);
    1184             :     /* Create a new block */
    1185           6 :     result=memtrack_addblock(
    1186             :                (void*)997, /* Pointer */
    1187             :                30,         /* Size */
    1188             :                __FILE__,   /* Source code filename */
    1189             :                __LINE__,   /* Source code line number */
    1190             :                __DATE__,   /* Compilation date */
    1191             :                __TIME__,   /* Compilation time */
    1192             :                __func__    /* Source code function, GNU extension */
    1193             :            );
    1194             :     oomfill_free();
    1195             : 
    1196             :     /* Intermediate check */
    1197           6 :     ck_assert((0==result)||(oomfill_enabled()));
    1198           6 :     if (0==result) {
    1199             :         /* No OOM error, update the check counters */
    1200           6 :         l_NbBlocks+=1;
    1201           6 :         l_RAMSize+=30;
    1202           6 :         ck_assert_msg(30==memtrack_getblocksize((void*)997),"Blocksize of 997 block should be 10");
    1203             :     } else {
    1204           0 :         ck_assert_msg(0==memtrack_getblocksize((void*)997),"Blocksize of 997 missing block should be 0");
    1205             :     }
    1206           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1207           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1208             : 
    1209             :     oomfill_fill(_i,2);
    1210             :     /* Delete the created block */
    1211           6 :     result = memtrack_delblock(
    1212             :                  (void*)998, /* Pointer */
    1213             :                  __FILE__,   /* Source code filename */
    1214             :                  __LINE__,   /* Source code line number */
    1215             :                  __DATE__,   /* Compilation date */
    1216             :                  __TIME__,   /* Compilation time */
    1217             :                  __func__    /* Source code function, GNU extension */
    1218             :              );
    1219             :     oomfill_free();
    1220             : 
    1221             :     /* Check results */
    1222           6 :     ck_assert((0==result)||(oomfill_enabled()));
    1223           6 :     if (0==result) {
    1224             :         /* No OOM error, update the check counters */
    1225           6 :         l_NbBlocks-=1;
    1226           6 :         l_RAMSize-=20;
    1227             :     }
    1228           6 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1229           6 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1230           6 :     ck_assert_msg(0==memtrack_getblocksize((void*)998),"Blocksize of deleted 998 block should be 0");
    1231           6 : }
    1232             : END_TEST
    1233             : #endif /* NDEBUG */
    1234             : 
    1235             : #ifndef NDEBUG
    1236             : #ifdef HAVE_LIBOOM
    1237             : START_TEST(adddelblock_oom) {
    1238             :     uint64_t l_NbBlocks;
    1239             :     size_t l_RAMSize;
    1240             :     long unsigned int i=0;
    1241             :     uint16_t oomtestvalues[65536] = {0};
    1242             :     char *szLongString =
    1243             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1244             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1245             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1246             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1247             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1248             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1249             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1250             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1251             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1252             :         "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    1253             :         ;
    1254             : 
    1255             :     /* LibMemTrack consistency check preparation */
    1256             :     l_NbBlocks=memtrack_getallocatedblocks();
    1257             :     l_RAMSize=memtrack_getallocatedRAM();
    1258             :     ck_assert_msg(l_NbBlocks==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks mismatch");
    1259             : 
    1260             :     /* Try to trigger OOM inside the tested feature */
    1261             :     i = 0;
    1262             :     oomfill_fill(_i*(sizeof(TMemBlock)+4*(26+10+26)*10),2);
    1263             :     do {
    1264             :         i++;
    1265             :         oomtestvalues[i] = memtrack_addblock(
    1266             :                                (void*)(i+99),/* Pointer */
    1267             :                                10,           /* Size */
    1268             :                                szLongString, /* Source code filename */
    1269             :                                __LINE__,     /* Source code line number */
    1270             :                                szLongString, /* Compilation date */
    1271             :                                szLongString, /* Compilation time */
    1272             :                                szLongString  /* Source code function, GNU extension */
    1273             :                            );
    1274             :     } while ((i<65535)&&(0==oomtestvalues[i]));
    1275             :     oomfill_free();
    1276             : 
    1277             :     /* Intermediate check */
    1278             :     l_NbBlocks+=i-1;
    1279             :     l_RAMSize+=(i-1)*10;
    1280             :     /* Should have returned NULL (OOM) before reaching 65535 */
    1281             :     ck_assert_msg(65535!=i,"Did not manage to trigger OOM");
    1282             :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1283             :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1284             : 
    1285             :     /* We will loose i value, precalculate values */
    1286             :     l_NbBlocks-=i-1;
    1287             :     l_RAMSize-=(i-1)*10;
    1288             : 
    1289             :     oomfill_fill(_i,2);
    1290             :     /* Free all the allocated memory */
    1291             :     i = 1;
    1292             :     while ((i<65535)&&(0==oomtestvalues[i])) {
    1293             :         if(0!=(oomtestvalues[i]=memtrack_delblock(
    1294             :                                     (void*)(i+99),/* Pointer */
    1295             :                                     __FILE__,     /* Source code filename */
    1296             :                                     __LINE__,     /* Source code line number */
    1297             :                                     __DATE__,     /* Compilation date */
    1298             :                                     __TIME__,     /* Compilation time */
    1299             :                                     __func__      /* Source code function, GNU extension */
    1300             :                                 )))
    1301             :             break;
    1302             :         i++;
    1303             :     }
    1304             :     oomfill_free();
    1305             : 
    1306             :     ck_assert_msg(65535!=i,"Did not manage to free all allocated RAM");
    1307             :     ck_assert(1==oomtestvalues[i]);
    1308             :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"Block count inconsistency");
    1309             :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"Allocated RAM inconsistency");
    1310             : }
    1311             : END_TEST
    1312             : #endif /* HAVE_LIBOOM */
    1313             : #endif /* NDEBUG */
    1314             : 
    1315             : /************************************************************************/
    1316         102 : void memtrack_checked_common_setup() {
    1317         102 :     signals_catch();
    1318         102 :     forktest_gprofdir();
    1319         102 : }
    1320          54 : void memtrack_checked_uninitialized_setup() {
    1321          54 :     memtrack_checked_common_setup();
    1322          54 : }
    1323          48 : void memtrack_checked_withdata_setup() {
    1324          48 :     memtrack_checked_common_setup();
    1325             : #ifndef NDEBUG
    1326             :     uint64_t l_NbBlocks;
    1327             :     uint64_t l_RAMSize;
    1328             : 
    1329          48 :     l_NbBlocks=memtrack_getallocatedblocks();
    1330          48 :     l_RAMSize=memtrack_getallocatedRAM();
    1331          48 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"getallocatedblocks does not match counter");
    1332          48 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"getallocatedRAM does not match the counter");
    1333          48 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks count differs");
    1334          48 :     ck_assert_msg(0==memtrack_addblock(
    1335             :                       (void*)1,   /* Pointer */
    1336             :                       10,         /* Size */
    1337             :                       __FILE__,   /* Source code filename */
    1338             :                       __LINE__,   /* Source code line number */
    1339             :                       __DATE__,   /* Compilation date */
    1340             :                       __TIME__,   /* Compilation time */
    1341             :                       "fonction"  /* Source code function, GNU extension */
    1342             :                   ),"Creating block (Normal values)");
    1343          48 :     ck_assert_msg(10==memtrack_getblocksize((void*)1),"Invalid getblocksize");
    1344          48 :     ck_assert_msg( 0==memtrack_getblocksize((void*)2),"Invalid getblocksize");
    1345          48 :     ck_assert_msg( 0==memtrack_getblocksize((void*)3),"Invalid getblocksize");
    1346          48 :     l_NbBlocks += 1;
    1347          48 :     l_RAMSize += 10;
    1348          48 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"getallocatedblocks does not match counter");
    1349          48 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"getallocatedRAM does not match the counter");
    1350          48 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks count differs");
    1351          48 :     ck_assert_msg(0==memtrack_addblock(
    1352             :                       (void*)2,   /* Pointer */
    1353             :                       20,         /* Size */
    1354             :                       __FILE__,   /* Source code filename */
    1355             :                       __LINE__,   /* Source code line number */
    1356             :                       __DATE__,   /* Compilation date */
    1357             :                       __TIME__,   /* Compilation time */
    1358             :                       "fonction"  /* Source code function, GNU extension */
    1359             :                   ),"Creating block (Normal values)");
    1360          48 :     ck_assert_msg(10==memtrack_getblocksize((void*)1),"Invalid getblocksize");
    1361          48 :     ck_assert_msg(20==memtrack_getblocksize((void*)2),"Invalid getblocksize");
    1362          48 :     ck_assert_msg( 0==memtrack_getblocksize((void*)3),"Invalid getblocksize");
    1363          48 :     l_NbBlocks += 1;
    1364          48 :     l_RAMSize += 20;
    1365          48 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"getallocatedblocks does not match counter");
    1366          48 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"getallocatedRAM does not match the counter");
    1367          48 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks count differs");
    1368          48 :     ck_assert_msg(0==memtrack_addblock(
    1369             :                       (void*)3,   /* Pointer */
    1370             :                       30,         /* Size */
    1371             :                       __FILE__,   /* Source code filename */
    1372             :                       __LINE__,   /* Source code line number */
    1373             :                       __DATE__,   /* Compilation date */
    1374             :                       __TIME__,   /* Compilation time */
    1375             :                       "fonction"  /* Source code function, GNU extension */
    1376             :                   ),"Creating block (Normal values)");
    1377          48 :     ck_assert_msg(10==memtrack_getblocksize((void*)1),"Invalid getblocksize");
    1378          48 :     ck_assert_msg(20==memtrack_getblocksize((void*)2),"Invalid getblocksize");
    1379          48 :     ck_assert_msg(30==memtrack_getblocksize((void*)3),"Invalid getblocksize");
    1380          48 :     l_NbBlocks += 1;
    1381          48 :     l_RAMSize += 30;
    1382          48 :     ck_assert_msg(l_NbBlocks==memtrack_getallocatedblocks(),"getallocatedblocks does not match counter");
    1383          48 :     ck_assert_msg(l_RAMSize==memtrack_getallocatedRAM(),"getallocatedRAM does not match the counter");
    1384          48 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks count differs");
    1385             : #endif /* NDEBUG */
    1386          48 : }
    1387         102 : void memtrack_checked_common_teardown() {
    1388         102 :     signals_release();
    1389             : #ifndef NDEBUG
    1390             :     /** @todo make memtrack_reset compatible with oomfill_* */
    1391         102 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks count differs");
    1392         102 :     memtrack_reset();
    1393         102 :     memtrack_reset(); /* Test the double run protection */
    1394         102 :     ck_assert_msg(0==memtrack_getallocatedblocks(),"getallocatedblocks does not match counter");
    1395         102 :     ck_assert_msg(0==memtrack_getallocatedRAM(),"getallocatedRAM does not match the counter");
    1396         102 :     ck_assert_msg(memtrack_getallocatedblocks()==memtrack_dumpblocks(),"Internal NbBlocks counter and dumpblocks count differs");
    1397             : #endif /* NDEBUG */
    1398         102 : }
    1399             : /************************************************************************/
    1400         686 : void memtrack_unchecked_common_setup() {
    1401         686 :     forktest_init();
    1402         686 : }
    1403         618 : void memtrack_unchecked_common_teardown() {
    1404         618 : }
    1405             : #ifdef HAVE_LIBOOM
    1406             : void memtrack_unchecked_oom_setup() {
    1407             :     memtrack_unchecked_common_setup();
    1408             :     oomfill_enable(RAMLIMIT_SOFT);
    1409             : }
    1410             : void memtrack_unchecked_oom_teardown() {
    1411             :     oomfill_disable();
    1412             :     memtrack_unchecked_common_teardown();
    1413             : }
    1414             : #endif /* HAVE_LIBOOM */
    1415             : 
    1416             : /************************************************************************/
    1417         365 : Suite* libdebug_memtrack_suite() {
    1418             :     Suite *s;
    1419             :     TCase *tc;
    1420             : 
    1421         365 :     s = suite_create("LibDebug-MemTrack");
    1422         365 :     tc = tcase_create("Uninitialized");
    1423         365 :     tcase_add_checked_fixture(tc, memtrack_checked_uninitialized_setup, memtrack_checked_common_teardown);
    1424         365 :     tcase_add_unchecked_fixture(tc, memtrack_unchecked_common_setup, memtrack_unchecked_common_teardown);
    1425         365 :     suite_add_tcase(s, tc);
    1426             : #ifndef NDEBUG
    1427         365 :     tcase_add_test(tc, getallocatedRAM_first);
    1428         365 :     tcase_add_test(tc, getallocatedblocks_first);
    1429         365 :     tcase_add_test(tc, getblocksize_first);
    1430         365 :     tcase_add_test(tc, getblocksize_null);
    1431         365 :     tcase_add_test(tc, getblocksize_missing);
    1432         365 :     tcase_add_test(tc, addblock_null_first);
    1433         365 :     tcase_add_test(tc, delblock_null_first);
    1434         365 :     tcase_add_test(tc, addblock_null);
    1435         365 :     tcase_add_test(tc, addblock_duplicate);
    1436         365 :     tcase_add_test(tc, addblock_empty);
    1437         365 :     tcase_add_test(tc, addblock_longstrings);
    1438         365 :     tcase_add_test(tc, delblock_null);
    1439         365 :     tcase_add_test(tc, delblock_missing);
    1440         365 :     tcase_add_test(tc, addblock1_delblock1);
    1441         365 :     tcase_add_test(tc, addblock12_delblock12);
    1442         365 :     tcase_add_test(tc, addblock12_delblock21);
    1443         365 :     tcase_add_test(tc, addblock123_delblock123);
    1444         365 :     tcase_add_test(tc, addblock123_delblock2);
    1445             :     /* tcase_add_test(tc, adddelblock_oom); */
    1446             : #endif
    1447             : 
    1448         365 :     tc = tcase_create("WithData");
    1449         365 :     tcase_add_checked_fixture(tc, memtrack_checked_withdata_setup, memtrack_checked_common_teardown);
    1450         365 :     tcase_add_unchecked_fixture(tc, memtrack_unchecked_common_setup, memtrack_unchecked_common_teardown);
    1451         365 :     suite_add_tcase(s, tc);
    1452             : #ifndef NDEBUG
    1453             :     /* tcase_add_test(tc, getallocatedRAM_first); */
    1454             :     /* tcase_add_test(tc, getallocatedblocks_first); */
    1455         365 :     tcase_add_test(tc, getblocksize_first);
    1456         365 :     tcase_add_test(tc, getblocksize_null);
    1457         365 :     tcase_add_test(tc, getblocksize_missing);
    1458         365 :     tcase_add_test(tc, addblock_null_first);
    1459         365 :     tcase_add_test(tc, delblock_null_first);
    1460         365 :     tcase_add_test(tc, addblock_null);
    1461         365 :     tcase_add_test(tc, addblock_duplicate);
    1462         365 :     tcase_add_test(tc, addblock_empty);
    1463         365 :     tcase_add_test(tc, addblock_longstrings);
    1464         365 :     tcase_add_test(tc, delblock_null);
    1465         365 :     tcase_add_test(tc, delblock_missing);
    1466         365 :     tcase_add_test(tc, addblock1_delblock1);
    1467         365 :     tcase_add_test(tc, addblock12_delblock12);
    1468         365 :     tcase_add_test(tc, addblock12_delblock21);
    1469         365 :     tcase_add_test(tc, addblock123_delblock123);
    1470         365 :     tcase_add_test(tc, addblock123_delblock2);
    1471             :     /* tcase_add_test(tc, adddelblock_oom); */
    1472             : #endif
    1473             : 
    1474             : #ifdef HAVE_LIBOOM
    1475             :     tc = tcase_create("Uninitialized-OOM");
    1476             :     tcase_set_tags(tc,"oom");
    1477             :     tcase_add_checked_fixture(tc, memtrack_checked_uninitialized_setup, memtrack_checked_common_teardown);
    1478             :     tcase_add_unchecked_fixture(tc, memtrack_unchecked_oom_setup, memtrack_unchecked_oom_teardown);
    1479             :     suite_add_tcase(s, tc);
    1480             : #ifndef NDEBUG
    1481             :     tcase_add_loop_test(tc, getallocatedRAM_first, 0, 10);
    1482             :     tcase_add_loop_test(tc, getallocatedblocks_first, 0, 10);
    1483             :     tcase_add_loop_test(tc, getblocksize_first, 0, 10);
    1484             :     tcase_add_loop_test(tc, getblocksize_null, 0, 10);
    1485             :     tcase_add_loop_test(tc, getblocksize_missing, 0, 10);
    1486             :     tcase_add_loop_test(tc, addblock_null_first, 0, 10);
    1487             :     tcase_add_loop_test(tc, delblock_null_first, 0, 10);
    1488             :     tcase_add_loop_test(tc, addblock_null, 0, 10);
    1489             :     tcase_add_loop_test(tc, addblock_duplicate, 0, 10);
    1490             :     tcase_add_loop_test(tc, addblock_empty, 0, 10);
    1491             :     tcase_add_loop_test(tc, addblock_longstrings, 0, 10);
    1492             :     tcase_add_loop_test(tc, delblock_null, 0, 10);
    1493             :     tcase_add_loop_test(tc, delblock_missing, 0, 10);
    1494             :     tcase_add_loop_test(tc, addblock1_delblock1, 0, 10);
    1495             :     tcase_add_loop_test(tc, addblock12_delblock12, 0, 10);
    1496             :     tcase_add_loop_test(tc, addblock12_delblock21, 0, 10);
    1497             :     tcase_add_loop_test(tc, addblock123_delblock123, 0, 10);
    1498             :     tcase_add_loop_test(tc, addblock123_delblock2, 0, 10);
    1499             :     tcase_add_loop_test(tc, adddelblock_oom, 0, 10);
    1500             : #endif
    1501             : 
    1502             :     tc = tcase_create("WithData-OOM");
    1503             :     tcase_set_tags(tc,"oom");
    1504             :     tcase_add_checked_fixture(tc, memtrack_checked_withdata_setup, memtrack_checked_common_teardown);
    1505             :     tcase_add_unchecked_fixture(tc, memtrack_unchecked_oom_setup, memtrack_unchecked_oom_teardown);
    1506             :     suite_add_tcase(s, tc);
    1507             : #ifndef NDEBUG
    1508             :     /* tcase_add_loop_test(tc, getallocatedRAM_first, 0, 10); */
    1509             :     /* tcase_add_loop_test(tc, getallocatedblocks_first, 0, 10); */
    1510             :     tcase_add_loop_test(tc, getblocksize_first, 0, 10);
    1511             :     tcase_add_loop_test(tc, getblocksize_null, 0, 10);
    1512             :     tcase_add_loop_test(tc, getblocksize_missing, 0, 10);
    1513             :     tcase_add_loop_test(tc, addblock_null_first, 0, 10);
    1514             :     tcase_add_loop_test(tc, delblock_null_first, 0, 10);
    1515             :     tcase_add_loop_test(tc, addblock_null, 0, 10);
    1516             :     tcase_add_loop_test(tc, addblock_duplicate, 0, 10);
    1517             :     tcase_add_loop_test(tc, addblock_empty, 0, 10);
    1518             :     tcase_add_loop_test(tc, addblock_longstrings, 0, 10);
    1519             :     tcase_add_loop_test(tc, delblock_null, 0, 10);
    1520             :     tcase_add_loop_test(tc, delblock_missing, 0, 10);
    1521             :     tcase_add_loop_test(tc, addblock1_delblock1, 0, 10);
    1522             :     tcase_add_loop_test(tc, addblock12_delblock12, 0, 10);
    1523             :     tcase_add_loop_test(tc, addblock12_delblock21, 0, 10);
    1524             :     tcase_add_loop_test(tc, addblock123_delblock123, 0, 10);
    1525             :     tcase_add_loop_test(tc, addblock123_delblock2, 0, 10);
    1526             :     tcase_add_loop_test(tc, adddelblock_oom, 0, 10);
    1527             : #endif
    1528             : #endif /* HAVE_LIBOOM */
    1529             : 
    1530         365 :     return s;
    1531             : }
    1532             : 
    1533             : /* vim: set tw=80: */

Generated by: LCOV version 1.16