1 #include "tst-main.c"
2
3 static const char *rf = __FILE__;
4
tst_nums(int * ret,unsigned int num_buf,unsigned int num_non,unsigned int num_ptr,unsigned int num_ref)5 static void tst_nums(int *ret,
6 unsigned int num_buf, unsigned int num_non,
7 unsigned int num_ptr, unsigned int num_ref)
8 {
9 unsigned int val = 0;
10
11 TST_B_TST(*ret, 1,
12 !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_GET_NUM_SPARE_BUF, &val));
13 TST_B_TST(*ret, 2, (val != num_buf));
14
15 TST_B_TST(*ret, 3,
16 !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_GET_NUM_SPARE_NON, &val));
17 TST_B_TST(*ret, 4, (val != num_non));
18
19 TST_B_TST(*ret, 5,
20 !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_GET_NUM_SPARE_PTR, &val));
21 TST_B_TST(*ret, 6, (val != num_ptr));
22
23 TST_B_TST(*ret, 7,
24 !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_GET_NUM_SPARE_REF, &val));
25 TST_B_TST(*ret, 8, (val != num_ref));
26 }
27
tst(void)28 int tst(void)
29 {
30 int ret = 0;
31
32 tst_nums(&ret, 0, 0, 0, 0);
33
34 TST_B_TST(ret, 10,
35 !vstr_make_spare_nodes(s1->conf, VSTR_TYPE_NODE_BUF, 5));
36 TST_B_TST(ret, 11,
37 !vstr_make_spare_nodes(s1->conf, VSTR_TYPE_NODE_NON, 6));
38 TST_B_TST(ret, 12,
39 !vstr_make_spare_nodes(s1->conf, VSTR_TYPE_NODE_PTR, 7));
40 TST_B_TST(ret, 13,
41 !vstr_make_spare_nodes(s1->conf, VSTR_TYPE_NODE_REF, 8));
42 tst_nums(&ret, 5, 6, 7, 8);
43
44 vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_BUF, 4);
45 vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_NON, 3);
46 vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_PTR, 2);
47 vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_REF, 1);
48 tst_nums(&ret, 1, 3, 5, 7);
49
50 vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_BUF, 2048);
51 vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_NON, 1024);
52 vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_PTR, 512);
53 vstr_free_spare_nodes(s1->conf, VSTR_TYPE_NODE_REF, 256);
54 tst_nums(&ret, 0, 0, 0, 0);
55
56 TST_B_TST(ret, 14,
57 !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_SET_NUM_SPARE_BUF, 11));
58 TST_B_TST(ret, 15,
59 !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_SET_NUM_SPARE_NON, 12));
60 TST_B_TST(ret, 16,
61 !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_SET_NUM_SPARE_PTR, 13));
62 TST_B_TST(ret, 17,
63 !vstr_cntl_conf(s1->conf, VSTR_CNTL_CONF_SET_NUM_SPARE_REF, 14));
64 tst_nums(&ret, 11, 12, 13, 14);
65
66 TST_B_TST(ret, 14,
67 !vstr_cntl_conf(s1->conf,
68 VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_BUF, 110, 120));
69 TST_B_TST(ret, 15,
70 !vstr_cntl_conf(s1->conf,
71 VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_NON, 120, 130));
72 TST_B_TST(ret, 16,
73 !vstr_cntl_conf(s1->conf,
74 VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_PTR, 130, 140));
75 TST_B_TST(ret, 17,
76 !vstr_cntl_conf(s1->conf,
77 VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_REF, 140, 150));
78 tst_nums(&ret, 110, 120, 130, 140);
79
80 TST_B_TST(ret, 21,
81 !vstr_cntl_conf(s1->conf,
82 VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_BUF, 10, 20));
83 TST_B_TST(ret, 22,
84 !vstr_cntl_conf(s1->conf,
85 VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_NON, 20, 30));
86 TST_B_TST(ret, 23,
87 !vstr_cntl_conf(s1->conf,
88 VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_PTR, 30, 40));
89 TST_B_TST(ret, 24,
90 !vstr_cntl_conf(s1->conf,
91 VSTR_CNTL_CONF_SET_NUM_RANGE_SPARE_REF, 40, 50));
92 tst_nums(&ret, 20, 30, 40, 50);
93
94 if (MFAIL_NUM_OK)
95 {
96 Vstr_conf *succeeded = NULL;
97 unsigned long mfail_count = 0;
98
99 while (!succeeded)
100 {
101 tst_mfail_num(++mfail_count);
102 succeeded = vstr_make_conf();
103 }
104 tst_mfail_num(0);
105 ASSERT(mfail_count > 1);
106 vstr_free_conf(succeeded);
107 }
108
109 if (MFAIL_NUM_OK)
110 {
111 Vstr_base *succeeded = NULL;
112 unsigned long mfail_count = 0;
113
114 while (!succeeded)
115 {
116 tst_mfail_num(++mfail_count);
117 succeeded = vstr_make_base(NULL);
118 }
119 tst_mfail_num(0);
120 ASSERT(mfail_count > 1);
121 vstr_free_base(succeeded);
122 }
123
124 /* pre-init all data */
125 vstr_cntl_conf(NULL, VSTR_CNTL_CONF_SET_TYPE_GRPALLOC_CACHE,
126 VSTR_TYPE_CNTL_CONF_GRPALLOC_CSTR);
127 if (MFAIL_NUM_OK)
128 {
129 Vstr_base *succeeded = NULL;
130 unsigned long mfail_count = 0;
131
132 while (!succeeded)
133 {
134 tst_mfail_num(++mfail_count);
135 succeeded = vstr_make_base(NULL);
136 }
137 tst_mfail_num(0);
138 ASSERT(mfail_count > 1);
139 vstr_free_base(succeeded);
140 }
141
142 vstr_free_conf(NULL);
143
144 return (TST_B_RET(ret));
145 }
146