New fstest to cover RFS bitmaps - fsrfsbitmap01

This commit is contained in:
Krzysztof Miesowicz
2012-09-26 13:42:11 +02:00
committed by Joel Sherrill
parent 37b18d217a
commit 445b2bd6c3
6 changed files with 743 additions and 0 deletions

View File

@@ -29,6 +29,7 @@ SUBDIRS += mrfs_fsrdwr
SUBDIRS += mrfs_fssymlink
SUBDIRS += mrfs_fstime
SUBDIRS += mrfs_fsfpathconf
SUBDIRS += mrfs_fsrfsbitmap01
SUBDIRS += fsnofs01
SUBDIRS += fsimfsgeneric01
SUBDIRS += fsbdpart01

View File

@@ -105,6 +105,7 @@ mrfs_fsrdwr/Makefile
mrfs_fssymlink/Makefile
mrfs_fstime/Makefile
mrfs_fsfpathconf/Makefile
mrfs_fsrfsbitmap01/Makefile
fsnofs01/Makefile
fsimfsgeneric01/Makefile
fsbdpart01/Makefile

View File

@@ -0,0 +1,29 @@
# COPYRIGHT (c) 2012-.
# Krzysztof Miesowicz krzysztof.miesowicz@gmail.com
#
# The license and distribution terms for this file may be
# found in the file LICENSE in this distribution or at
# http://www.rtems.com/license/LICENSE.
#
This file describes the directives and concepts tested by this test set.
test set name: fsrfsbitmap01
directives:
+ rtems_rfs_bitmap_open
+ rtems_rfs_bitmap_close
+ rtems_rfs_bitmap_load_map
+ rtems_rfs_bitmap_map_alloc
+ rtems_rfs_bitmap_map_clear
+ rtems_rfs_bitmap_map_clear_all
+ rtems_rfs_bitmap_map_set
+ rtems_rfs_bitmap_map_set_all
+ rtems_rfs_bitmap_map_test
concepts:
+ exercise all rfs bitmap directives

View File

