140 lines
4.8 KiB
C++
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);
|
|
}
|
|
}
|