Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause 2 : : * Copyright (C) 2017 Intel Corporation. 3 : : * All rights reserved. 4 : : */ 5 : : 6 : : #include "spdk_internal/cunit.h" 7 : : 8 : : #include "blobfs/tree.c" 9 : : 10 : : void 11 : 30 : cache_buffer_free(struct cache_buffer *cache_buffer) 12 : : { 13 : 30 : free(cache_buffer); 14 : 30 : } 15 : : 16 : : static void 17 : 6 : blobfs_tree_op_test(void) 18 : : { 19 : : struct cache_tree *tree; 20 : 5 : struct cache_buffer *buffer[5]; 21 : : struct cache_buffer *tmp_buffer; 22 : : int i; 23 : : 24 [ + + ]: 36 : for (i = 0; i < 5; i ++) { 25 : 30 : buffer[i] = calloc(1, sizeof(struct cache_buffer)); 26 [ - + ]: 30 : SPDK_CU_ASSERT_FATAL(buffer[i]); 27 : : } 28 : : 29 : 6 : tree = calloc(1, sizeof(*tree)); 30 [ - + ]: 6 : SPDK_CU_ASSERT_FATAL(tree != NULL); 31 : : 32 : : /* insert buffer[0] */ 33 : 6 : buffer[0]->offset = 0; 34 : 6 : tree = tree_insert_buffer(tree, buffer[0]); 35 [ - + ]: 6 : SPDK_CU_ASSERT_FATAL(tree != NULL); 36 : 6 : CU_ASSERT(tree->level == 0); 37 : 6 : tmp_buffer = tree_find_buffer(tree, buffer[0]->offset); 38 : 6 : CU_ASSERT(tmp_buffer == buffer[0]); 39 : : 40 : : /* insert buffer[1] */ 41 : 6 : buffer[1]->offset = CACHE_BUFFER_SIZE; 42 : : /* set the bytes_filled equal = bytes_filled with same non zero value, e.g., 32 */ 43 : 6 : buffer[1]->bytes_filled = buffer[1]->bytes_flushed = 32; 44 : 6 : tree = tree_insert_buffer(tree, buffer[1]); 45 [ - + ]: 6 : SPDK_CU_ASSERT_FATAL(tree != NULL); 46 : 6 : CU_ASSERT(tree->level == 0); 47 : 6 : tmp_buffer = tree_find_filled_buffer(tree, buffer[1]->offset); 48 : 6 : CU_ASSERT(tmp_buffer == buffer[1]); 49 : : 50 : : /* insert buffer[2] */ 51 : 6 : buffer[2]->offset = (CACHE_TREE_WIDTH - 1) * CACHE_BUFFER_SIZE; 52 : 6 : tree = tree_insert_buffer(tree, buffer[2]); 53 [ - + ]: 6 : SPDK_CU_ASSERT_FATAL(tree != NULL); 54 : 6 : CU_ASSERT(tree->level == 0); 55 : 6 : tmp_buffer = tree_find_buffer(tree, buffer[2]->offset); 56 : 6 : CU_ASSERT(tmp_buffer == buffer[2]); 57 : 6 : tmp_buffer = tree_find_filled_buffer(tree, buffer[2]->offset); 58 : 6 : CU_ASSERT(tmp_buffer == NULL); 59 : : 60 : : /* insert buffer[3], set an offset which can not be fit level 0 */ 61 : 6 : buffer[3]->offset = CACHE_TREE_LEVEL_SIZE(1); 62 : 6 : tree = tree_insert_buffer(tree, buffer[3]); 63 [ - + ]: 6 : SPDK_CU_ASSERT_FATAL(tree != NULL); 64 : 6 : CU_ASSERT(tree->level == 1); 65 : 6 : tmp_buffer = tree_find_buffer(tree, buffer[3]->offset); 66 : 6 : CU_ASSERT(tmp_buffer == buffer[3]); 67 : : 68 : : /* insert buffer[4], set an offset which can not be fit level 1 */ 69 : 6 : buffer[4]->offset = CACHE_TREE_LEVEL_SIZE(2); 70 : 6 : tree = tree_insert_buffer(tree, buffer[4]); 71 [ - + ]: 6 : SPDK_CU_ASSERT_FATAL(tree != NULL); 72 : 6 : CU_ASSERT(tree->level == 2); 73 : 6 : tmp_buffer = tree_find_buffer(tree, buffer[4]->offset); 74 : 6 : CU_ASSERT(tmp_buffer == buffer[4]); 75 : : 76 : : /* delete buffer[0] */ 77 : 6 : tree_remove_buffer(tree, buffer[0]); 78 : : /* check whether buffer[0] is still existed or not */ 79 : 6 : tmp_buffer = tree_find_buffer(tree, 0); 80 : 6 : CU_ASSERT(tmp_buffer == NULL); 81 : : 82 : : /* delete buffer[3] */ 83 : 6 : tree_remove_buffer(tree, buffer[3]); 84 : : /* check whether buffer[3] is still existed or not */ 85 : 6 : tmp_buffer = tree_find_buffer(tree, CACHE_TREE_LEVEL_SIZE(1)); 86 : 6 : CU_ASSERT(tmp_buffer == NULL); 87 : : 88 : : /* free all buffers in the tree */ 89 : 6 : tree_free_buffers(tree); 90 : : 91 : : /* check whether buffer[1] is still existed or not */ 92 : 6 : tmp_buffer = tree_find_buffer(tree, CACHE_BUFFER_SIZE); 93 : 6 : CU_ASSERT(tmp_buffer == NULL); 94 : : /* check whether buffer[2] is still existed or not */ 95 : 6 : tmp_buffer = tree_find_buffer(tree, (CACHE_TREE_WIDTH - 1) * CACHE_BUFFER_SIZE); 96 : 6 : CU_ASSERT(tmp_buffer == NULL); 97 : : /* check whether buffer[4] is still existed or not */ 98 : 6 : tmp_buffer = tree_find_buffer(tree, CACHE_TREE_LEVEL_SIZE(2)); 99 : 6 : CU_ASSERT(tmp_buffer == NULL); 100 : : 101 : : /* According to tree_free_buffers, root will not be freed */ 102 : 6 : free(tree); 103 : 6 : } 104 : : 105 : : int 106 : 6 : main(int argc, char **argv) 107 : : { 108 : 6 : CU_pSuite suite = NULL; 109 : : unsigned int num_failures; 110 : : 111 : 6 : CU_initialize_registry(); 112 : : 113 : 6 : suite = CU_add_suite("tree", NULL, NULL); 114 : 6 : CU_ADD_TEST(suite, blobfs_tree_op_test); 115 : : 116 : 6 : num_failures = spdk_ut_run_tests(argc, argv, NULL); 117 : 6 : CU_cleanup_registry(); 118 : : 119 : 6 : return num_failures; 120 : : }