Files

140 lines
4.8 KiB
C++

/*
* Copyright The async-profiler authors
* SPDX-License-Identifier: Apache-2.0
*/
#include "testRunner.hpp"
#include "arguments.h"
#include "os.h"
TEST_CASE(Parse_all_mode_no_override) {
Arguments args;
char argument[] = "start,all,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(args._all, true);
ASSERT_EQ(args._wall, 0);
ASSERT_EQ(args._alloc, 0);
ASSERT_EQ(args._nativemem, DEFAULT_ALLOC_INTERVAL);
ASSERT_EQ(args._lock, DEFAULT_LOCK_INTERVAL);
ASSERT_EQ(args._nativelock, DEFAULT_LOCK_INTERVAL);
ASSERT_EQ(args._live, true);
const char* expected_event = OS::isLinux() ? EVENT_CPU : NULL;
ASSERT_EQ(args._event, expected_event);
ASSERT_EQ(args._proc, OS::isLinux() ? DEFAULT_PROC_INTERVAL : -1);
}
TEST_CASE(Parse_all_mode_event_override) {
Arguments args;
char argument[] = "start,all,event=cycles,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(args._all, true);
ASSERT_EQ(args._event, "cycles");
ASSERT_EQ(args._wall, 0);
ASSERT_EQ(args._alloc, 0);
ASSERT_EQ(args._nativemem, DEFAULT_ALLOC_INTERVAL);
ASSERT_EQ(args._lock, DEFAULT_LOCK_INTERVAL);
ASSERT_EQ(args._nativelock, DEFAULT_LOCK_INTERVAL);
ASSERT_EQ(args._live, true);
ASSERT_EQ(args._proc, OS::isLinux() ? DEFAULT_PROC_INTERVAL : -1);
}
TEST_CASE(Parse_all_mode_event_and_threshold_override) {
Arguments args;
char argument[] = "start,all,event=cycles,nativemem=10,lock=100,alloc=1000,wall=10000,proc=10,nativelock=100000,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(args._all, true);
ASSERT_EQ(args._event, "cycles");
ASSERT_EQ(args._wall, 10000);
ASSERT_EQ(args._alloc, 1000);
ASSERT_EQ(args._nativemem, 10);
ASSERT_EQ(args._lock, 100);
ASSERT_EQ(args._nativelock, 100000);
ASSERT_EQ(args._live, true);
ASSERT_EQ(args._proc, 10);
}
TEST_CASE(Parse_override_before_all_mode) {
Arguments args;
char argument[] = "start,event=cycles,nativemem=10,lock=100,alloc=1000,proc=10,nativelock=1000,all,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(args._all, true);
ASSERT_EQ(args._event, "cycles");
ASSERT_EQ(args._wall, 0);
ASSERT_EQ(args._alloc, 1000);
ASSERT_EQ(args._nativemem, 10);
ASSERT_EQ(args._lock, 100);
ASSERT_EQ(args._nativelock, 1000);
ASSERT_EQ(args._live, true);
ASSERT_EQ(args._proc, 10);
}
TEST_CASE(Parse_proc_standalone) {
Arguments args;
char argument[] = "start,proc=5,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(args._proc, 5);
ASSERT_EQ(args._all, false);
}
TEST_CASE(Parse_proc_default_value) {
Arguments args;
char argument[] = "start,proc,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(args._proc, DEFAULT_PROC_INTERVAL);
}
TEST_CASE(Parse_proc_with_units) {
Arguments args;
char argument[] = "start,proc=2m,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(args._proc, 120);
}
TEST_CASE(Parse_ratelimit) {
Arguments args;
char argument[] = "start,event=cpu,ratelimit=cpu:1000;alloc:200;span:100,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(error.message(), NULL);
ASSERT_EQ(args._rate_limit[EC_CPU], 1000);
ASSERT_EQ(args._rate_limit[EC_ALLOC], 200);
ASSERT_EQ(args._rate_limit[EC_SPAN], 100);
for (int i = 0; i < EC_CATEGORIES; i++) {
if (i != EC_CPU && i != EC_ALLOC && i != EC_SPAN) {
ASSERT_EQ(args._rate_limit[i], -1);
}
}
}
TEST_CASE(Parse_ratelimit_all_categories) {
Arguments args;
char argument[] = "start,ratelimit=cpu:1;alloc:2;lock:3;wall:4;nativemem:5;nativelock:6;trace:7;span:0,file=%f.jfr";
Error error = args.parse(argument);
ASSERT_EQ(error.message(), NULL);
ASSERT_EQ(args._rate_limit[EC_CPU], 1);
ASSERT_EQ(args._rate_limit[EC_ALLOC], 2);
ASSERT_EQ(args._rate_limit[EC_LOCK], 3);
ASSERT_EQ(args._rate_limit[EC_WALL], 4);
ASSERT_EQ(args._rate_limit[EC_NATIVEMEM], 5);
ASSERT_EQ(args._rate_limit[EC_NATIVELOCK], 6);
ASSERT_EQ(args._rate_limit[EC_TRACE], 7);
ASSERT_EQ(args._rate_limit[EC_SPAN], 0);
}
TEST_CASE(Parse_ratelimit_invalid) {
const char* invalid_arguments[] = {
"start,ratelimit,file=%f.jfr",
"start,ratelimit=cpu,file=%f.jfr",
"start,ratelimit=cpu:,file=%f.jfr",
"start,ratelimit=cpu:-5,file=%f.jfr",
"start,ratelimit=foo:100,file=%f.jfr",
"start,ratelimit=cpu:100;;lock:200,file=%f.jfr",
"start,ratelimit=cpu:100@lock:200,file=%f.jfr",
};
for (size_t i = 0; i < sizeof(invalid_arguments) / sizeof(invalid_arguments[0]); i++) {
Arguments args;
Error error = args.parse(invalid_arguments[i]);
ASSERT_NE(error.message(), NULL);
ASSERT_EQ(strcmp(error.message(), "Invalid ratelimit"), 0);
}
}