@@ -0,0 +1,142 @@
*** FILE SYSTEM TEST ( MOUNTED RFS ) ***
Initializing filesystem MOUNTED RFS
START of RFS Bitmap Unit Test
Bit set value : 0
Bit clear value : 1
Num bit per element : 32
RFS Bitmap Test : size = 4096 (128)
1. Find bit with seed > size: pass (Success)
2. Find bit with seed = size: pass (Success)
3. Find bit 0 with seed = 0: pass (Success): bit = 0
4. Find bit (size - 1) with seed = (size - 1) (4095): pass (Success): bit = 4095
5. Test bit 0: pass (Success)
6. Test bit (size - 1) (4095): pass (Success)
7. Test bit range (1,4094] all clear: pass
8. Set all bits: PASS (Success)
9. Clear bit 3232: PASS (Success)
10. Find bit with seed = 0: pass (Success): bit = 3232
11. Fail to find bit with seed = 0: pass (Success): bit = 2048
12. Clear bit 0: pass (Success)
13. Find bit with seed = (size - 1): pass (Success): bit = 0
14. Clear bit (size - 1) (4095): pass (Success)
15. Find bit with seed = 0: pass (Success): bit = 4095
16. Clear bit 0: pass (Success)
17. Find bit with seed = (size / 2) (2048): pass (Success): bit = 0
18. Clear bit (size - 1) (4095): pass, (Success)
19. Find bit with seed = (size / 2) (2048): pass (Success): bit = 4095
20. Clear bit 0: pass (Success)
21. Find bit with seed = ((size / 2) - 1) (2047): pass (Success): bit = 0
22. Clear bit (size - 1) (4095): pass (Success)
23. Find bit with seed = ((size / 2) - 1) (2047): pass (Success): bit = 4095
23. Set all bits
23. Cleared bits (1432, 1463] (32)
23. Alloc'ed all bits (1463, 1494] (32)
24. Set all bits
24. Cleared bits (660, 716] (57)
24. Alloc'ed all bits (716, 772] (57)
25. Set all bits: PASS (Success)
26. Clear bit (1321, 2070]: PASS (Success)
27. Check free count is 749: 749: pass (Success)
28. Create search check free count is 749: 749: pass (Success)
29. Map set check with bit (4098) larger than size (4096)
30. Map clear check with bit (4098) larger than size (4096)
31. Map test check with bit (4098) larger than size (4096)
32. Set all bits in the map, then clear bit (2048) and set this bit once again: PASSED
33. Attempt to find bit when all bits are set (expected FAILED): FAILED
34. Clear all bits in the map.
RFS Bitmap Test : size = 2048 (64)
1. Find bit with seed > size: pass (Success)
2. Find bit with seed = size: pass (Success)
3. Find bit 0 with seed = 0: pass (Success): bit = 0
4. Find bit (size - 1) with seed = (size - 1) (2047): pass (Success): bit = 2047
5. Test bit 0: pass (Success)
6. Test bit (size - 1) (2047): pass (Success)
7. Test bit range (1,2046] all clear: pass
8. Set all bits: PASS (Success)
9. Clear bit 449: PASS (Success)
10. Find bit with seed = 0: pass (Success): bit = 449
11. Fail to find bit with seed = 0: pass (Success): bit = 0
12. Clear bit 0: pass (Success)
13. Find bit with seed = (size - 1): pass (Success): bit = 0
14. Clear bit (size - 1) (2047): pass (Success)
15. Find bit with seed = 0: pass (Success): bit = 2047
16. Clear bit 0: pass (Success)
17. Find bit with seed = (size / 2) (1024): pass (Success): bit = 0
18. Clear bit (size - 1) (2047): pass, (Success)
19. Find bit with seed = (size / 2) (1024): pass (Success): bit = 2047
20. Clear bit 0: pass (Success)
21. Find bit with seed = ((size / 2) - 1) (1023): pass (Success): bit = 0
22. Clear bit (size - 1) (2047): pass (Success)
23. Find bit with seed = ((size / 2) - 1) (1023): pass (Success): bit = 2047
23. Set all bits
23. Cleared bits (960, 991] (32)
23. Alloc'ed all bits (991, 1022] (32)
24. Set all bits
24. Cleared bits (166, 222] (57)
24. Alloc'ed all bits (222, 278] (57)
25. Set all bits: PASS (Success)
26. Clear bit (177, 770]: PASS (Success)
27. Check free count is 593: 593: pass (Success)
28. Create search check free count is 593: 593: pass (Success)
29. Map set check with bit (2050) larger than size (2048)
30. Map clear check with bit (2050) larger than size (2048)
31. Map test check with bit (2050) larger than size (2048)
32. Set all bits in the map, then clear bit (1024) and set this bit once again: PASSED
33. Attempt to find bit when all bits are set (expected FAILED): FAILED
34. Clear all bits in the map.
RFS Bitmap Test : size = 420 (14)
1. Find bit with seed > size: pass (Success)
2. Find bit with seed = size: pass (Success)
3. Find bit 0 with seed = 0: pass (Success): bit = 0
4. Find bit (size - 1) with seed = (size - 1) (419): pass (Success): bit = 419
5. Test bit 0: pass (Success)
6. Test bit (size - 1) (419): pass (Success)
7. Test bit range (1,418] all clear: pass
8. Set all bits: PASS (Success)
9. Clear bit 215: PASS (Success)
10. Find bit with seed = 0: pass (Success): bit = 215
11. Fail to find bit with seed = 0: pass (Success): bit = 0
12. Clear bit 0: pass (Success)
13. Find bit with seed = (size - 1): pass (Success): bit = 0
14. Clear bit (size - 1) (419): pass (Success)
15. Find bit with seed = 0: pass (Success): bit = 419
16. Clear bit 0: pass (Success)
17. Find bit with seed = (size / 2) (210): pass (Success): bit = 0
18. Clear bit (size - 1) (419): pass, (Success)
19. Find bit with seed = (size / 2) (210): pass (Success): bit = 419
20. Clear bit 0: pass (Success)
21. Find bit with seed = ((size / 2) - 1) (209): pass (Success): bit = 0
22. Clear bit (size - 1) (419): pass (Success)
23. Find bit with seed = ((size / 2) - 1) (209): pass (Success): bit = 419
23. Set all bits
23. Cleared bits (127, 158] (32)
23. Alloc'ed all bits (158, 189] (32)
24. Set all bits
24. Cleared bits (83, 139] (57)
24. Alloc'ed all bits (139, 195] (57)
25. Set all bits: PASS (Success)
26. Clear bit (94, 174]: PASS (Success)
27. Check free count is 80: 80: pass (Success)
28. Create search check free count is 80: 80: pass (Success)
29. Map set check with bit (422) larger than size (420)
30. Map clear check with bit (422) larger than size (420)
31. Map test check with bit (422) larger than size (420)
32. Set all bits in the map, then clear bit (210) and set this bit once again: PASSED
33. Attempt to find bit when all bits are set (expected FAILED): FAILED
34. Clear all bits in the map.
Testing bitmap_map functions with NULL bitmap control pointer
Allocate most of memory - attempt to fail while open bitmap - expect ENOMEM
Attempt to open bitmap returned: Not enough space
Freeing the allocated memory
END of RFS Bitmap Unit Test
Shutting down filesystem MOUNTED RFS
*** END OF FILE SYSTEM TEST ( MOUNTED RFS ) ***

