Skip to content

Commit db9b9b2

Browse files
committed
Update auth tests for UNMASK permission
1 parent 049703f commit db9b9b2

File tree

2 files changed

+64
-39
lines changed

2 files changed

+64
-39
lines changed

auth_test.py

Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,31 @@ def role_creator_permissions(self, creator, role):
3434
permissions = ('ALTER', 'DROP', 'DESCRIBE')
3535
return [(creator, role, perm) for perm in permissions]
3636

37+
def cluster_version_has_unmask_permission(self):
38+
return self.cluster.version() >= LooseVersion('4.2')
39+
40+
def data_resource_creator_permissions(self, creator, resource):
41+
"""
42+
Assemble a list of all permissions needed to create data on a given resource
43+
@param creator User who needs permissions
44+
@param resource The resource to grant permissions on
45+
@return A list of permissions for creator on resource
46+
"""
47+
permissions = []
48+
for perm in 'SELECT', 'MODIFY', 'ALTER', 'DROP', 'AUTHORIZE':
49+
permissions.append((creator, resource, perm))
50+
51+
if self.cluster_version_has_unmask_permission():
52+
permissions.append((creator, resource, 'UNMASK'))
53+
54+
if resource.startswith("<keyspace "):
55+
permissions.append((creator, resource, 'CREATE'))
56+
keyspace = resource[10:-1]
57+
# also grant the creator of a ks perms on functions in that ks
58+
for perm in 'CREATE', 'ALTER', 'DROP', 'AUTHORIZE', 'EXECUTE':
59+
permissions.append((creator, '<all functions in %s>' % keyspace, perm))
60+
return permissions
61+
3762

3863
class TestAuth(AbstractTestAuth):
3964

@@ -947,9 +972,9 @@ def test_list_permissions(self):
947972

948973
# CASSANDRA-7216 automatically grants permissions on a role to its creator
949974
if self.cluster.cassandra_version() >= '2.2.0':
950-
all_permissions.extend(data_resource_creator_permissions('cassandra', '<keyspace ks>'))
951-
all_permissions.extend(data_resource_creator_permissions('cassandra', '<table ks.cf>'))
952-
all_permissions.extend(data_resource_creator_permissions('cassandra', '<table ks.cf2>'))
975+
all_permissions.extend(self.data_resource_creator_permissions('cassandra', '<keyspace ks>'))
976+
all_permissions.extend(self.data_resource_creator_permissions('cassandra', '<table ks.cf>'))
977+
all_permissions.extend(self.data_resource_creator_permissions('cassandra', '<table ks.cf2>'))
953978
all_permissions.extend(self.role_creator_permissions('cassandra', '<role bob>'))
954979
all_permissions.extend(self.role_creator_permissions('cassandra', '<role cathy>'))
955980

@@ -962,7 +987,7 @@ def test_list_permissions(self):
962987

963988
expected_permissions = [('cathy', '<table ks.cf>', 'MODIFY'), ('bob', '<table ks.cf>', 'DROP')]
964989
if self.cluster.cassandra_version() >= '2.2.0':
965-
expected_permissions.extend(data_resource_creator_permissions('cassandra', '<table ks.cf>'))
990+
expected_permissions.extend(self.data_resource_creator_permissions('cassandra', '<table ks.cf>'))
966991
self.assertPermissionsListed(expected_permissions, cassandra, "LIST ALL PERMISSIONS ON ks.cf NORECURSIVE")
967992

968993
expected_permissions = [('cathy', '<table ks.cf2>', 'SELECT')]
@@ -1136,25 +1161,6 @@ def assertPermissionsListed(self, expected, session, query):
11361161
assert sorted(expected) == sorted(perms)
11371162

11381163

1139-
def data_resource_creator_permissions(creator, resource):
1140-
"""
1141-
Assemble a list of all permissions needed to create data on a given resource
1142-
@param creator User who needs permissions
1143-
@param resource The resource to grant permissions on
1144-
@return A list of permissions for creator on resource
1145-
"""
1146-
permissions = []
1147-
for perm in 'SELECT', 'MODIFY', 'ALTER', 'DROP', 'AUTHORIZE':
1148-
permissions.append((creator, resource, perm))
1149-
if resource.startswith("<keyspace "):
1150-
permissions.append((creator, resource, 'CREATE'))
1151-
keyspace = resource[10:-1]
1152-
# also grant the creator of a ks perms on functions in that ks
1153-
for perm in 'CREATE', 'ALTER', 'DROP', 'AUTHORIZE', 'EXECUTE':
1154-
permissions.append((creator, '<all functions in %s>' % keyspace, perm))
1155-
return permissions
1156-
1157-
11581164
@since('2.2')
11591165
class TestAuthRoles(AbstractTestAuth):
11601166

@@ -1378,8 +1384,8 @@ def test_creator_of_db_resource_granted_all_permissions(self):
13781384
mike_permissions = [('mike', '<all roles>', 'CREATE'),
13791385
('mike', '<all keyspaces>', 'CREATE')]
13801386
mike_permissions.extend(self.role_creator_permissions('mike', '<role role1>'))
1381-
mike_permissions.extend(data_resource_creator_permissions('mike', '<keyspace ks>'))
1382-
mike_permissions.extend(data_resource_creator_permissions('mike', '<table ks.cf>'))
1387+
mike_permissions.extend(self.data_resource_creator_permissions('mike', '<keyspace ks>'))
1388+
mike_permissions.extend(self.data_resource_creator_permissions('mike', '<table ks.cf>'))
13831389
mike_permissions.extend(function_resource_creator_permissions('mike', '<function ks.state_function_1(int, int)>'))
13841390
mike_permissions.extend(function_resource_creator_permissions('mike', '<function ks.simple_aggregate_1(int)>'))
13851391

