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 : 1 : struct cache_tree *tree;
20 : 5 : struct cache_buffer *buffer[5];
21 : 1 : struct cache_buffer *tmp_buffer;
22 : 1 : 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 : 5 : }
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 : 1 : 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 : 7 : return num_failures;
120 : 1 : }
|