 e41589be10
			
		
	
	e41589be10
	
	
	
		
			
			- Headers now to be included as <maxscale/xyz.h> - First step, no cleanup of headers has been made. Only moving from one place to another + necessary modifications.
		
			
				
	
	
		
			504 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			504 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2016 MariaDB Corporation Ab
 | |
|  *
 | |
|  * Use of this software is governed by the Business Source License included
 | |
|  * in the LICENSE.TXT file and at www.mariadb.com/bsl.
 | |
|  *
 | |
|  * Change Date: 2019-07-01
 | |
|  *
 | |
|  * On the date above, in accordance with the Business Source License, use
 | |
|  * of this software will be governed by version 2 or later of the General
 | |
|  * Public License.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  *
 | |
|  * @verbatim
 | |
|  * Revision History
 | |
|  *
 | |
|  * Date         Who                 Description
 | |
|  * 30/09/2014   Mark Riddoch        Initial implementation
 | |
|  *
 | |
|  * @endverbatim
 | |
|  */
 | |
| 
 | |
| // To ensure that ss_info_assert asserts also when builing in non-debug mode.
 | |
| #if !defined(SS_DEBUG)
 | |
| #define SS_DEBUG
 | |
| #endif
 | |
| #if defined(NDEBUG)
 | |
| #undef NDEBUG
 | |
| #endif
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <unistd.h>
 | |
| #include <string.h>
 | |
| #include <maxscale/memlog.h>
 | |
| 
 | |
| /**
 | |
|  * Count the number of lines in a file
 | |
|  *
 | |
|  * @param file      The name of the file
 | |
|  * @return  -1 if the file could not be opened or the numebr of lines
 | |
|  */
 | |
| int
 | |
| linecount(char *file)
 | |
| {
 | |
|     FILE        *fp;
 | |
|     int     i = 0;
 | |
|     char        buffer[180];
 | |
| 
 | |
|     if ((fp = fopen(file, "r")) == NULL)
 | |
|     {
 | |
|         return -1;
 | |
|     }
 | |
|     while (fgets(buffer, 180, fp) != NULL)
 | |
|     {
 | |
|         i++;
 | |
|     }
 | |
|     fclose(fp);
 | |
|     return i;
 | |
| }
 | |
| 
 | |
| /* Some strings to log */
 | |
| char    *strings[] =
 | |
| {
 | |
|     "First log entry",
 | |
|     "Second entry",
 | |
|     "Third",
 | |
|     "The fourth thing to log",
 | |
|     "Add a final 5th item"
 | |
| };
 | |
| 
 | |
| int
 | |
| main()
 | |
