Skip to content

Commit d4a7aa9

Browse files
committed
Tests - Execute Command DCL execution verifiction (MSSQL/MySQL/PostgreSQL)
1 parent 628cebd commit d4a7aa9

File tree

4 files changed

+177
-0
lines changed

4 files changed

+177
-0
lines changed

QueryDB.Core.Tests/MSSQLTests.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,60 @@ public void Test_MSSQL_ExecuteCommand_DML_Unsupported_SELECT_Queries()
424424
}
425425
}
426426

427+
[TestMethod]
428+
[TestCategory(DB_TESTS), TestCategory(MSSQL_TESTS)]
429+
public void Test_MSSQL_ExecuteCommand_DCL_Queries()
430+
{
431+
var login = "test_user";
432+
var user = "test_user";
433+
var password = "Test@1234";
434+
var table = "agents";
435+
var commands = "SELECT, UPDATE";
436+
var checkCommand = "SELECT";
437+
438+
var createLogin = string.Format(Queries.MSSQLQueries.TestDB.DCL.CreateLoginSql_Login_Password, login, password);
439+
var createUser = string.Format(Queries.MSSQLQueries.TestDB.DCL.CreateUserSql_User_Login, user, login);
440+
var grantSql = string.Format(Queries.MSSQLQueries.TestDB.DCL.GrantSql_Command_Table_User, commands, table, user);
441+
var revokeSql = string.Format(Queries.MSSQLQueries.TestDB.DCL.RevokeSql_Command_Table_User, commands, table, user);
442+
var verifyPermissions = string.Format(Queries.MSSQLQueries.TestDB.DCL.VerifyPermission_User_Table_Command, user, table, checkCommand);
443+
var removeUser = string.Format(Queries.MSSQLQueries.TestDB.DCL.RemoveUserSql_User, user);
444+
var removeLogin = string.Format(Queries.MSSQLQueries.TestDB.DCL.RemoveLoginSql_Login, login);
445+
446+
var dbContext = new DBContext(DB.MSSQL, MSSQLConnectionString);
447+
448+
// Create Login
449+
var result = dbContext.ExecuteCommand(createLogin);
450+
Assert.AreEqual(-1, result);
451+
452+
// Create User
453+
result = dbContext.ExecuteCommand(createUser);
454+
Assert.AreEqual(-1, result);
455+
456+
// Existing Permissions
457+
var data = dbContext.FetchData(verifyPermissions).FirstOrDefault();
458+
Assert.AreEqual("0", data.ReferenceData["HasPermission"]);
459+
460+
// Grant
461+
result = dbContext.ExecuteCommand(grantSql);
462+
Assert.AreEqual(-1, result);
463+
data = dbContext.FetchData(verifyPermissions).FirstOrDefault();
464+
Assert.AreEqual("1", data.ReferenceData["HasPermission"]);
465+
466+
// Revoke
467+
result = dbContext.ExecuteCommand(revokeSql);
468+
Assert.AreEqual(-1, result);
469+
data = dbContext.FetchData(verifyPermissions).FirstOrDefault();
470+
Assert.AreEqual("0", data.ReferenceData["HasPermission"]);
471+
472+
// Remove User
473+
result = dbContext.ExecuteCommand(removeUser);
474+
Assert.AreEqual(-1, result);
475+
476+
// Remove Login
477+
result = dbContext.ExecuteCommand(removeLogin);
478+
Assert.AreEqual(-1, result);
479+
}
480+
427481
#endregion
428482

429483
#endregion

QueryDB.Core.Tests/MySQLTests.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,52 @@ public void Test_MySQL_ExecuteCommand_DML_Unsupported_SELECT_Queries()
404404
}
405405
}
406406