@@ -1661,23 +1667,29 @@ def test_filter_granted_permissions_by_resource_type(self):
16611667

16621668
# GRANT ALL ON KEYSPACE grants Permission.ALL_DATA
16631669
self.superuser.execute("GRANT ALL ON KEYSPACE ks TO mike")
1664-
self.assert_permissions_listed([("mike", "<keyspace ks>", "CREATE"),
1665-
("mike", "<keyspace ks>", "ALTER"),
1666-
("mike", "<keyspace ks>", "DROP"),
1667-
("mike", "<keyspace ks>", "SELECT"),
1668-
("mike", "<keyspace ks>", "MODIFY"),
1669-
("mike", "<keyspace ks>", "AUTHORIZE")],
1670+
permissions = [("mike", "<keyspace ks>", "CREATE"),
1671+
("mike", "<keyspace ks>", "ALTER"),
1672+
("mike", "<keyspace ks>", "DROP"),
1673+
("mike", "<keyspace ks>", "SELECT"),
1674+
("mike", "<keyspace ks>", "MODIFY"),
1675+
("mike", "<keyspace ks>", "AUTHORIZE")]
1676+
if self.cluster_version_has_unmask_permission():
1677+
permissions.append(("mike", "<keyspace ks>", "UNMASK"))
1678+
self.assert_permissions_listed(permissions,
16701679
self.superuser,
16711680
"LIST ALL PERMISSIONS OF mike")
16721681
self.superuser.execute("REVOKE ALL ON KEYSPACE ks FROM mike")
16731682

16741683
# GRANT ALL ON TABLE does not include CREATE (because the table must already be created before the GRANT)
16751684
self.superuser.execute("GRANT ALL ON ks.cf TO MIKE")
1676-
self.assert_permissions_listed([("mike", "<table ks.cf>", "ALTER"),
1677-
("mike", "<table ks.cf>", "DROP"),
1678-
("mike", "<table ks.cf>", "SELECT"),
1679-
("mike", "<table ks.cf>", "MODIFY"),
1680-
("mike", "<table ks.cf>", "AUTHORIZE")],
1685+
permissions = [("mike", "<table ks.cf>", "ALTER"),
1686+
("mike", "<table ks.cf>", "DROP"),
1687+
("mike", "<table ks.cf>", "SELECT"),
1688+
("mike", "<table ks.cf>", "MODIFY"),
1689+
("mike", "<table ks.cf>", "AUTHORIZE")]
1690+
if self.cluster_version_has_unmask_permission():
1691+
permissions.append(("mike", "<table ks.cf>", "UNMASK"))
1692+
self.assert_permissions_listed(permissions,
16811693
self.superuser,
16821694
"LIST ALL PERMISSIONS OF mike")
16831695
self.superuser.execute("REVOKE ALL ON ks.cf FROM mike")
@@ -1778,8 +1790,8 @@ def test_list_permissions(self):
17781790
("role1", "<table ks.cf>", "SELECT"),
17791791
("role2", "<table ks.cf>", "ALTER"),
17801792
("role2", "<role role1>", "ALTER")]
1781-
expected_permissions.extend(data_resource_creator_permissions('cassandra', '<keyspace ks>'))
1782-
expected_permissions.extend(data_resource_creator_permissions('cassandra', '<table ks.cf>'))
1793+
expected_permissions.extend(self.data_resource_creator_permissions('cassandra', '<keyspace ks>'))
1794+
expected_permissions.extend(self.data_resource_creator_permissions('cassandra', '<table ks.cf>'))
17831795
expected_permissions.extend(self.role_creator_permissions('cassandra', '<role mike>'))
17841796
expected_permissions.extend(self.role_creator_permissions('cassandra', '<role role1>'))
17851797
expected_permissions.extend(self.role_creator_permissions('cassandra', '<role role2>'))

cqlsh_tests/test_cqlsh.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,20 @@ def test_list_queries(self):
783783
(2 rows)
784784
""")
785785

786-
if self.cluster.version() >= LooseVersion('2.2'):
786+
if self.cluster.version() >= LooseVersion('4.2'):
787+
self.verify_output("LIST ALL PERMISSIONS OF user1", node1, """
788+
role | username | resource | permission
789+
-------+----------+---------------+------------
790+
user1 | user1 | <table ks.t1> | ALTER
791+
user1 | user1 | <table ks.t1> | DROP
792+
user1 | user1 | <table ks.t1> | SELECT
793+
user1 | user1 | <table ks.t1> | MODIFY
794+
user1 | user1 | <table ks.t1> | AUTHORIZE
795+
user1 | user1 | <table ks.t1> | UNMASK
796+
797+
(6 rows)
798+
""")
799+
elif self.cluster.version() >= LooseVersion('2.2'):
787800
self.verify_output("LIST ALL PERMISSIONS OF user1", node1, """
788801
role | username | resource | permission
789802
-------+----------+---------------+------------

0 commit comments

Comments
 (0)