/* * * Smart token bucket tests * */ /datum/unit_test/smart_token_bucket name = "Smart Token Bucket Unit Test" groups = list("generic") var/datum/smart_token_bucket/stb var/datum/smart_token_bucket/stb2 var/expiration_count = 0 var/high_watermark_count = 0 var/low_watermark_count = 0 var/total_expired_amount = 0 var/list/inserted_token_contents = list() var/list/expired_token_contents = list() var/is_inserting = FALSE var/expired_during_insertion = 0 /datum/unit_test/smart_token_bucket/start_test() if(Test1() == UNIT_TEST_FAILED) TEST_FAIL("Failed on Test1") else if(Test2() == UNIT_TEST_FAILED) TEST_FAIL("Failed on Test2") else TEST_PASS("Smart Token Bucket tests were successful") return 1 /datum/unit_test/smart_token_bucket/proc/Test1(var/tears = 100000, var/high_watermark = 30, var/low_watermark = 2, var/tokens_lifetime = (10 SECONDS)) var/modes = list("FixedTTL" = STB_MODE_FIXEDTTL, "VariableTTL" = STB_MODE_VARIABLETTL) var/flags = list("none" = null, "LeakyBucket" = STB_FLAG_LEAKYBUCKET) for(var/mode in modes) for(var/flag in flags) if((modes[mode] & STB_MODE_FIXEDTTL)) src.stb = new(mode = modes[mode], flags = flags[flag], tokens_lifetime = tokens_lifetime) else src.stb = new(mode = modes[mode], flags = flags[flag]) src.stb.high_watermark = high_watermark src.stb.high_watermark_call = CALLBACK(src, PROC_REF(HighWatermark)) src.stb.low_watermark = low_watermark src.stb.low_watermark_call = CALLBACK(src, PROC_REF(LowWatermark)) src.stb.bucket_size = tears var/expected_total_expired_amount = 0 src.is_inserting = TRUE for(var/i=0, i src.stb.low_watermark)) TEST_ASSERT((!src.stb.is_high_watermark), "The bucket is marked as high watermark, when it shouldn't be") TEST_ASSERT((!src.stb.is_low_watermark), "The bucket is marked as low watermark, when it shouldn't be") if(BUCKET_CONTENT_FILL >= src.stb.high_watermark) TEST_ASSERT((src.stb.is_high_watermark), "The bucket is not marked as high watermark, when it should be") TEST_ASSERT((!src.stb.is_low_watermark), "The bucket is marked as low watermark, when it shouldn't be") if(BUCKET_CONTENT_FILL <= src.stb.low_watermark) TEST_ASSERT((!src.stb.is_high_watermark), "The bucket is marked as high watermark, when it shouldn't be") TEST_ASSERT((src.stb.is_low_watermark), "The bucket is not marked as low watermark, when it should be") #undef BUCKET_CONTENT_FILL