407+
[TestMethod]
408+
[TestCategory(DB_TESTS), TestCategory(MYSQL_TESTS)]
409+
public void Test_MySQL_ExecuteCommand_DCL_Queries()
410+
{
411+
var user = "test_user";
412+
var password = "Test@1234";
413+
var table = "Agents";
414+
var commands = "SELECT, UPDATE";
415+
var checkCommand = "SELECT";
416+
417+
var createUser = string.Format(Queries.MySQLQueries.TestDB.DCL.CreateUserSql_User_Password, user, password);
418+
var grantSql = string.Format(Queries.MySQLQueries.TestDB.DCL.GrantSql_Command_Table_User, commands, table, user);
419+
var revokeSql = string.Format(Queries.MySQLQueries.TestDB.DCL.RevokeSql_Command_Table_User, commands, table, user);
420+
var verifyPermissions = string.Format(Queries.MySQLQueries.TestDB.DCL.VerifyPermission_User, user);
421+
var removeUser = string.Format(Queries.MySQLQueries.TestDB.DCL.RemoveUserSql_User, user);
422+
423+
var dbContext = new DBContext(DB.MySQL, MySQLConnectionString);
424+
425+
// Create User
426+
var result = dbContext.ExecuteCommand(createUser);
427+
Assert.AreEqual(0, result);
428+
429+
// Existing Permissions
430+
var data = dbContext.FetchData(verifyPermissions);
431+
Assert.AreEqual(1, data.Count);
432+
Assert.IsFalse(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
433+
434+
// Grant
435+
result = dbContext.ExecuteCommand(grantSql);
436+
Assert.AreEqual(0, result);
437+
data = dbContext.FetchData(verifyPermissions);
438+
Assert.AreEqual(2, data.Count);
439+
Assert.IsTrue(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
440+
441+
// Revoke
442+
result = dbContext.ExecuteCommand(revokeSql);
443+
Assert.AreEqual(0, result);
444+
data = dbContext.FetchData(verifyPermissions);
445+
Assert.AreEqual(1, data.Count);
446+
Assert.IsFalse(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
447+
448+
//Remove User
449+
result = dbContext.ExecuteCommand(removeUser);
450+
Assert.AreEqual(0, result);
451+
}
452+
407453
#endregion
408454

409455
#endregion

QueryDB.Core.Tests/PostgreSQLTests.cs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,52 @@ public void Test_PostgreSQL_ExecuteCommand_DML_Unsupported_SELECT_Queries()
398398
}
399399
}
400400

401+
[TestMethod]
402+
[TestCategory(DB_TESTS), TestCategory(POSTGRESQL_TESTS)]
403+
public void Test_PostgreSQL_ExecuteCommand_DCL_Queries()
404+
{
405+
var user = "test_user";
406+
var password = "Test@1234";
407+
var table = "Agents";
408+
var commands = "SELECT, UPDATE";
409+
var checkCommand = "SELECT";
410+
411+
var createUser = string.Format(Queries.PostgreSQLQueries.TestDB.DCL.CreateUserSql_User_Password, user, password);
412+
var grantSql = string.Format(Queries.PostgreSQLQueries.TestDB.DCL.GrantSql_Command_Table_User, commands, table, user);
413+
var revokeSql = string.Format(Queries.PostgreSQLQueries.TestDB.DCL.RevokeSql_Command_Table_User, commands, table, user);
414+
var verifyPermissions = string.Format(Queries.PostgreSQLQueries.TestDB.DCL.VerifyPermission_User, user);
415+
var removeUser = string.Format(Queries.PostgreSQLQueries.TestDB.DCL.RemoveUserSql_User, user);
416+
417+
var dbContext = new DBContext(DB.PostgreSQL, PostgreSQLConnectionString);
418+
419+
// Create User
420+
var result = dbContext.ExecuteCommand(createUser);
421+
Assert.AreEqual(-1, result);
422+
423+
// Existing Permissions
424+
var data = dbContext.FetchData(verifyPermissions);
425+
Assert.AreEqual(0, data.Count);
426+
Assert.IsFalse(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
427+
428+
// Grant
429+
result = dbContext.ExecuteCommand(grantSql);
430+
Assert.AreEqual(-1, result);
431+
data = dbContext.FetchData(verifyPermissions);
432+
Assert.AreEqual(2, data.Count);
433+
Assert.IsTrue(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
434+
435+
// Revoke
436+
result = dbContext.ExecuteCommand(revokeSql);
437+
Assert.AreEqual(-1, result);
438+
data = dbContext.FetchData(verifyPermissions);
439+
Assert.AreEqual(0, data.Count);
440+
Assert.IsFalse(data.Any(data => data.ReferenceData.Values.Any(value => value.Contains(checkCommand))));
441+
442+
// Remove User
443+
result = dbContext.ExecuteCommand(removeUser);
444+
Assert.AreEqual(-1, result);
445+
}
446+
401447
#endregion
402448

403449
#endregion

QueryDB.Core.Tests/Queries.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ internal static class DML
4242
internal static string VerifyDMLExecution = @"SELECT * FROM Agents WHERE Agent_Code = 'A020'";
4343
internal static string SelectSql = @"SELECT * FROM Agents";
4444
}
45+
internal static class DCL
46+
{
47+
internal static string CreateLoginSql_Login_Password = @"CREATE LOGIN {0} WITH PASSWORD = '{1}'";
48+
internal static string CreateUserSql_User_Login = @"CREATE USER {0} FOR LOGIN {1}";
49+
internal static string GrantSql_Command_Table_User = @"GRANT {0} ON {1} TO {2}";
50+
internal static string RevokeSql_Command_Table_User = @"REVOKE {0} ON {1} TO {2}";
51+
internal static string VerifyPermission_User_Table_Command = @"SELECT COUNT(*) AS HasPermission FROM sys.database_permissions dp
52+
JOIN sys.database_principals pr ON dp.grantee_principal_id = pr.principal_id
53+
JOIN sys.objects obj ON dp.major_id = obj.object_id
54+
WHERE pr.name = '{0}' AND obj.name = '{1}' AND dp.permission_name = '{2}'";
55+
internal static string RemoveUserSql_User = @"DROP USER {0}";
56+
internal static string RemoveLoginSql_Login = @"DROP LOGIN {0}";
57+
}
4558
}
4659
}
4760

