int main(int argc, char **argv) { struct bucket_conf c; struct leaky_bucket b; time_t start_time; time_t event_time; int ret; int i; #ifdef TEST_LEAKY_BUCKET_DEBUG printf("Testing with a rate of " RATE_STRING "\n"); #endif ret = bucket_conf_init(&c, RATE_STRING); if (ret) return ret; bucket_init(&b); start_time = b.tstamp; for (i = 1; i <= TOTAL_EVENTS; i++) { event_time = start_time + i * SECONDS_PER_EVENT; ret = __bucket_account(&c, &b, 1, event_time); #ifdef TEST_LEAKY_BUCKET_DEBUG if (ret) printf("Logging entry %d at %ld %ld\n", i, event_time - start_time, b.tstamp); #else if (i < THRESHOLD_EVENTS_PER_PERIOD) { if (!ret){ fprintf(stderr, "Did not log initial events - FAIL.\n"); return -1; } } else { if (!(i % EVENTS_PER_LOGGED_EVENT) && !ret) { fprintf(stderr, "Did not log initial events - FAIL.\n"); return -1; } } #endif } return 0; }
int config_trigger(const char *header, const char *base, struct bucket_conf *bc) { char *s; char *name; int n; asprintf(&name, "%s-threshold", base); s = config_string(header, name); if (s) { if (bucket_conf_init(bc, s) < 0) { unparseable("trigger", header, name); return -1; } } free(name); asprintf(&name, "%s-trigger", base); s = config_string(header, name); if (s) { /* no $PATH */ if (trigger_check(s) != 0) { SYSERRprintf("Trigger `%s' not executable\n", s); exit(1); } bc->trigger = s; } free(name); bc->log = 0; asprintf(&name, "%s-log", base); n = config_bool(header, name); if (n >= 0) bc->log = n; free(name); return 0; }