Skip to content

Commit b2a9f7a

Browse files
committed
Update auth tests for UNMASK permission
1 parent 33ff84a commit b2a9f7a

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

@@ -1385,8 +1391,8 @@ def test_creator_of_db_resource_granted_all_permissions(self):
13851391
mike_permissions = [('mike', '<all roles>', 'CREATE'),
13861392
('mike', '<all keyspaces>', 'CREATE')]
13871393
mike_permissions.extend(self.role_creator_permissions('mike', '<role role1>'))
1388-
mike_permissions.extend(data_resource_creator_permissions('mike', '<keyspace ks>'))
1389-
mike_permissions.extend(data_resource_creator_permissions('mike', '<table ks.cf>'))
1394+
mike_permissions.extend(self.data_resource_creator_permissions('mike', '<keyspace ks>'))
1395+
mike_permissions.extend(self.data_resource_creator_permissions('mike', '<table ks.cf>'))
13901396
mike_permissions.extend(function_resource_creator_permissions('mike', '<function ks.state_function_1(int, int)>'))
13911397
mike_permissions.extend(function_resource_creator_permissions('mike', '<function ks.simple_aggregate_1(int)>'))
13921398

@@ -1671,23 +1677,29 @@ def test_filter_granted_permissions_by_resource_type(self):
16711677

16721678
# GRANT ALL ON KEYSPACE grants Permission.ALL_DATA
16731679
self.superuser.execute("GRANT ALL ON KEYSPACE ks TO mike")
1674-
self.assert_permissions_listed([("mike", "<keyspace ks>", "CREATE"),
1675-
("mike", "<keyspace ks>", "ALTER"),
1676-
("mike", "<keyspace ks>", "DROP"),
1677-
("mike", "<keyspace ks>", "SELECT"),
1678-
("mike", "<keyspace ks>", "MODIFY"),
1679-
("mike", "<keyspace ks>", "AUTHORIZE")],
1680+
permissions = [("mike", "<keyspace ks>", "CREATE"),
1681+
("mike", "<keyspace ks>", "ALTER"),
1682+
("mike", "<keyspace ks>", "DROP"),
1683+
("mike", "<keyspace ks>", "SELECT"),
1684+
("mike", "<keyspace ks>", "MODIFY"),
1685+
("mike", "<keyspace ks>", "AUTHORIZE")]
1686+
if self.cluster_version_has_unmask_permission():
1687+
permissions.append(("mike", "<keyspace ks>", "UNMASK"))
1688+
self.assert_permissions_listed(permissions,
16801689
self.superuser,
16811690
"LIST ALL PERMISSIONS OF mike")
16821691
self.superuser.execute("REVOKE ALL ON KEYSPACE ks FROM mike")
16831692

16841693
# GRANT ALL ON TABLE does not include CREATE (because the table must already be created before the GRANT)
16851694
self.superuser.execute("GRANT ALL ON ks.cf TO MIKE")
1686-
self.assert_permissions_listed([("mike", "<table ks.cf>", "ALTER"),
1687-
("mike", "<table ks.cf>", "DROP"),
1688-
("mike", "<table ks.cf>", "SELECT"),
1689-
("mike", "<table ks.cf>", "MODIFY"),
1690-
("mike", "<table ks.cf>", "AUTHORIZE")],
1695+
permissions = [("mike", "<table ks.cf>", "ALTER"),
1696+
("mike", "<table ks.cf>", "DROP"),
1697+
("mike", "<table ks.cf>", "SELECT"),
1698+
("mike", "<table ks.cf>", "MODIFY"),
1699+
("mike", "<table ks.cf>", "AUTHORIZE")]
1700+
if self.cluster_version_has_unmask_permission():
1701+
permissions.append(("mike", "<table ks.cf>", "UNMASK"))
1702+
self.assert_permissions_listed(permissions,
16911703
self.superuser,
16921704
"LIST ALL PERMISSIONS OF mike")
16931705
self.superuser.execute("REVOKE ALL ON ks.cf FROM mike")
@@ -1788,8 +1800,8 @@ def test_list_permissions(self):
17881800
("role1", "<table ks.cf>", "SELECT"),
17891801
("role2", "<table ks.cf>", "ALTER"),
17901802
("role2", "<role role1>", "ALTER")]
1791-
expected_permissions.extend(data_resource_creator_permissions('cassandra', '<keyspace ks>'))
1792-
expected_permissions.extend(data_resource_creator_permissions('cassandra', '<table ks.cf>'))
1803+
expected_permissions.extend(self.data_resource_creator_permissions('cassandra', '<keyspace ks>'))
1804+
expected_permissions.extend(self.data_resource_creator_permissions('cassandra', '<table ks.cf>'))
17931805
expected_permissions.extend(self.role_creator_permissions('cassandra', '<role mike>'))
17941806
expected_permissions.extend(self.role_creator_permissions('cassandra', '<role role1>'))
17951807
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)