@@ -85,6 +98,14 @@ internal static class DML
8598
internal static string VerifyDMLExecution = @"SELECT * FROM Agents WHERE Agent_Code = 'A020'";
8699
internal static string SelectSql = @"SELECT * FROM Agents";
87100
}
101+
internal static class DCL
102+
{
103+
internal static string CreateUserSql_User_Password = @"CREATE USER '{0}' IDENTIFIED BY '{1}'";
104+
internal static string GrantSql_Command_Table_User = @"GRANT {0} ON {1} TO '{2}'";
105+
internal static string RevokeSql_Command_Table_User = @"REVOKE {0} ON {1} FROM '{2}'";
106+
internal static string VerifyPermission_User = @"SHOW GRANTS FOR '{0}'";
107+
internal static string RemoveUserSql_User = "DROP USER '{0}'";
108+
}
88109
}
89110
}
90111

@@ -171,6 +192,16 @@ internal static class DML
171192
internal static string VerifyDMLExecution = @"SELECT * FROM Agents WHERE Agent_Code = 'A020'";
172193
internal static string SelectSql = @"SELECT * FROM Agents";
173194
}
195+
internal static class DCL
196+
{
197+
internal static string CreateUserSql_User_Password = @"CREATE USER {0} WITH PASSWORD '{1}'";
198+
internal static string GrantSql_Command_Table_User = @"GRANT {0} ON {1} TO {2}";
199+
internal static string RevokeSql_Command_Table_User = @"REVOKE {0} ON {1} FROM {2}";
200+
internal static string VerifyPermission_User = @"SELECT grantee, privilege_type
201+
FROM information_schema.role_table_grants
202+
WHERE grantee = '{0}'";
203+
internal static string RemoveUserSql_User = @"DROP USER {0}";
204+
}
174205
}
175206
}
176207
}

0 commit comments

Comments
 (0)