View File

@@ -0,0 +1,537 @@
/*
* Copyright (c) 2012-.
* Krzysztof Miesowicz krzysztof.miesowicz@gmail.com
*
* This test is extended version of rtems-rfs-bimaps-ut.c . Most of this code
* was written by Chris Johns in rtems-rfs-bitmaps-ut.c and is copied
* and pasted here. Rest of this test was written by Krzysztof Miesowicz to
* completely cover rtems_rfs_bitmap_* symbols.
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
*/
#if HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <rtems/rfs/rtems-rfs-bitmaps.h>
#include <rtems/rfs/rtems-rfs-file-system.h>
#include "fstest.h"
#include "tmacros.h"
#include <rtems/malloc.h>
#define rtems_rfs_exit_on_error(_rc, _r, _c, _b) \
if ((_rc > 0) || _r) { free (_b); rtems_rfs_bitmap_close (_c); return; }
bool
rtems_rfs_bitmap_ut_test_range (rtems_rfs_bitmap_control* control,
int test,
bool set,
rtems_rfs_bitmap_bit bit,
size_t size)
{
unsigned int count;
bool result;
for (count = 0; count < size; count++)
{
int rc = rtems_rfs_bitmap_map_test (control, bit + count, &result);
if (rc > 0)
{
printf (" %2d. Test bit %" PRId32 " in range (%" PRId32 ",%ld] is %s: ",
test, bit + count, bit, bit + size - 1, !set ? "set" : "clear");
printf ("FAIL (%s)\n", strerror (rc));
return false;
}
if (!set)
result = !result;
if (!result)
{
printf (" %2d. Test bit %" PRId32 " in range (%" PRId32 ",%ld] is %s: ",
test, bit + count, bit, bit + size - 1, !set ? "set" : "clear");
printf (" %s\n", !result ? "pass" : "FAIL");
return false;
}
}
printf (" %2d. Test bit range (%" PRId32 ",%ld] all %s: pass\n",
test, bit, bit + size - 1, set ? "set" : "clear");
return true;
}
bool
rtems_rfs_bitmap_ut_alloc_seq_test (rtems_rfs_bitmap_control* control,
int test,
rtems_rfs_bitmap_bit bit,
size_t size)
{
bool state;
int i;
int rc;
printf (" %2d. Set all bits\n", test);
rc = rtems_rfs_bitmap_map_set_all (control);
if (rc > 0)
{
printf (" %2d. set all bits: FAIL (%s)\n", test, strerror (rc));
return false;
}
for (i = 0; i < size; i++)
rtems_rfs_bitmap_map_clear (control, bit + i);
printf (" %2d. Cleared bits (%" PRId32 ", %ld] (%zd)\n",
test, bit, bit + size - 1, size);
for (i = 0; i < rtems_rfs_bitmap_element_bits (); i++)
{
rc = rtems_rfs_bitmap_map_test (control, bit + i, &state);
if (rc > 0)
{
printf (" %2d. test bit: FAIL (%s)\n", test, strerror (rc));
return false;
}
if (state)
{
printf (" %2d. Cleared bit still set: bit = %" PRId32 "\n", test, bit + i);
return false;
}
}
for (i = 0, bit = 0; i < size; i++)
{
rtems_rfs_bitmap_bit seed = bit;
bool result;
int rc;
rc = rtems_rfs_bitmap_map_alloc (control, seed, &result, &bit);
if (rc > 0)
{
printf (" %2d. map all: FAIL (%s)\n", test, strerror (rc));
return false;
}
if (!result)
{
printf (" %2d. Find bit with seed = %" PRId32 ": %s: bit = %" PRId32 "\n",
test, seed, result ? "pass" : "FAIL", bit);
return false;
}
}
printf (" %2d. Alloc'ed all bits (%" PRId32 ", %ld] (%zd)\n",
test, bit, bit + size - 1, size);
return true;
}
void
rtems_rfs_bitmap_ut_test_bitmap (size_t size)
{
rtems_rfs_file_system fs;
rtems_rfs_bitmap_control control;
rtems_rfs_buffer_handle handle;
rtems_rfs_buffer buffer;
rtems_rfs_bitmap_bit bit = 0;
rtems_rfs_bitmap_bit first_bit;
rtems_rfs_bitmap_bit last_bit;
bool result;
size_t bytes;
size_t clear;
int rc;
bytes = (rtems_rfs_bitmap_elements (size) *
sizeof (rtems_rfs_bitmap_element));
memset (&fs, 0, sizeof (fs));
memset (&buffer, 0, sizeof (buffer));
buffer.buffer = malloc (bytes);
buffer.block = 1;
if (!buffer.buffer)
{
printf (" Cannot allocate bitmap memory\n");
return;
}
#if RTEMS_RFS_BITMAP_CLEAR_ZERO
memset (buffer.buffer, 0, bytes);
#else
memset (buffer.buffer, 0xff, bytes);
#endif
/*
* Do not close the handle so no writes need occur.
*/
rc = rtems_rfs_buffer_handle_open (&fs, &handle);
if (rc > 0)
{
printf (" Cannot open the handle: %d: %s\n", rc, strerror (rc));
free (buffer.buffer);
return;
}
handle.buffer = &buffer;
handle.bnum = 1;
printf ("\nRFS Bitmap Test : size = %zd (%zd)\n",
size, rtems_rfs_bitmap_elements (size));
rc = rtems_rfs_bitmap_open (&control, &fs, &handle, size, 1);
if (rc > 0)
{
printf (" Cannot open the bitmap: %s\n", strerror (rc));
free (buffer.buffer);
return;
}
/*
* This is a new bitmap with no bits set. Try and find a bit with a few
* seeds.
*/
rc = rtems_rfs_bitmap_map_alloc (&control, size * 2, &result, &bit);
printf (" 1. Find bit with seed > size: %s (%s)\n",
result ? "FAIL" : "pass", strerror (rc));
rtems_rfs_exit_on_error (rc, result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_alloc (&control, size, &result, &bit);
printf (" 2. Find bit with seed = size: %s (%s)\n",
result ? "FAIL" : "pass", strerror (rc));
rtems_rfs_exit_on_error (rc, result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
result = result && (bit == 0);
printf (" 3. Find bit 0 with seed = 0: %s (%s): bit = %" PRId32 "\n",
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_alloc (&control, size - 1, &result, &bit);
result = result && (bit == (size - 1));
printf (" 4. Find bit (size - 1) with seed = (size - 1) (%zd): %s (%s): bit = %" PRId32 "\n",
size - 1, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
/*
* Test the bits allocated to make sure they are set.
*/
rc = rtems_rfs_bitmap_map_test (&control, 0, &result);
printf (" 5. Test bit 0: %s (%s)\n",
result ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_test (&control, size - 1, &result);
printf (" 6. Test bit (size - 1) (%zd): %s (%s)\n",
size - 1, result ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
if (!rtems_rfs_bitmap_ut_test_range (&control, 7, false, 1, size - 2))
rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
/*
* Set all bits then clear one and find it.
*/
rc = rtems_rfs_bitmap_map_set_all (&control);
printf (" 8. Set all bits: %s (%s)\n",
rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
bit = rand () % size;
rc = rtems_rfs_bitmap_map_clear (&control, bit);
printf (" 9. Clear bit %" PRId32 ": %s (%s)\n",
bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
last_bit = bit;
rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
result = result && (bit == last_bit);
printf (" 10. Find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
result = !result || (bit != last_bit);
printf (" 11. Fail to find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_clear (&control, 0);
printf (" 12. Clear bit 0: %s (%s)\n",
rc == 0 ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_alloc (&control, size - 1, &result, &bit);
result = result && (bit == 0);
printf (" 13. Find bit with seed = (size - 1): %s (%s): bit = %" PRId32 "\n",
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
printf (" 14. Clear bit (size - 1) (%zd): %s (%s)\n",
size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_alloc (&control, 0, &result, &bit);
result = result && (bit == (size - 1));
printf (" 15. Find bit with seed = 0: %s (%s): bit = %" PRId32 "\n",
result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_clear (&control, 0);
printf (" 16. Clear bit 0: %s (%s)\n",
rc == 0 ? "pass" : "FAIL", strerror (rc));
rc = rtems_rfs_bitmap_map_alloc (&control, size / 2, &result, &bit);
result = result && (bit == 0);
printf (" 17. Find bit with seed = (size / 2) (%zd): %s (%s): bit = %" PRId32 "\n",
size / 2, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
printf (" 18. Clear bit (size - 1) (%zd): %s, (%s)\n",
size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_alloc (&control, size / 2, &result, &bit);
result = result && (bit == (size - 1));
printf (" 19. Find bit with seed = (size / 2) (%zd): %s (%s): bit = %" PRId32 "\n",
size / 2, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_clear (&control, 0);
printf (" 20. Clear bit 0: %s (%s)\n",
rc == 0 ? "pass" : "FAIL", strerror (rc));
rc = rtems_rfs_bitmap_map_alloc (&control, (size / 2) - 1, &result, &bit);
result = result && (bit == 0);
printf (" 21. Find bit with seed = ((size / 2) - 1) (%zd): %s (%s): bit = %" PRId32 "\n",
(size / 2) - 1, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rc = rtems_rfs_bitmap_map_clear (&control, size - 1);
printf (" 22. Clear bit (size - 1) (%zd): %s (%s)\n",
size - 1, rc == 0 ? "pass" : "FAIL", strerror (rc));
rc = rtems_rfs_bitmap_map_alloc (&control, (size / 2) - 1, &result, &bit);
result = result && (bit == (size - 1));
printf (" 23. Find bit with seed = ((size / 2) - 1) (%zd): %s (%s): bit = %" PRId32 "\n",
(size / 2) - 1, result ? "pass" : "FAIL", strerror (rc), bit);
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
result = rtems_rfs_bitmap_ut_alloc_seq_test (&control, 23, bit,
rtems_rfs_bitmap_element_bits ());
rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
result = rtems_rfs_bitmap_ut_alloc_seq_test (&control, 24, bit, 57);
rtems_rfs_exit_on_error (0, !result, &control, buffer.buffer);
/*
* Set all bits, clear a random numberone then create a search map and make
* sure the clear count is correct.
*/
rc = rtems_rfs_bitmap_map_set_all (&control);
printf (" 25. Set all bits: %s (%s)\n",
rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
first_bit = rand () % (size / 2) + rtems_rfs_bitmap_element_bits ();
last_bit = first_bit + rand () % (size / 2) + rtems_rfs_bitmap_element_bits();
for (bit = first_bit; bit < last_bit; bit++)
{
rc = rtems_rfs_bitmap_map_clear (&control, bit);
if (rc > 0)
{
printf (" 26. Clear bit %" PRId32 ": %s (%s)\n",
bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, false, &control, buffer.buffer);
}
}
printf (" 26. Clear bit (%" PRId32 ", %" PRId32 "]: %s (%s)\n",
first_bit, last_bit, rc == 0 ? "PASS" : "FAIL", strerror (rc));
clear = rtems_rfs_bitmap_map_free (&control);
result = clear == (last_bit - first_bit);
printf (" 27. Check free count is %zd: %" PRId32 ": %s (%s)\n",
clear, last_bit - first_bit,
result ? "pass" : "FAIL", strerror (rc));
rc = rtems_rfs_bitmap_create_search (&control);
result = clear == rtems_rfs_bitmap_map_free (&control);
printf (" 28. Create search check free count is %zd: %zd: %s (%s)\n",
clear, rtems_rfs_bitmap_map_free (&control),
result ? "pass" : "FAIL", strerror (rc));
rtems_rfs_exit_on_error (rc, !result, &control, buffer.buffer);
rtems_rfs_bitmap_bit mybit = control.size +2;
printf (" 29. Map set check with bit (%d) larger than size (%d)\n",
(int)mybit, (int)control.size);
rc = rtems_rfs_bitmap_map_set(&control, mybit);
rtems_test_assert( rc == EINVAL );
printf (" 30. Map clear check with bit (%d) larger than size (%d)\n",
(int)mybit, (int)control.size);
rc = rtems_rfs_bitmap_map_clear(&control, mybit);
rtems_test_assert( rc == EINVAL );
printf (" 31. Map test check with bit (%d) larger than size (%d)\n",
(int)mybit, (int)control.size);
rc = rtems_rfs_bitmap_map_test(&control, mybit ,&result);
rtems_test_assert( rc == EINVAL );
/* Set all bits, clear one and then set this cleared bit once again */
printf (" 32. Set all bits in the map, then clear bit (%lu) and set this bit once again:",control.size/2);
rc = rtems_rfs_bitmap_map_set_all(&control);
rtems_test_assert( rc == 0 );
rc = rtems_rfs_bitmap_map_clear(&control, control.size/2);
rtems_test_assert (rc == 0 );
rc = rtems_rfs_bitmap_map_set(&control, control.size/2);
rtems_test_assert (rc == 0 );
printf (" PASSED\n");
/* Attempt to find free bit (with different seeds) when all bits are set */
printf (" 33. Attempt to find bit when all bits are set (expected FAILED):");
rc = rtems_rfs_bitmap_map_alloc(&control, 0, &result, &bit);
rtems_test_assert(rc == 0 );
rtems_test_assert ( result == false );
rc = rtems_rfs_bitmap_map_alloc(&control, size-1, &result, &bit);
rtems_test_assert(rc == 0 );
rtems_test_assert ( result == false );
rc = rtems_rfs_bitmap_map_alloc(&control, size/2, &result, &bit);
rtems_test_assert(rc == 0 );
rtems_test_assert ( result == false );
rc = rtems_rfs_bitmap_map_alloc(&control, 1, &result, &bit);
rtems_test_assert(rc == 0 );
rtems_test_assert ( result == false );
rc = rtems_rfs_bitmap_map_alloc(&control, -2, &result, &bit);
rtems_test_assert(rc == 0 );
rtems_test_assert ( result == false );
printf(" FAILED\n");
/* Simply clear all bits */
printf (" 34. Clear all bits in the map.\n");
rc = rtems_rfs_bitmap_map_clear_all(&control);
rtems_test_assert( rc == 0 );
rtems_rfs_bitmap_close (&control);
free (buffer.buffer);
}
void rtems_rfs_bitmap_unit_test (void)
{
printf (" Bit set value : %d\n", RTEMS_RFS_BITMAP_BIT_SET);
printf (" Bit clear value : %d\n", RTEMS_RFS_BITMAP_BIT_CLEAR);
printf (" Num bit per element : %zd\n", rtems_rfs_bitmap_element_bits ());
#if INT_MAX >= 0x23984237
srand (0x23984237);
#else
srand (0x2398);
#endif
rtems_rfs_bitmap_ut_test_bitmap (4096);
rtems_rfs_bitmap_ut_test_bitmap (2048);
rtems_rfs_bitmap_ut_test_bitmap (420);
}
void nullpointer_test(void){
rtems_rfs_bitmap_control* control=NULL;
rtems_rfs_bitmap_control notnullcontrol;
rtems_rfs_bitmap_bit bit = 0;
rtems_rfs_bitmap_bit seed_bit = 0;
int rc;
bool result;
printf("\n Testing bitmap_map functions with NULL bitmap control " "pointer\n");
/* Invoke all functions with NULL control */
rc = rtems_rfs_bitmap_map_set(control, bit);
rtems_test_assert(rc>0);
rc = rtems_rfs_bitmap_map_clear(control, bit);
rtems_test_assert(rc>0);
rc = rtems_rfs_bitmap_map_test(control, bit, &result);
rtems_test_assert(rc>0);
rc = rtems_rfs_bitmap_map_set_all(control);
rtems_test_assert(rc>0);
rc = rtems_rfs_bitmap_map_clear_all(control);
rtems_test_assert(rc>0);
rc = rtems_rfs_bitmap_create_search(control);
rtems_test_assert(rc>0);
rc = rtems_rfs_bitmap_map_alloc(control, seed_bit, &result, &bit);
rtems_test_assert(!result);
/*
* Invoke map_alloc with not-null pointer to control, but with
* control uninitialized. It is to cover check in rtems_rfs_bitmap_load_map.
* We can't check directly if it goes this path, but we will see this in
* coverage
*/
rc = rtems_rfs_bitmap_map_set(&notnullcontrol, bit);
rtems_test_assert(rc > 0);
}
void open_failure(void){
rtems_rfs_file_system fs;
rtems_rfs_bitmap_control control;
rtems_rfs_buffer_handle handle;
rtems_rfs_buffer buffer;
size_t bytes;
int rc;
/* Attempt to get ENOMEM while open bitmap */
printf("\n Allocate most of memory - attempt to fail while open bitmap - expect ENOMEM\n" );
void *opaque;
static const uintptr_t location_size [] = {
sizeof(rtems_filesystem_global_location_t)
};
size_t size = location_size[0]*rtems_rfs_bitmap_search_element_bits();
bytes = (rtems_rfs_bitmap_elements (size) *
sizeof (rtems_rfs_bitmap_element));
opaque = rtems_heap_greedy_allocate( location_size, 1 );
memset (&fs, 0, sizeof (fs));
memset (&buffer, 0, sizeof (buffer));
buffer.buffer = malloc (bytes);
buffer.block = 1;
#if RTEMS_RFS_BITMAP_CLEAR_ZERO
memset (buffer.buffer, 0, bytes);
#else
memset (buffer.buffer, 0xff, bytes);
#endif
rc = rtems_rfs_buffer_handle_open (&fs, &handle);
handle.buffer = &buffer;
handle.bnum = 1;
rc = rtems_rfs_bitmap_open (&control, &fs, &handle, size, 1);
rtems_test_assert( rc == ENOMEM );
printf( " Attempt to open bitmap returned: %s\n", strerror(rc));
puts( " Freeing the allocated memory" );
rtems_heap_greedy_free( opaque );
}
void test(void){
puts("\n START of RFS Bitmap Unit Test");
rtems_rfs_bitmap_unit_test();
nullpointer_test();
open_failure();
puts("\n END of RFS Bitmap Unit Test");
}

View File

@@ -0,0 +1,33 @@
rtems_tests_PROGRAMS = mrfs_fsrfsbitmap01
mrfs_fsrfsbitmap01_SOURCES = ../fsrfsbitmap01/test.c
mrfs_fsrfsbitmap01_SOURCES += ../support/ramdisk_support.c
mrfs_fsrfsbitmap01_SOURCES += ../support/fstest_support.c
mrfs_fsrfsbitmap01_SOURCES += ../support/fstest_support.h
mrfs_fsrfsbitmap01_SOURCES += ../support/ramdisk_support.h
mrfs_fsrfsbitmap01_SOURCES += ../support/fstest.h
mrfs_fsrfsbitmap01_SOURCES += ../../psxtests/include/pmacros.h
mrfs_fsrfsbitmap01_SOURCES += ../mrfs_support/fs_support.c
mrfs_fsrfsbitmap01_SOURCES += ../mrfs_support/fs_config.h
#dist_rtems_tests_DATA = mrfs_fsrfsbitmap01.scn
#dist_rtems_tests_DATA += mrfs_fsrfsbitmap01.doc
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
include $(top_srcdir)/../automake/compile.am
include $(top_srcdir)/../automake/leaf.am
AM_CPPFLAGS += -I$(top_srcdir)/support
AM_CPPFLAGS += -I$(top_srcdir)/mrfs_support
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
AM_CPPFLAGS += -I$(top_srcdir)/../psxtests/include
LINK_OBJS = $(mrfs_fsrfsbitmap01_OBJECTS)
LINK_LIBS = $(mrfs_fsrfsbitmap01_LDLIBS)
mrfs_fsrfsbitmap01$(EXEEXT): $(mrfs_fsrfsbitmap01_OBJECTS) $(mrfs_fsrfsbitmap01_DEPENDENCIES)
@rm -f mrfs_fsrfsbitmap01$(EXEEXT)
$(make-exe)
include $(top_srcdir)/../automake/local.am