| {
 | |
|     MEMLOG      *log, *log2;
 | |
|     long int    i;
 | |
|     long        j;
 | |
|     long long   k;
 | |
|     int     failures = 0;
 | |
| 
 | |
|     unlink("memlog1");
 | |
|     if ((log = memlog_create("memlog1", ML_INT, 100)) == NULL)
 | |
|     {
 | |
|         printf("Memlog Creation:		Failed\n");
 | |
|         failures++;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         printf("Memlog Creation:		Passed\n");
 | |
|         if (access("memlog1", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 1:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 1:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 50; i++)
 | |
|         {
 | |
|             memlog_log(log, (void *)i);
 | |
|         }
 | |
|         if (access("memlog1", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 2:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 2:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 50; i++)
 | |
|         {
 | |
|             memlog_log(log, (void *)i);
 | |
|         }
 | |
|         if (access("memlog1", R_OK) != 0)
 | |
|         {
 | |
|             printf("File existance 3:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 3:		Passed\n");
 | |
|         }
 | |
|         if (linecount("memlog1") != 100)
 | |
|         {
 | |
|             printf("Incorrect entry count:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Incorrect entry count:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 50; i++)
 | |
|         {
 | |
|             memlog_log(log, (void *)i);
 | |
|         }
 | |
|         if (linecount("memlog1") != 100)
 | |
|         {
 | |
|             printf("Premature Flushing:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Premature Flushing:		Passed\n");
 | |
|         }
 | |
|         memlog_destroy(log);
 | |
|         if (linecount("memlog1") != 150)
 | |
|         {
 | |
|             printf("Flush on destroy:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Flush on destroy:		Passed\n");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     unlink("memlog2");
 | |
|     if ((log = memlog_create("memlog2", ML_LONG, 100)) == NULL)
 | |
|     {
 | |
|         printf("Memlog Creation:		Failed\n");
 | |
|         failures++;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         printf("Memlog Creation:		Passed\n");
 | |
|         if (access("memlog2", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 1:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 1:		Passed\n");
 | |
|         }
 | |
|         for (j = 0; j < 50; j++)
 | |
|         {
 | |
|             memlog_log(log, (void *)j);
 | |
|         }
 | |
|         if (access("memlog2", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 2:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 2:		Passed\n");
 | |
|         }
 | |
|         for (j = 0; j < 50; j++)
 | |
|         {
 | |
|             memlog_log(log, (void *)j);
 | |
|         }
 | |
|         if (access("memlog2", R_OK) != 0)
 | |
|         {
 | |
|             printf("File existance 3:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 3:		Passed\n");
 | |
|         }
 | |
|         if (linecount("memlog2") != 100)
 | |
|         {
 | |
|             printf("Incorrect entry count:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Incorrect entry count:		Passed\n");
 | |
|         }
 | |
|         for (j = 0; j < 50; j++)
 | |
|         {
 | |
|             memlog_log(log, (void *)j);
 | |
|         }
 | |
|         if (linecount("memlog2") != 100)
 | |
|         {
 | |
|             printf("Premature Flushing:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Premature Flushing:		Passed\n");
 | |
|         }
 | |
|         memlog_destroy(log);
 | |
|         if (linecount("memlog2") != 150)
 | |
|         {
 | |
|             printf("Flush on destroy:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Flush on destroy:		Passed\n");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     unlink("memlog3");
 | |
|     if ((log = memlog_create("memlog3", ML_LONGLONG, 100)) == NULL)
 | |
|     {
 | |
|         printf("Memlog Creation:		Failed\n");
 | |
|         failures++;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         printf("Memlog Creation:		Passed\n");
 | |
|         if (access("memlog3", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 1:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 1:		Passed\n");
 | |
|         }
 | |
|         for (k = 0; k < 50; k++)
 | |
|         {
 | |
|             memlog_log(log, (void *)k);
 | |
|         }
 | |
|         if (access("memlog3", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 2:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 2:		Passed\n");
 | |
|         }
 | |
|         for (k = 0; k < 50; k++)
 | |
|         {
 | |
|             memlog_log(log, (void *)k);
 | |
|         }
 | |
|         if (access("memlog3", R_OK) != 0)
 | |
|         {
 | |
|             printf("File existance 3:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 3:		Passed\n");
 | |
|         }
 | |
|         if (linecount("memlog3") != 100)
 | |
|         {
 | |
|             printf("Incorrect entry count:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Incorrect entry count:		Passed\n");
 | |
|         }
 | |
|         for (k = 0; k < 50; k++)
 | |
|         {
 | |
|             memlog_log(log, (void *)k);
 | |
|         }
 | |
|         if (linecount("memlog3") != 100)
 | |
|         {
 | |
|             printf("Premature Flushing:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Premature Flushing:		Passed\n");
 | |
|         }
 | |
|         memlog_destroy(log);
 | |
|         if (linecount("memlog3") != 150)
 | |
|         {
 | |
|             printf("Flush on destroy:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Flush on destroy:		Passed\n");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     unlink("memlog4");
 | |
|     if ((log = memlog_create("memlog4", ML_STRING, 100)) == NULL)
 | |
|     {
 | |
|         printf("Memlog Creation:		Failed\n");
 | |
|         failures++;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         printf("Memlog Creation:		Passed\n");
 | |
|         if (access("memlog4", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 1:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 1:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 50; i++)
 | |
|         {
 | |
|             memlog_log(log, strings[i % 5]);
 | |
|         }
 | |
|         if (access("memlog4", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 2:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 2:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 50; i++)
 | |
|         {
 | |
|             memlog_log(log, strings[i % 5]);
 | |
|         }
 | |
|         if (access("memlog4", R_OK) != 0)
 | |
|         {
 | |
|             printf("File existance 3:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 3:		Passed\n");
 | |
|         }
 | |
|         if (linecount("memlog4") != 100)
 | |
|         {
 | |
|             printf("Incorrect entry count:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Incorrect entry count:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 50; i++)
 | |
|         {
 | |
|             memlog_log(log, strings[i % 5]);
 | |
|         }
 | |
|         if (linecount("memlog4") != 100)
 | |
|         {
 | |
|             printf("Premature Flushing:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Premature Flushing:		Passed\n");
 | |
|         }
 | |
|         memlog_destroy(log);
 | |
|         if (linecount("memlog4") != 150)
 | |
|         {
 | |
|             printf("Flush on destroy:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Flush on destroy:		Passed\n");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     unlink("memlog5");
 | |
|     unlink("memlog6");
 | |
|     if ((log = memlog_create("memlog5", ML_INT, 100)) == NULL)
 | |
|     {
 | |
|         printf("Memlog Creation:		Failed\n");
 | |
|         failures++;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         printf("Memlog Creation:		Passed\n");
 | |
|         if ((log2 = memlog_create("memlog6", ML_INT, 100)) == NULL)
 | |
|         {
 | |
|             printf("Memlog Creation:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Memlog Creation:		Passed\n");
 | |
|             for (i = 0; i < 40; i++)
 | |
|             {
 | |
|                 memlog_log(log, (void *)i);
 | |
|             }
 | |
|             for (i = 0; i < 30; i++)
 | |
|             {
 | |
|                 memlog_log(log2, (void *)i);
 | |
|             }
 | |
|             memlog_flush_all();
 | |
|             if (linecount("memlog5") != 40 ||
 | |
|                 linecount("memlog6") != 30)
 | |
|             {
 | |
|                 printf(
 | |
|                     "Memlog flush all:		Failed\n");
 | |
|                 failures++;
 | |
|             }
 | |
|             else
 | |
|                 printf(
 | |
|                     "Memlog flush all:		Passed\n");
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     unlink("memlog7");
 | |
|     if ((log = memlog_create("memlog7", ML_INT, 100)) == NULL)
 | |
|     {
 | |
|         printf("Memlog Creation:		Failed\n");
 | |
|         failures++;
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         printf("Memlog Creation:		Passed\n");
 | |
|         if (access("memlog7", R_OK) == 0)
 | |
|         {
 | |
|             printf("File existance 1:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 1:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 5050; i++)
 | |
|         {
 | |
|             memlog_log(log, (void *)i);
 | |
|         }
 | |
|         if (access("memlog7", R_OK) != 0)
 | |
|         {
 | |
|             printf("File existance 3:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("File existance 3:		Passed\n");
 | |
|         }
 | |
|         if (linecount("memlog7") != 5000)
 | |
|         {
 | |
|             printf("Incorrect entry count:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Incorrect entry count:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 50; i++)
 | |
|         {
 | |
|             memlog_log(log, (void *)i);
 | |
|         }
 | |
|         if (linecount("memlog7") != 5100)
 | |
|         {
 | |
|             printf("Residual flushing:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Premature Flushing:		Passed\n");
 | |
|         }
 | |
|         for (i = 0; i < 10120; i++)
 | |
|         {
 | |
|             memlog_log(log, (void *)i);
 | |
|         }
 | |
|         memlog_destroy(log);
 | |
|         if (linecount("memlog7") != 15220)
 | |
|         {
 | |
|             printf("Flush on destroy:		Failed\n");
 | |
|             failures++;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             printf("Flush on destroy:		Passed\n");
 | |
|         }
 | |
|     }
 | |
|     exit(failures);
 | |
| }
 |