Skip to content

Commit 86f98f5

Browse files
committed
Refactor runner datasets management
- Replaced `datasetList` field with `datasets` object in `Runner` to differentiate base datasets and parameter datasets. - Updated related services, tests, and API documentation to align with the new `datasets` structure. - Introduced `RunnerDatasets` model to handle `bases` and `parameter` datasets separately. - Adjusted integration tests to include usage of `RunnerDatasets`.
1 parent 88a8342 commit 86f98f5

File tree

10 files changed

+121
-74
lines changed

10 files changed

+121
-74
lines changed

doc/.openapi-generator/FILES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ Models/RunTemplateUpdateRequest.md
5656
Models/Runner.md
5757
Models/RunnerAccessControl.md
5858
Models/RunnerCreateRequest.md
59+
Models/RunnerDatasets.md
5960
Models/RunnerEditInfo.md
6061
Models/RunnerResourceSizing.md
6162
Models/RunnerRole.md

doc/Models/Runner.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
| **ownerName** | **String** | the name of the owner | [default to null] |
1919
| **solutionName** | **String** | the Solution name | [optional] [default to null] |
2020
| **runTemplateName** | **String** | the Solution Run Template name associated with this Runner | [optional] [default to null] |
21-
| **datasetList** | **List** | the list of Dataset Id associated to this Runner Run Template | [default to null] |
21+
| **datasets** | [**RunnerDatasets**](RunnerDatasets.md) | | [default to null] |
2222
| **runSizing** | [**RunnerResourceSizing**](RunnerResourceSizing.md) | | [optional] [default to null] |
2323
| **parametersValues** | [**List**](RunnerRunTemplateParameterValue.md) | the list of Solution Run Template parameters values | [default to null] |
2424
| **lastRunInfo** | [**LastRunInfo**](LastRunInfo.md) | | [default to null] |

doc/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ All URIs are relative to *http://localhost:8080*
170170
- [Runner](./Models/Runner.md)
171171
- [RunnerAccessControl](./Models/RunnerAccessControl.md)
172172
- [RunnerCreateRequest](./Models/RunnerCreateRequest.md)
173+
- [RunnerDatasets](./Models/RunnerDatasets.md)
173174
- [RunnerEditInfo](./Models/RunnerEditInfo.md)
174175
- [RunnerResourceSizing](./Models/RunnerResourceSizing.md)
175176
- [RunnerRole](./Models/RunnerRole.md)

