@@ -62,6 +62,7 @@ import io.mockk.mockkStatic
6262import java.util.*
6363import kotlin.test.Test
6464import kotlin.test.assertEquals
65+ import kotlin.test.assertTrue
6566import org.junit.jupiter.api.BeforeEach
6667import org.junit.jupiter.api.DynamicTest.dynamicTest
6768import org.junit.jupiter.api.TestFactory
@@ -2770,83 +2771,92 @@ class RunnerServiceRBACTest : CsmRedisTestBase() {
27702771 }
27712772
27722773 @TestFactory
2773- fun `test Dataset RBAC addRunnerAccessControl` () =
2774+ fun `test Dataset RBAC modification when addRunnerAccessControl is called on a runner ` () =
27742775 listOf (
27752776 ROLE_VIEWER ,
27762777 ROLE_EDITOR ,
27772778 ROLE_VALIDATOR ,
2778- ROLE_USER ,
2779- ROLE_NONE ,
27802779 ROLE_ADMIN ,
27812780 )
27822781 .map { role ->
2783- dynamicTest(" Test Dataset RBAC addRunnerAccessControl : $role " ) {
2784- every { getCurrentAccountIdentifier(any()) } returns CONNECTED_ADMIN_USER
2785- val connector = makeConnector()
2786- val connectorSaved = connectorApiService.registerConnector(connector)
2787- val organization = makeOrganizationWithRole(id = TEST_USER_MAIL , role = ROLE_ADMIN )
2788- val organizationSaved = organizationApiService.registerOrganization(organization)
2789- val dataset =
2790- makeDataset(organizationSaved.id!! , connectorSaved, TEST_USER_MAIL , role)
2791- var datasetSaved = datasetApiService.createDataset(organizationSaved.id!! , dataset)
2792- datasetSaved =
2793- datasetRepository.save(
2794- datasetSaved.apply { ingestionStatus = IngestionStatusEnum .SUCCESS })
2795- every { datasetApiService.createSubDataset(any(), any(), any()) } returns datasetSaved
2796- val solution = makeSolution(organizationSaved.id!! , TEST_USER_MAIL , ROLE_ADMIN )
2797- val solutionSaved =
2798- solutionApiService.createSolution(organizationSaved.id!! , solution)
2799- val workspace =
2800- makeWorkspaceWithRole(
2801- organizationSaved.id!! ,
2802- solutionSaved.id!! ,
2803- id = TEST_USER_MAIL ,
2804- role = ROLE_ADMIN )
2805- val workspaceSaved =
2806- workspaceApiService.createWorkspace(organizationSaved.id!! , workspace)
2807- val runner =
2808- makeRunnerWithRole(
2809- organizationSaved.id!! ,
2810- workspaceSaved.id!! ,
2811- solutionSaved.id!! ,
2812- mutableListOf (datasetSaved.id!! ),
2813- id = TEST_USER_MAIL ,
2814- role = ROLE_ADMIN )
2815- val runnerSaved =
2816- runnerApiService.createRunner(organizationSaved.id!! , workspaceSaved.id!! , runner)
2782+ dynamicTest(
2783+ " Check Dataset RBAC modification " +
2784+ " when addRunnerAccessControl is called on a runner with role : $role " ) {
2785+ every { getCurrentAccountIdentifier(any()) } returns CONNECTED_ADMIN_USER
2786+ val connector = makeConnector()
2787+ val connectorSaved = connectorApiService.registerConnector(connector)
2788+ val organization =
2789+ makeOrganizationWithRole(id = TEST_USER_MAIL , role = ROLE_ADMIN )
2790+ val organizationSaved = organizationApiService.registerOrganization(organization)
2791+ val dataset =
2792+ makeDataset(organizationSaved.id!! , connectorSaved, TEST_USER_MAIL , role)
2793+ var datasetSaved =
2794+ datasetApiService.createDataset(organizationSaved.id!! , dataset)
2795+ datasetSaved =
2796+ datasetRepository.save(
2797+ datasetSaved.apply { ingestionStatus = IngestionStatusEnum .SUCCESS })
2798+ every { datasetApiService.createSubDataset(any(), any(), any()) } returns
2799+ datasetSaved
2800+ val solution = makeSolution(organizationSaved.id!! , TEST_USER_MAIL , ROLE_ADMIN )
2801+ val solutionSaved =
2802+ solutionApiService.createSolution(organizationSaved.id!! , solution)
2803+ val workspace =
2804+ makeWorkspaceWithRole(
2805+ organizationSaved.id!! ,
2806+ solutionSaved.id!! ,
2807+ id = TEST_USER_MAIL ,
2808+ role = ROLE_ADMIN )
2809+ val workspaceSaved =
2810+ workspaceApiService.createWorkspace(organizationSaved.id!! , workspace)
2811+ val runner =
2812+ makeRunnerWithRole(
2813+ organizationSaved.id!! ,
2814+ workspaceSaved.id!! ,
2815+ solutionSaved.id!! ,
2816+ mutableListOf (datasetSaved.id!! ),
2817+ id = TEST_USER_MAIL ,
2818+ role = ROLE_ADMIN )
2819+ val runnerSaved =
2820+ runnerApiService.createRunner(
2821+ organizationSaved.id!! , workspaceSaved.id!! , runner)
28172822
2818- assertDoesNotThrow {
2819- assertEquals(
2820- true ,
2821- datasetSaved.security
2822- ?.accessControlList
2823- ?.filter { datasetAccessControl ->
2824- datasetAccessControl.id == TEST_USER_MAIL
2825- }
2826- ?.any { datasetAccessControl -> datasetAccessControl.role == role })
2827-
2828- runnerApiService.addRunnerAccessControl(
2829- organizationSaved.id!! ,
2830- workspaceSaved.id!! ,
2831- runnerSaved.id!! ,
2832- RunnerAccessControl (TEST_USER_MAIL , ROLE_ADMIN ))
2833-
2834- val datasetWithUpgradedACL =
2835- datasetApiService.findDatasetById(organizationSaved.id!! , datasetSaved.id!! )
2836- assertEquals(
2837- true ,
2838- datasetWithUpgradedACL.security
2839- ?.accessControlList
2840- ?.filter { datasetAccessControl ->
2841- datasetAccessControl.id == TEST_USER_MAIL
2842- }
2843- ?.any { datasetAccessControl -> datasetAccessControl.role == role })
2844- }
2845- }
2823+ assertDoesNotThrow {
2824+ assertTrue(
2825+ datasetSaved.security
2826+ ?.accessControlList
2827+ ?.filter { datasetAccessControl ->
2828+ datasetAccessControl.id
== " [email protected] " 2829+ }
2830+ .isNullOrEmpty())
2831+
2832+ runnerApiService.addRunnerAccessControl(
2833+ organizationSaved.id!! ,
2834+ workspaceSaved.id!! ,
2835+ runnerSaved.id!! ,
2836+ RunnerAccessControl (
" [email protected] " , role))
2837+
2838+ val datasetWithUpgradedACL =
2839+ datasetApiService.findDatasetById(organizationSaved.id!! , datasetSaved.id!! )
2840+ var datasetRole = role
2841+ if (role == ROLE_VALIDATOR ) {
2842+ datasetRole = ROLE_USER
2843+ }
2844+ assertEquals(
2845+ true ,
2846+ datasetWithUpgradedACL.security
2847+ ?.accessControlList
2848+ ?.filter { datasetAccessControl ->
2849+ datasetAccessControl.id
== " [email protected] " 2850+ }
2851+ ?.any { datasetAccessControl ->
2852+ datasetAccessControl.role == datasetRole
2853+ })
2854+ }
2855+ }
28462856 }
28472857
28482858 @Test
2849- fun `test Dataset RBAC addRunnerAccessControl with new ACL entry ` () {
2859+ fun `test addRunnerAccessControl when called on a runner with an user that do not exist in Dataset RBAC ` () {
28502860 every { getCurrentAccountIdentifier(any()) } returns CONNECTED_ADMIN_USER
28512861 val connector = makeConnector()
28522862 val connectorSaved = connectorApiService.registerConnector(connector)
@@ -2857,8 +2867,7 @@ class RunnerServiceRBACTest : CsmRedisTestBase() {
28572867 organizationSaved.id
!! , connectorSaved, id
= " [email protected] " , role
= ROLE_NONE )
28582868 var datasetSaved = datasetApiService.createDataset(organizationSaved.id!! , dataset)
28592869 datasetSaved =
2860- datasetRepository.save(
2861- datasetSaved.apply { ingestionStatus = Dataset .IngestionStatus .SUCCESS })
2870+ datasetRepository.save(datasetSaved.apply { ingestionStatus = IngestionStatusEnum .SUCCESS })
28622871 every { datasetApiService.createSubDataset(any(), any(), any()) } returns datasetSaved
28632872
28642873 assertEquals(
0 commit comments