405 lines
8.5 KiB
C
405 lines
8.5 KiB
C
/*
|
|
* This file is distributed as part of MaxScale from MariaDB. It is free
|
|
* software: you can redistribute it and/or modify it under the terms of the
|
|
* GNU General Public License as published by the Free Software Foundation,
|
|
* version 2.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with
|
|
* this program; if not, write to the Free Software Foundation, Inc., 51
|
|
* Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Copyright MariaDB Corporation 2014
|
|
*/
|
|
|
|
/**
|
|
*
|
|
* @verbatim
|
|
* Revision History
|
|
*
|
|
* Date Who Description
|
|
* 30/09/2014 Mark Riddoch Initial implementation
|
|
*
|
|
* @endverbatim
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <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;
|
|
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);
|
|
}
|