openapi/plantuml/schemas.plantuml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ entity Runner {
388388
* ownerName: String
389389
solutionName: String
390390
runTemplateName: String
391-
* datasetList: List<String>
391+
* datasets: RunnerDatasets
392392
runSizing: RunnerResourceSizing
393393
* parametersValues: List<RunnerRunTemplateParameterValue>
394394
* lastRunInfo: LastRunInfo
@@ -417,6 +417,11 @@ entity RunnerCreateRequest {
417417
security: RunnerSecurity
418418
}
419419

420+
entity RunnerDatasets {
421+
* bases: List<String>
422+
* parameter: String
423+
}
424+
420425
entity RunnerEditInfo {
421426
* timestamp: Long
422427
* userId: String
@@ -640,6 +645,7 @@ SolutionUpdateRequest -- "0..*" RunTemplateCreateRequest : runTemplates
640645
OrganizationCreateRequest -- OrganizationSecurity : security
641646
Runner -- RunnerEditInfo : createInfo
642647
Runner -- RunnerEditInfo : updateInfo
648+
Runner -- RunnerDatasets : datasets
643649
Runner -- RunnerResourceSizing : runSizing
644650
Runner -- "0..*" RunnerRunTemplateParameterValue : parametersValues
645651
Runner -- LastRunInfo : lastRunInfo

run/src/integrationTest/kotlin/com/cosmotech/run/service/RunServiceIntegrationTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import com.cosmotech.runner.domain.LastRunInfo.LastRunStatus
3636
import com.cosmotech.runner.domain.Runner
3737
import com.cosmotech.runner.domain.RunnerAccessControl
3838
import com.cosmotech.runner.domain.RunnerCreateRequest
39+
import com.cosmotech.runner.domain.RunnerDatasets
3940
import com.cosmotech.runner.domain.RunnerEditInfo
4041
import com.cosmotech.runner.domain.RunnerSecurity
4142
import com.cosmotech.runner.domain.RunnerValidationStatus
@@ -261,7 +262,7 @@ class RunServiceIntegrationTest : CsmTestBase() {
261262
timestamp = Instant.now().toEpochMilli(),
262263
userId = getCurrentAccountIdentifier(csmPlatformProperties)),
263264
ownerName = "owner",
264-
datasetList = mutableListOf(),
265+
datasets = RunnerDatasets(bases = mutableListOf(), parameter = ""),
265266
workspaceId = workspaceId,
266267
validationStatus = RunnerValidationStatus.Draft,
267268
parametersValues = mutableListOf(),

run/src/main/kotlin/com/cosmotech/run/service/RunServiceImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ class RunServiceImpl(
585585
runTemplateId = startInfo.runTemplate.id,
586586
generateName = startInfo.startContainers.generateName,
587587
computeSize = startInfo.runTemplate.computeSize,
588-
datasetList = runner.datasetList,
588+
datasetList = runner.datasets.bases + runner.datasets.parameter,
589589
createInfo =
590590
RunEditInfo(
591591
timestamp = now, userId = getCurrentAccountIdentifier(csmPlatformProperties)),

run/src/test/kotlin/com/cosmotech/run/ContainerFactoryTests.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.cosmotech.runner.domain.LastRunInfo
1919
import com.cosmotech.runner.domain.LastRunInfo.LastRunStatus
2020
import com.cosmotech.runner.domain.Runner
2121
import com.cosmotech.runner.domain.RunnerAccessControl
22+
import com.cosmotech.runner.domain.RunnerDatasets
2223
import com.cosmotech.runner.domain.RunnerEditInfo
2324
import com.cosmotech.runner.domain.RunnerRunTemplateParameterValue
2425
import com.cosmotech.runner.domain.RunnerSecurity
@@ -223,7 +224,7 @@ class ContainerFactoryTests {
223224
id = "RunnerId",
224225
name = "TestRunner",
225226
runTemplateId = CSM_RUN_TEMPLATE_ID,
226-
datasetList = mutableListOf("1", "2"),
227+
datasets = RunnerDatasets(bases = mutableListOf("1", "2"), parameter = "3"),
227228
solutionId = "solution",
228229
organizationId = "organization",
229230
workspaceId = "workspace",

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

Lines changed: 48 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -464,12 +464,10 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
464464
assertEquals(runnerAccessControl, runnerAccessControlRegistered)
465465

466466
logger.info(
467-
"should add an Access Control and assert it is the one created in the linked datasets")
468-
runnerSaved.datasetList.forEach {
469-
assertDoesNotThrow {
470-
datasetApiService.getDatasetAccessControl(
471-
organizationSaved.id, workspaceSaved.id, it, TEST_USER_MAIL)
472-
}
467+
"should add an Access Control and assert it is the one created in the parameter dataset")
468+
assertDoesNotThrow {
469+
datasetApiService.getDatasetAccessControl(
470+
organizationSaved.id, workspaceSaved.id, runnerSaved.datasets.parameter, TEST_USER_MAIL)
473471
}
474472

475473
logger.info("should update the Access Control and assert it has been updated")
@@ -482,14 +480,17 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
482480
RunnerRole(ROLE_EDITOR))
483481
assertEquals(ROLE_EDITOR, runnerAccessControlRegistered.role)
484482

485-
logger.info("Should not change the datasets access control because ACL already exist on it")
486-
runnerSaved.datasetList.forEach {
487-
assertEquals(
488-
ROLE_VIEWER,
489-
datasetApiService
490-
.getDatasetAccessControl(organizationSaved.id, workspaceSaved.id, it, TEST_USER_MAIL)
491-
.role)
492-
}
483+
logger.info(
484+
"Should not change the parameter dataset access control because ACL already exist on it")
485+
assertEquals(
486+
ROLE_VIEWER,
487+
datasetApiService
488+
.getDatasetAccessControl(
489+
organizationSaved.id,
490+
workspaceSaved.id,
491+
runnerSaved.datasets.parameter,
492+
TEST_USER_MAIL)
493+
.role)
493494

494495
logger.info("should get the list of users and assert there are 2")
495496
val userList =
@@ -506,12 +507,10 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
506507
}
507508

508509
logger.info(
509-
"should remove the Access Control and assert it has been removed in the linked datasets")
510-
runnerSaved.datasetList.forEach {
511-
assertThrows<CsmResourceNotFoundException> {
512-
datasetApiService.getDatasetAccessControl(
513-
organizationSaved.id, workspaceSaved.id, it, TEST_USER_MAIL)
514-
}
510+
"should remove the Access Control and assert it has been removed in the parameter dataset")
511+
assertThrows<CsmResourceNotFoundException> {
512+
datasetApiService.getDatasetAccessControl(
513+
organizationSaved.id, workspaceSaved.id, runnerSaved.datasets.parameter, TEST_USER_MAIL)
515514
}
516515
}
517516

@@ -577,14 +576,24 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
577576
}
578577

