Skip to content

Commit 2dc2777

Browse files
committed
Propagate runner default security changes to associated dataset parameters and add tests for scenarios.
1 parent 6648f57 commit 2dc2777

File tree

2 files changed

+91
-2
lines changed

2 files changed

+91
-2
lines changed

runner/src/integrationTest/kotlin/com/cosmotech/runner/service/RunnerServiceIntegrationTest.kt

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2811,6 +2811,79 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
28112811
assertEquals(newRunnerSaved.id, getAttachedRunnerToDataset.response)
28122812
}
28132813

2814+
@Test
2815+
fun `test default security on dataset parameter is changed when default security is changed on runner`() {
2816+
val existingRunnerDefaultSecurity = runnerSaved.security.default
2817+
assertEquals(ROLE_NONE, existingRunnerDefaultSecurity)
2818+
2819+
val datasetParameterDefaultSecurity =
2820+
datasetApiService
2821+
.getDataset(organizationSaved.id, workspaceSaved.id, runnerSaved.datasets.parameter)
2822+
.security
2823+
.default
2824+
assertEquals(ROLE_NONE, datasetParameterDefaultSecurity)
2825+
2826+
listOf(ROLE_VIEWER, ROLE_EDITOR, ROLE_VALIDATOR, ROLE_ADMIN, ROLE_NONE).forEach {
2827+
runnerDefaultRole ->
2828+
logger.info("Test update default security runner to:$runnerDefaultRole")
2829+
runnerApiService.updateRunnerDefaultSecurity(
2830+
organizationSaved.id,
2831+
workspaceSaved.id,
2832+
runnerSaved.id,
2833+
RunnerRole(runnerDefaultRole),
2834+
)
2835+
2836+
val runnerWithDefaultSecurityUpdated =
2837+
runnerApiService.getRunner(organizationSaved.id, workspaceSaved.id, runnerSaved.id)
2838+
assertEquals(runnerDefaultRole, runnerWithDefaultSecurityUpdated.security.default)
2839+
2840+
val datasetParameterWithExpectedDefaultSecurityUpdated =
2841+
datasetApiService.getDataset(
2842+
organizationSaved.id,
2843+
workspaceSaved.id,
2844+
runnerSaved.datasets.parameter,
2845+
)
2846+
if (runnerDefaultRole == ROLE_VALIDATOR) {
2847+
assertEquals(ROLE_USER, datasetParameterWithExpectedDefaultSecurityUpdated.security.default)
2848+
} else {
2849+
assertEquals(
2850+
runnerDefaultRole,
2851+
datasetParameterWithExpectedDefaultSecurityUpdated.security.default,
2852+
)
2853+
}
2854+
}
2855+
}
2856+
2857+
@Test
2858+
fun `PROD-15152 - listAllRunners when default security has changed on a runner`() {
2859+
val existingRunnerDefaultSecurity = runnerSaved.security.default
2860+
assertEquals(ROLE_NONE, existingRunnerDefaultSecurity)
2861+
2862+
val datasetParameterDefaultSecurity =
2863+
datasetApiService
2864+
.getDataset(organizationSaved.id, workspaceSaved.id, runnerSaved.datasets.parameter)
2865+
.security
2866+
.default
2867+
assertEquals(ROLE_NONE, datasetParameterDefaultSecurity)
2868+
2869+
assertDoesNotThrow {
2870+
runnerApiService.listRunners(organizationSaved.id, workspaceSaved.id, null, null)
2871+
}
2872+
2873+
runnerApiService.updateRunnerDefaultSecurity(
2874+
organizationSaved.id,
2875+
workspaceSaved.id,
2876+
runnerSaved.id,
2877+
RunnerRole(ROLE_VIEWER),
2878+
)
2879+
2880+
every { getCurrentAccountIdentifier(any()) } returns CONNECTED_READER_USER
2881+
2882+
assertDoesNotThrow {
2883+
runnerApiService.listRunners(organizationSaved.id, workspaceSaved.id, null, null)
2884+
}
2885+
}
2886+
28142887
fun makeDataset(
28152888
name: String = "name",
28162889
parts: MutableList<DatasetPartCreateRequest> = mutableListOf(),
@@ -2872,8 +2945,8 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
28722945
default = ROLE_NONE,
28732946
accessControlList =
28742947
mutableListOf(
2875-
OrganizationAccessControl(id = CONNECTED_READER_USER, role = "reader"),
2876-
OrganizationAccessControl(id = CONNECTED_ADMIN_USER, role = "admin"),
2948+
OrganizationAccessControl(id = CONNECTED_READER_USER, role = ROLE_VIEWER),
2949+
OrganizationAccessControl(id = CONNECTED_ADMIN_USER, role = ROLE_ADMIN),
28772950
OrganizationAccessControl(id = userName, role = role),
28782951
),
28792952
),
@@ -2895,6 +2968,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
28952968
mutableListOf(
28962969
WorkspaceAccessControl(id = userName, role = role),
28972970
WorkspaceAccessControl(CONNECTED_ADMIN_USER, ROLE_ADMIN),
2971+
WorkspaceAccessControl(id = CONNECTED_READER_USER, role = ROLE_VIEWER),
28982972
),
28992973
),
29002974
)

runner/src/main/kotlin/com/cosmotech/runner/service/RunnerService.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import com.cosmotech.dataset.domain.DatasetAccessControl
3131
import com.cosmotech.dataset.domain.DatasetCreateRequest
3232
import com.cosmotech.dataset.domain.DatasetPart
3333
import com.cosmotech.dataset.domain.DatasetPartCreateRequest
34+
import com.cosmotech.dataset.domain.DatasetRole
3435
import com.cosmotech.dataset.domain.DatasetSecurity
3536
import com.cosmotech.organization.OrganizationApiServiceInterface
3637
import com.cosmotech.organization.domain.Organization
@@ -985,6 +986,20 @@ class RunnerService(
985986
// create a rbacSecurity object from runner Rbac by changing default value
986987
val rbacSecurity = csmRbac.setDefault(this.getRbacSecurity(), role, this.roleDefinition)
987988
this.setRbacSecurity(rbacSecurity)
989+
this.propagateDefaultSecurityToDatasetParameter(role)
990+
}
991+
992+
private fun propagateDefaultSecurityToDatasetParameter(defaultRole: String) {
993+
val organizationId = this.runner.organizationId
994+
val workspaceId = this.runner.workspaceId
995+
val datasetId = this.runner.datasets.parameter
996+
val newDatasetRole = if (defaultRole == ROLE_VALIDATOR) ROLE_USER else defaultRole
997+
datasetApiService.updateDatasetDefaultSecurity(
998+
organizationId,
999+
workspaceId,
1000+
datasetId,
1001+
DatasetRole(newDatasetRole),
1002+
)
9881003
}
9891004
}
9901005

0 commit comments

Comments
 (0)