用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

276 lines
15 KiB

# Resource group tests with thread priority enabled.
# Create Resource Group Tests
# 1. Invalid Resource Group Name.
CREATE RESOURCE GROUP 'invalid_utf8¿ÿres' TYPE=USER VCPU=1-3, 1;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''invalid_utf8¿ÿres' TYPE=USER VCPU=1-3, 1' at line 1
# 2. Invalid Resource Group Type
CREATE RESOURCE GROUP test TYPE=INVALID_TYPE VCPU=3-1, 0;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INVALID_TYPE VCPU=3-1, 0' at line 1
# 3. Invalid VCPU ID and VCPU Range
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=MAX_CPU_NUM;
ERROR HY000: Invalid cpu id MAX_CPU_NUM
# 3.1 Invalid VCPU Range.
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=3-1;
ERROR HY000: Invalid VCPU range 3-1
# 4. Invalid Value of thread priority.
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=25;
ERROR HY000: Invalid thread priority value 25 for User resource group user_resource. Allowed range is [0, 19].
# Create system resource group with invalid thread priority value.
CREATE RESOURCE GROUP system_resource TYPE=system THREAD_PRIORITY=25;
ERROR HY000: Invalid thread priority value 25 for System resource group system_resource. Allowed range is [-20, 0].
# 5. Invalid Value of thread priority for user resource group type.
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=-5;
ERROR HY000: Invalid thread priority value -5 for User resource group user_resource. Allowed range is [0, 19].
# 5.1 Thread priority ignored warning.
# 6. Create a valid user resource group.
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
user_resource USER 1 1-3 5
# 7. Resource group already exists error.
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
ERROR HY000: Resource Group 'user_resource' exists
# 7.1 Case sensitivity of RESOURCE GROUP.
CREATE RESOURCE GROUP USER_resource TYPE=USER;
ERROR HY000: Resource Group 'USER_resource' exists
DROP RESOURCE GROUP user_resource;
# 8. Privilege Error - user with default privileges can't create resource group.
CREATE USER u1;
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
ERROR 42000: Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN privilege(s) for this operation
# 9. Privilege Error - user with RESOURCE_GROUP_USER privilege can't create resource group.
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
ERROR 42000: Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN privilege(s) for this operation
DROP USER u1;
# 10. Length of resource group name is greater than maximum allowed limit of identifier names.
CREATE RESOURCE GROUP user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffffff TYPE=USER;
ERROR 42000: Identifier name 'user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' is too long
# ALTER resource group tests
# 1. Alter on non-existent resource group.
ALTER RESOURCE GROUP user_resource VCPU=3;
ERROR HY000: Resource Group 'user_resource' does not exist.
# 2. Alter with a invalid CPU ID
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=5;
ALTER RESOURCE GROUP user_resource VCPU=MAX_CPU_NUM;
ERROR HY000: Invalid cpu id MAX_CPU_NUM
# 3. Alter with invalid CPU range.
ALTER RESOURCE GROUP user_resource VCPU=3-1;
ERROR HY000: Invalid VCPU range 3-1
# 4. Alter with invalid thread_priority
ALTER RESOURCE GROUP user_resource THREAD_PRIORITY=25;
ERROR HY000: Invalid thread priority value 25 for User resource group user_resource. Allowed range is [0, 19].
# 5. Alter with invalid thread priority for a user resource group.
ALTER RESOURCE GROUP user_resource THREAD_PRIORITY=-5;
ERROR HY000: Invalid thread priority value -5 for User resource group user_resource. Allowed range is [0, 19].
# 6. DISABLE and ENABLE the resource group.
ALTER RESOURCE GROUP user_resource DISABLE;
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
user_resource USER 0 1-3 0
ALTER RESOURCE GROUP user_resource ENABLE;
# 7. Test FORCE option of ALTER
SET RESOURCE GROUP user_resource;
SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE RESOURCE_GROUP="user_resource";
COUNT(*) = 1
1
ALTER RESOURCE GROUP user_resource FORCE;
ERROR HY000: Option FORCE invalid as DISABLE option is not specified.
ALTER RESOURCE GROUP user_resource DISABLE;
ALTER RESOURCE GROUP user_resource DISABLE FORCE;
SELECT COUNT(*) = 0 FROM performance_schema.threads WHERE RESOURCE_GROUP="user_resource";
COUNT(*) = 0
1
# 8. Privilege Error - user with default privileges can't alter resource group.
CREATE USER u1;
ALTER RESOURCE GROUP user_resource VCPU=0 THREAD_PRIORITY=5;
ERROR 42000: Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN privilege(s) for this operation
# 9. Privilege Error - user with RESOURCE_GROUP_USER privilege can't alter resource group.
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
ALTER RESOURCE GROUP user_resource VCPU=0 THREAD_PRIORITY=5;
ERROR 42000: Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN privilege(s) for this operation
DROP USER u1;
# 10. Length of resource group name is greater than maximum allowed limit of identifier names.
ALTER RESOURCE GROUP user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffffff DISABLE;
ERROR 42000: Identifier name 'user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' is too long
# 11. Default resource groups can't be altered.
ALTER RESOURCE GROUP SYS_default VCPU=0;
ERROR HY000: Alter operation is disallowed on default resource groups.
ALTER RESOURCE GROUP USR_default VCPU=1;
ERROR HY000: Alter operation is disallowed on default resource groups.
# 11. Alter VCPU IDS and/or thread priority
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME='user_resource';
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
user_resource USER 0 1-3 0
ALTER RESOURCE GROUP user_resource VCPU=0,2;
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME='user_resource';
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
user_resource USER 0 0,2 0
ALTER RESOURCE GROUP user_resource THREAD_PRIORITY=3;
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME='user_resource';
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
user_resource USER 0 0,2 3
ALTER RESOURCE GROUP user_resource VCPU=3 THREAD_PRIORITY=1;
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME='user_resource';
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
user_resource USER 0 3 1
# DROP resource group tests.
# 1. DROP on a non-existent resource group.
DROP RESOURCE GROUP user_resource1;
ERROR HY000: Resource Group 'user_resource1' does not exist.
# 2. DROP an existing resource group.
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
user_resource USER 0 3 1
DROP RESOURCE GROUP user_resource;
# 3. Test FORCE option of resource group.
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=7;
SET RESOURCE GROUP user_resource;
DROP RESOURCE GROUP user_resource;
ERROR HY000: Resource group user_resource is busy.
SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
COUNT(*) = 1
1
DROP RESOURCE GROUP user_resource FORCE;
SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.RESOURCE_GROUPS WHERE RESOURCE_GROUP_NAME="user_resource";
COUNT(*) = 0
1
# 4. Privilege Error - user with RESOURCE_GROUP_USER privilege can't drop resource group.
CREATE USER u1;
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3;
DROP RESOURCE GROUP user_resource;
ERROR 42000: Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN privilege(s) for this operation
DROP RESOURCE GROUP user_resource;
DROP USER u1;
# 10. Length of resource group name is greater than maximum allowed limit of identifier names.
DROP RESOURCE GROUP user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffffff;
ERROR 42000: Identifier name 'user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' is too long
# 11. Default resource groups can't be dropped.
DROP RESOURCE GROUP USR_default;
ERROR HY000: Drop operation operation is disallowed on default resource groups.
DROP RESOURCE GROUP SYS_default;
ERROR HY000: Drop operation operation is disallowed on default resource groups.
# SET resource group tests.
SET RESOURCE GROUP user_resource;
ERROR HY000: Resource Group 'user_resource' does not exist.
# 2. SET current session to a resource group.
CREATE RESOURCE GROUP user_resource TYPE=USER VCPU=1-3 THREAD_PRIORITY=7;
SET RESOURCE GROUP user_resource;
SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE RESOURCE_GROUP="user_resource";
COUNT(*) = 1
1
# 3. Assign a system thread to a user resource group.
SET RESOURCE GROUP user_resource FOR pfs_system_thread_id;;
ERROR HY000: Unable to bind resource group user_resource with thread id (pfs_system_thread_id).(Resource group type and thread type doesn't match.).
# 4. Assign a system thread to system resource group.
CREATE RESOURCE GROUP system_resource TYPE=SYSTEM VCPU=0-2 THREAD_PRIORITY=-1;
SET RESOURCE GROUP system_resource FOR pfs_system_thread_id;;
SELECT THREAD_ID, NAME, RESOURCE_GROUP FROM performance_schema.threads WHERE THREAD_ID=pfs_system_thread_id;;
THREAD_ID NAME RESOURCE_GROUP
pfs_system_thread_id thread/innodb/io_write_thread system_resource
# 5. Assign a group of threads to a resource group.
SET RESOURCE GROUP system_resource FOR pfs_system_thread_id1, pfs_system_thread_id2;;
SELECT COUNT(*) = 2 FROM performance_schema.threads WHERE THREAD_ID IN (pfs_system_thread_id1, pfs_system_thread_id2);;
COUNT(*) = 2
1
# 6. Privilege Tests
CREATE USER u1;
SET RESOURCE GROUP user_resource;
ERROR 42000: Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN OR RESOURCE_GROUP_USER privilege(s) for this operation
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
SET RESOURCE GROUP user_resource;
SET RESOURCE GROUP system_resource;
ERROR 42000: Access denied; you need (at least one of) the RESOURCE_GROUP_ADMIN privilege(s) for this operation
DROP USER u1;
# 7. SET RESOURCE GROUP on invalid thread id will give warning.
SET RESOURCE GROUP user_resource FOR 77777;
ERROR HY000: Invalid thread id (77777).
# 8. Disable resource group and assign to the current session - This should give error.
ALTER RESOURCE GROUP user_resource DISABLE;
SET RESOURCE GROUP user_resource;
ERROR HY000: Resource group user_resource is disabled.
DROP RESOURCE GROUP user_resource FORCE;
# 10. Length of resource group name is greater than maximum allowed limit of identifier names.
SET RESOURCE GROUP user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafffffffff;
ERROR 42000: Identifier name 'user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' is too long
# 11. Do not allow a system resource group to be assigned to user thread.
SET RESOURCE GROUP SYS_default;
ERROR HY000: Unable to bind resource group SYS_default with thread id ID.(System resource group can't be applied to user thread.).
# Query Hint Tests
# 1. Hint on non-existent Resource Group.
SELECT /*+ RESOURCE_GROUP(rg) */ 1;
1
1
Warnings:
Warning 3651 Resource Group 'rg' does not exist.
# 2. Using system resource group in hint for a non-privilege user should give warning
CREATE USER u1;
SELECT /*+ RESOURCE_GROUP(system_resource) */ 1;
1
1
Warnings:
Warning 3661 Unable to bind resource group system_resource with thread id ID.(System resource group can't be bound with a session thread).
DROP USER u1;
# 3. Length of resource group name is greater than maximum allowed limit of identifier names.
# length shall be truncated in this case and warning output to user.
SELECT /*+ RESOURCE GROUP (user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaffffffff#f) */ 1;
1
1
Warnings:
Warning 1064 Optimizer hint syntax error near 'RESOURCE GROUP (user_resource_1234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' at line 1
# Information Schema and Privilege related tests.
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
USR_default USER 1 NUM_VCPUS 0
SYS_default SYSTEM 1 NUM_VCPUS 0
system_resource SYSTEM 1 NUM_VCPUS -1
CREATE USER u1;
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
GRANT RESOURCE_GROUP_USER ON *.* TO u1;
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
USR_default USER 1 NUM_VCPUS 0
GRANT RESOURCE_GROUP_ADMIN ON *.* TO u1;
SELECT * FROM INFORMATION_SCHEMA.RESOURCE_GROUPS;
RESOURCE_GROUP_NAME RESOURCE_GROUP_TYPE RESOURCE_GROUP_ENABLED VCPU_IDS THREAD_PRIORITY
USR_default USER 1 NUM_VCPUS 0
SYS_default SYSTEM 1 NUM_VCPUS 0
system_resource SYSTEM 1 NUM_VCPUS -1
DROP USER u1;
DROP RESOURCE GROUP system_resource FORCE;
# BUG 27638623 - DEBUG ASSERT WHEN EXECUTING CREATE RESOURCE GROUP
# IN STORED FUNCTION
CREATE FUNCTION func() RETURNS INT
BEGIN
CREATE RESOURCE GROUP Batch TYPE = USER VCPU = 2-3;
RETURN 0;
END|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
CREATE RESOURCE GROUP Batch TYPE = USER VCPU = 2-3|
CREATE FUNCTION func() RETURNS INT
BEGIN
SET RESOURCE GROUP Batch;
RETURN 0;
END|
SELECT func();
func()
0
SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE RESOURCE_GROUP="Batch";
COUNT(*) = 1
1
DROP RESOURCE GROUP Batch FORCE;
DROP FUNCTION func;
CREATE RESOURCE GROUP test TYPE = USER VCPU=2-3;
SET @rg_name='test';
SET @cmd = CONCAT("SET RESOURCE GROUP ", @rg_name);
SELECT @cmd;
@cmd
SET RESOURCE GROUP test
PREPARE stmt FROM @cmd;
EXECUTE stmt;
SELECT COUNT(*) = 1 FROM performance_schema.threads WHERE RESOURCE_GROUP="test";
COUNT(*) = 1
1
DROP RESOURCE GROUP test FORCE;