From b3feeea385be61b48bc444aae5749ca359a9267e Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Wed, 22 May 2024 12:42:07 -0500 Subject: [PATCH] Adopted DENSITY param in test_dirs fuzz tests Originally implemented in test_files, the DENSITY param sort of squishes the files/dirs together, so random fuzzing is more likely to end up with mkdir/rename collisions. These can be a bit more interesting for finding weird corner cases. --- tests/test_dirs.toml | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/tests/test_dirs.toml b/tests/test_dirs.toml index c67c97cd..ca825260 100644 --- a/tests/test_dirs.toml +++ b/tests/test_dirs.toml @@ -1278,6 +1278,8 @@ code = ''' [cases.test_dirs_mkdir_fuzz] defines.N = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512] +# do more ops than dirs to encourage rename collisions +defines.DENSITY = 2 defines.PARENT = [false, true] defines.REMOUNT = [false, true] defines.SEED = 'range(20)' @@ -1304,8 +1306,8 @@ code = ''' uint32_t prng = SEED; for (lfs_size_t i = 0; i < N; i++) { - // choose a pseudo-random number, truncate to 3 hexadecimals - lfs_size_t x = TEST_PRNG(&prng) % 0x1000; + // choose a pseudo-random number + lfs_size_t x = TEST_PRNG(&prng) % ((N+DENSITY-1) / DENSITY); // insert into our sim for (lfs_size_t j = 0;; j++) { @@ -4201,6 +4203,8 @@ code = ''' [cases.test_dirs_rm_fuzz] defines.N = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512] +# do more ops than dirs to encourage rename collisions +defines.DENSITY = 2 defines.PARENT = [false, true] defines.REMOUNT = [false, true] defines.SEED = 'range(20)' @@ -4231,8 +4235,8 @@ code = ''' uint8_t op = TEST_PRNG(&prng) % 2; if (op == 0 || sim_size == 0) { - // choose a pseudo-random number, truncate to 3 hexadecimals - lfs_size_t x = TEST_PRNG(&prng) % 0x1000; + // choose a pseudo-random number + lfs_size_t x = TEST_PRNG(&prng) % ((N+DENSITY-1) / DENSITY); // insert into our sim for (lfs_size_t j = 0;; j++) { if (j >= sim_size || sim[j] >= x) { @@ -6669,6 +6673,8 @@ code = ''' [cases.test_dirs_mv_fuzz] defines.N = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512] +# do more ops than dirs to encourage rename collisions +defines.DENSITY = 2 defines.PARENT = [false, true] defines.REMOUNT = [false, true] defines.SEED = 'range(20)' @@ -6699,8 +6705,8 @@ code = ''' uint8_t op = TEST_PRNG(&prng) % 2; if (op == 0 || sim_size == 0) { - // choose a pseudo-random number, truncate to 3 hexadecimals - lfs_size_t x = TEST_PRNG(&prng) % 0x1000; + // choose a pseudo-random number + lfs_size_t x = TEST_PRNG(&prng) % ((N+DENSITY-1) / DENSITY); // insert into our sim for (lfs_size_t j = 0;; j++) { if (j >= sim_size || sim[j] >= x) { @@ -6729,7 +6735,7 @@ code = ''' // number to rename to lfs_size_t j = TEST_PRNG(&prng) % sim_size; lfs_size_t x = sim[j]; - lfs_size_t y = TEST_PRNG(&prng) % 0x1000; + lfs_size_t y = TEST_PRNG(&prng) % ((N+DENSITY-1) / DENSITY); for (lfs_size_t k = 0;; k++) { if (k >= sim_size || sim[k] >= y) { // already seen and not a noop? @@ -6814,6 +6820,8 @@ code = ''' # test all of the operations together [cases.test_dirs_general_fuzz] defines.N = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512] +# do more ops than dirs to encourage rename collisions +defines.DENSITY = 2 defines.PARENT = [false, true] defines.REMOUNT = [false, true] defines.SEED = 'range(20)' @@ -6844,8 +6852,8 @@ code = ''' uint8_t op = TEST_PRNG(&prng) % 3; if (op == 0 || sim_size == 0) { - // choose a pseudo-random number, truncate to 3 hexadecimals - lfs_size_t x = TEST_PRNG(&prng) % 0x1000; + // choose a pseudo-random number + lfs_size_t x = TEST_PRNG(&prng) % ((N+DENSITY-1) / DENSITY); // insert into our sim for (lfs_size_t j = 0;; j++) { if (j >= sim_size || sim[j] >= x) { @@ -6888,7 +6896,7 @@ code = ''' // number to rename to lfs_size_t j = TEST_PRNG(&prng) % sim_size; lfs_size_t x = sim[j]; - lfs_size_t y = TEST_PRNG(&prng) % 0x1000; + lfs_size_t y = TEST_PRNG(&prng) % ((N+DENSITY-1) / DENSITY); for (lfs_size_t k = 0;; k++) { if (k >= sim_size || sim[k] >= y) { // already seen and not a noop?