579578
@Test
580-
fun `test on runner delete keep datasets`() {
579+
fun `test on runner delete keep bases datasets but not parameters dataset`() {
581580
runnerApiService.deleteRunner(organizationSaved.id, workspaceSaved.id, runnerSaved.id)
582581

583-
runnerSaved.datasetList.forEach { dataset ->
582+
runnerSaved.datasets.bases.forEach { dataset ->
584583
assertDoesNotThrow {
585584
datasetApiService.getDataset(organizationSaved.id, workspaceSaved.id, dataset)
586585
}
587586
}
587+
val parameterDatasetId = runnerSaved.datasets.parameter
588+
val exception =
589+
assertThrows<CsmResourceNotFoundException> {
590+
datasetApiService.getDataset(organizationSaved.id, workspaceSaved.id, parameterDatasetId)
591+
}
592+
assertEquals(
593+
"Dataset $parameterDatasetId not found " +
594+
"in organization ${organizationSaved.id} " +
595+
"and workspace ${workspaceSaved.id}",
596+
exception.message)
588597
}
589598

590599
@Test
@@ -602,7 +611,8 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
602611
val childRunnerDatasetList =
603612
runnerApiService
604613
.createRunner(organizationSaved.id, workspaceSaved.id, childRunnerWithNullDatasetList)
605-
.datasetList
614+
.datasets
615+
.bases
606616

607617
assertNotNull(childRunnerDatasetList)
608618
assertTrue { childRunnerDatasetList.isEmpty() }
@@ -626,7 +636,8 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
626636
val childRunnerDatasetList =
627637
runnerApiService
628638
.createRunner(organizationSaved.id, workspaceSaved.id, childRunnerWithNullDatasetList)
629-
.datasetList
639+
.datasets
640+
.bases
630641

631642
assertNotNull(childRunnerDatasetList)
632643
assertEquals(parentDatasetList, childRunnerDatasetList)
@@ -651,7 +662,8 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
651662
val childRunnerDatasetList =
652663
runnerApiService
653664
.createRunner(organizationSaved.id, workspaceSaved.id, childRunnerWithEmptyDatasetList)
654-
.datasetList
665+
.datasets
666+
.bases
655667

656668
assertNotNull(childRunnerDatasetList)
657669
assertTrue(childRunnerDatasetList.isEmpty())
@@ -685,7 +697,8 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
685697
runnerApiService
686698
.createRunner(
687699
organizationSaved.id, workspaceSaved.id, childRunnerWithNonEmptyDatasetList)
688-
.datasetList
700+
.datasets
701+
.bases
689702

690703
assertNotNull(childRunnerDatasetList)
691704
assertEquals(childDatasetList, childRunnerDatasetList)
@@ -820,7 +833,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
820833

821834
val datasetRetrieved =
822835
datasetApiService.getDataset(
823-
organizationSaved.id, workspaceSaved.id, runnerSaved.datasetList[0])
836+
organizationSaved.id, workspaceSaved.id, runnerSaved.datasets.bases[0])
824837
runnerApiService.deleteRunner(organizationSaved.id, workspaceSaved.id, runnerSaved.id)
825838

826839
assertDoesNotThrow {
@@ -829,7 +842,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
829842
}
830843

831844
@Test
832-
fun `users added to runner RBAC should have the corresponding role set in dataset`() {
845+
fun `users added to runner RBAC should not have the corresponding role set in bases datasets`() {
833846
workspace =
834847
WorkspaceCreateRequest(
835848
key = "key",
@@ -851,12 +864,14 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
851864

852865
val retrievedDataset =
853866
datasetApiService.getDataset(
854-
organizationSaved.id, workspaceSaved.id, runnerSaved.datasetList[0])
867+
organizationSaved.id, workspaceSaved.id, runnerSaved.datasets.bases[0])
855868

856-
val datasetAC =
857-
datasetApiService.getDatasetAccessControl(
858-
organizationSaved.id, workspaceSaved.id, retrievedDataset.id, "id")
859-
assertEquals(ROLE_EDITOR, datasetAC.role)
869+
val exception =
870+
assertThrows<CsmResourceNotFoundException> {
871+
datasetApiService.getDatasetAccessControl(
872+
organizationSaved.id, workspaceSaved.id, retrievedDataset.id, "id")
873+
}
874+
assertEquals("User id not found in ${retrievedDataset.id} component", exception.message)
860875
}
861876

862877
@Test

0 commit comments

Comments
 (0)