Skip to content

Commit

Permalink
acc: Code improvements
Browse files Browse the repository at this point in the history
* make the is_xxx_on() macros more practical, by returning `int` instead
of `unsigned long long`, to avoid integer overflows during result check

* fix strange 1-byte extra offset for the DO_ACC_EVI constant

* add more unit tests
  • Loading branch information
liviuchircu committed Dec 4, 2023
1 parent 0f0de89 commit f635a63
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 2 deletions.
4 changes: 2 additions & 2 deletions modules/acc/acc_logic.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
#define DO_ACC_LOG (1ULL<<(0*8))
#define DO_ACC_AAA (1ULL<<(1*8))
#define DO_ACC_DB (1ULL<<(2*8))
#define DO_ACC_EVI (1ULL<<(4*8))
#define DO_ACC_EVI (1ULL<<(3*8))
#define DO_ACC_ERR ((unsigned long long)-1)

#define DO_ACC (1ULL<<0) /* generic accounting flag - internal only */
Expand Down Expand Up @@ -79,7 +79,7 @@

#define ACC_MASK_REF_BYTE (((unsigned long long)(0xFF)<<(8*7))

#define is_acc_flag_set(_mask, _type, _flag) ( _mask & ((_type * _flag)))
#define is_acc_flag_set(_mask, _type, _flag) (!!( _mask & (_type * _flag)))

#define is_log_flag_on(_mask, _flag) is_acc_flag_set(_mask, DO_ACC_LOG, _flag)
#define is_log_acc_on(_mask) is_log_flag_on(_mask, DO_ACC)
Expand Down
73 changes: 73 additions & 0 deletions modules/acc/test/test.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,79 @@ static void test_acc_flags(void)
ok(!is_evi_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_evi_failed_on(mask), "test-acc-flags-%d", t++);


/* 7. All backends, all flags */
flags = DO_ACC_FLAGS;
mask = acc_bitmask_set(DO_ACC_LOG|DO_ACC_AAA|DO_ACC_DB|DO_ACC_EVI, &flags);
ok(is_log_acc_on(mask), "test-acc-flags-%d", t++);
ok(is_log_cdr_on(mask), "test-acc-flags-%d", t++);
ok(is_log_mc_on(mask), "test-acc-flags-%d", t++);
ok(is_log_failed_on(mask), "test-acc-flags-%d", t++);

ok(is_aaa_acc_on(mask), "test-acc-flags-%d", t++);
ok(is_aaa_cdr_on(mask), "test-acc-flags-%d", t++);
ok(is_aaa_mc_on(mask), "test-acc-flags-%d", t++);
ok(is_aaa_failed_on(mask), "test-acc-flags-%d", t++);

ok(is_db_acc_on(mask), "test-acc-flags-%d", t++);
ok(is_db_cdr_on(mask), "test-acc-flags-%d", t++);
ok(is_db_mc_on(mask), "test-acc-flags-%d", t++);
ok(is_db_failed_on(mask), "test-acc-flags-%d", t++);

ok(is_evi_acc_on(mask), "test-acc-flags-%d", t++);
ok(is_evi_cdr_on(mask), "test-acc-flags-%d", t++);
ok(is_evi_mc_on(mask), "test-acc-flags-%d", t++);
ok(is_evi_failed_on(mask), "test-acc-flags-%d", t++);


/* 8. resets across all backends */
types = DO_ACC_LOG|DO_ACC_AAA|DO_ACC_DB|DO_ACC_EVI;
flags = DO_ACC_FAILED;
mask = acc_bitmask_reset(&types, &flags, mask);
ok(is_log_acc_on(mask), "test-acc-flags-%d", t++);
ok(is_log_cdr_on(mask), "test-acc-flags-%d", t++);
ok(is_log_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_log_failed_on(mask), "test-acc-flags-%d", t++);

ok(is_aaa_acc_on(mask), "test-acc-flags-%d", t++);
ok(is_aaa_cdr_on(mask), "test-acc-flags-%d", t++);
ok(is_aaa_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_aaa_failed_on(mask), "test-acc-flags-%d", t++);

ok(is_db_acc_on(mask), "test-acc-flags-%d", t++);
ok(is_db_cdr_on(mask), "test-acc-flags-%d", t++);
ok(is_db_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_db_failed_on(mask), "test-acc-flags-%d", t++);

ok(is_evi_acc_on(mask), "test-acc-flags-%d", t++);
ok(is_evi_cdr_on(mask), "test-acc-flags-%d", t++);
ok(is_evi_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_evi_failed_on(mask), "test-acc-flags-%d", t++);


/* 9. ... and more resets */
types = DO_ACC_LOG|DO_ACC_AAA|DO_ACC_DB|DO_ACC_EVI;
flags = DO_ACC_CDR|DO_ACC_MISSED;
mask = acc_bitmask_reset(&types, &flags, mask);
ok(!is_log_acc_on(mask), "test-acc-flags-%d", t++);
ok(!is_log_cdr_on(mask), "test-acc-flags-%d", t++);
ok(!is_log_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_log_failed_on(mask), "test-acc-flags-%d", t++);

ok(!is_aaa_acc_on(mask), "test-acc-flags-%d", t++);
ok(!is_aaa_cdr_on(mask), "test-acc-flags-%d", t++);
ok(!is_aaa_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_aaa_failed_on(mask), "test-acc-flags-%d", t++);

ok(!is_db_acc_on(mask), "test-acc-flags-%d", t++);
ok(!is_db_cdr_on(mask), "test-acc-flags-%d", t++);
ok(!is_db_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_db_failed_on(mask), "test-acc-flags-%d", t++);

ok(!is_evi_acc_on(mask), "test-acc-flags-%d", t++);
ok(!is_evi_cdr_on(mask), "test-acc-flags-%d", t++);
ok(!is_evi_mc_on(mask), "test-acc-flags-%d", t++);
ok(!is_evi_failed_on(mask), "test-acc-flags-%d", t++);
}


Expand Down

0 comments on commit f635a63

Please sign in to comment.