@@ -394,6 +394,50 @@ static bool test_set_get_32regions_8(void) {
394
394
return subtest_set_get_region (28 , 32 );
395
395
}
396
396
397
+ static bool test_garbage_collect (void ) {
398
+ int ret ;
399
+ char key [] = "kvtestapp" ;
400
+ strcpy ((char * ) key_buf , key );
401
+ int num_of_keys = 0 ;
402
+ uint32_t value_len = 500 ;
403
+
404
+ printf ("Filling up storage with invalid (deleted) keys\r\n" );
405
+
406
+ // Fill up the storage
407
+ do {
408
+ for (uint32_t i = 0 ; i < value_len ; i ++ ) {
409
+ value_buf [i ] = num_of_keys ;
410
+ }
411
+
412
+ printf ("Setting key %d\r\n" , num_of_keys );
413
+ ret = libtocksync_kv_set (key_buf , strlen (key ), value_buf , value_len );
414
+
415
+ if (ret == RETURNCODE_SUCCESS ) {
416
+ num_of_keys ++ ;
417
+ }
418
+ } while (ret == RETURNCODE_SUCCESS );
419
+
420
+ printf ("Wrote %d K/V entries to flash, running garbage collection\n" , num_of_keys );
421
+
422
+ ret = libtocksync_kv_garbage_collect ();
423
+ CHECK (ret == RETURNCODE_SUCCESS );
424
+
425
+ printf ("Garbage collection finished, trying to re-set the keys\r\n" );
426
+
427
+ for (int i = 0 ; i < num_of_keys ; i ++ ) {
428
+ printf ("Setting key %d\r\n" , i );
429
+ for (uint32_t j = 0 ; j < value_len ; j ++ ) {
430
+ value_buf [j ] = i ;
431
+ }
432
+
433
+ CHECK (libtocksync_kv_set (key_buf , strlen (key ), value_buf , value_len ) == RETURNCODE_SUCCESS );
434
+ }
435
+
436
+ printf ("Set all keys\r\n" );
437
+
438
+ return true;
439
+ }
440
+
397
441
int main (void ) {
398
442
unit_test_fun tests [] = {
399
443
TEST (exists ),
@@ -419,6 +463,7 @@ int main(void) {
419
463
TEST (set_get_32regions_6 ),
420
464
TEST (set_get_32regions_7 ),
421
465
TEST (set_get_32regions_8 ),
466
+ TEST (garbage_collect ),
422
467
};
423
468
unit_test_runner (tests , sizeof (tests ) / sizeof (unit_test_fun ), 2000 , "org.tockos.unit_test" );
424
469
return 0 ;
0 commit comments