Skip to content

Commit c932756

Browse files
committed
Add integration test for runner inheritance behavior and refactor dataset part copying logic
1 parent 0752d68 commit c932756

2 files changed

Lines changed: 226 additions & 11 deletions

File tree

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

Lines changed: 218 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2951,6 +2951,219 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
29512951
return DatasetCreateRequest(name = name, parts = parts)
29522952
}
29532953

2954+
@Test
2955+
fun `PROD-15252 - test inheritance from parent runner`() {
2956+
2957+
// 1- Create default workspace's dataset parameter
2958+
2959+
val resourceTestFile = resourceLoader.getResource("classpath:/$CUSTOMERS_FILE_NAME").file
2960+
val input = FileInputStream(resourceTestFile)
2961+
val multipartFile =
2962+
MockMultipartFile("file", CUSTOMERS_FILE_NAME, "text/csv", IOUtils.toByteArray(input))
2963+
2964+
val resourceTestFile2 =
2965+
resourceLoader.getResource("classpath:/$CUSTOMERS_5_LINES_FILE_NAME").file
2966+
val input2 = FileInputStream(resourceTestFile2)
2967+
val multipartFile2 =
2968+
MockMultipartFile(
2969+
"file",
2970+
CUSTOMERS_5_LINES_FILE_NAME,
2971+
"text/csv",
2972+
IOUtils.toByteArray(input2),
2973+
)
2974+
val workspaceDataset =
2975+
datasetApiService.createDataset(
2976+
organizationSaved.id,
2977+
workspaceSaved.id,
2978+
DatasetCreateRequest(
2979+
name = "Dataset workspace",
2980+
description = "Dataset used for default parameter in ${workspaceSaved.id}",
2981+
parts =
2982+
mutableListOf(
2983+
DatasetPartCreateRequest(
2984+
name = "param2",
2985+
sourceName = CUSTOMERS_FILE_NAME,
2986+
type = DatasetPartTypeEnum.File,
2987+
),
2988+
DatasetPartCreateRequest(
2989+
name = "param3",
2990+
sourceName = CUSTOMERS_5_LINES_FILE_NAME,
2991+
type = DatasetPartTypeEnum.DB,
2992+
),
2993+
),
2994+
),
2995+
arrayOf(multipartFile, multipartFile2),
2996+
)
2997+
2998+
// 2- Create update workspace with default dataset
2999+
3000+
workspaceApiService.updateWorkspace(
3001+
organizationSaved.id,
3002+
workspaceSaved.id,
3003+
WorkspaceUpdateRequest(
3004+
solution =
3005+
WorkspaceSolution(
3006+
solutionId = solutionSaved.id,
3007+
datasetId = workspaceDataset.id,
3008+
defaultParameterValues =
3009+
mutableMapOf(
3010+
"param2" to workspaceDataset.parts[0].id,
3011+
"param3" to workspaceDataset.parts[1].id,
3012+
),
3013+
)
3014+
),
3015+
)
3016+
3017+
// 3 - Create a parent runner with the newly created solution using the runTemplate
3018+
val parentRunnerCreateRequest =
3019+
RunnerCreateRequest(
3020+
name = "Parent Runner with expected dataset parameter",
3021+
solutionId = solutionSaved.id,
3022+
runTemplateId = "runTemplateId",
3023+
)
3024+
3025+
val parentCreatedRunner =
3026+
runnerApiService.createRunner(
3027+
organizationSaved.id,
3028+
workspaceSaved.id,
3029+
parentRunnerCreateRequest,
3030+
)
3031+
3032+
// 4 - Check parent runner parameters
3033+
var retrievedParentRunner =
3034+
runnerApiService.getRunner(organizationSaved.id, workspaceSaved.id, parentCreatedRunner.id)
3035+
assertEquals(1, retrievedParentRunner.parametersValues.size)
3036+
val parentRunnerParameterValue = retrievedParentRunner.parametersValues[0]
3037+
assertEquals("param1", parentRunnerParameterValue.parameterId)
3038+
assertEquals("5", parentRunnerParameterValue.value)
3039+
assertEquals("integer", parentRunnerParameterValue.varType)
3040+
assertNotNull(retrievedParentRunner.datasets.parameters)
3041+
val datasetParentRunnerParameters = retrievedParentRunner.datasets.parameters!!
3042+
assertNotEquals(0, datasetParentRunnerParameters.size)
3043+
3044+
val datasetParentRunnerId = retrievedParentRunner.datasets.parameter
3045+
3046+
val datasetParameterFromParentRunner =
3047+
datasetApiService.getDataset(
3048+
organizationSaved.id,
3049+
workspaceSaved.id,
3050+
datasetParentRunnerId,
3051+
)
3052+
3053+
assertEquals(
3054+
datasetParameterFromParentRunner.parts.size,
3055+
datasetParentRunnerParameters.size,
3056+
)
3057+
assertEquals(
3058+
datasetParameterFromParentRunner.parts,
3059+
datasetParentRunnerParameters as MutableList<DatasetPart>,
3060+
)
3061+
3062+
// 5 - Update parent runner parameters
3063+
val firstDatasetPartParentRunnerId = datasetParentRunnerParameters[0].id
3064+
val secondDatasetPartParentRunnerId = datasetParentRunnerParameters[1].id
3065+
3066+
datasetApiService.updateDatasetPart(
3067+
organizationSaved.id,
3068+
workspaceSaved.id,
3069+
datasetParentRunnerId,
3070+
firstDatasetPartParentRunnerId,
3071+
DatasetPartUpdateRequest(
3072+
description = "toto1",
3073+
additionalData =
3074+
mutableMapOf("this is a test" to "that should be in error", "ok" to false),
3075+
),
3076+
)
3077+
3078+
datasetApiService.updateDatasetPart(
3079+
organizationSaved.id,
3080+
workspaceSaved.id,
3081+
datasetParentRunnerId,
3082+
secondDatasetPartParentRunnerId,
3083+
DatasetPartUpdateRequest(
3084+
description = "tutu1",
3085+
additionalData =
3086+
mutableMapOf("this is a test" to "that should be successful", "ok" to true),
3087+
),
3088+
)
3089+
3090+
// 6 - Create a child runner and expect childRunner dataset to have part inherited from parent
3091+
val childRunnerCreateRequest =
3092+
RunnerCreateRequest(
3093+
name = "Child Runner with expected dataset parameter",
3094+
solutionId = solutionSaved.id,
3095+
runTemplateId = "runTemplateId",
3096+
parentId = parentCreatedRunner.id,
3097+
)
3098+
3099+
val childCreatedRunner =
3100+
runnerApiService.createRunner(
3101+
organizationSaved.id,
3102+
workspaceSaved.id,
3103+
childRunnerCreateRequest,
3104+
)
3105+
3106+
// 7 - Check child runner parameters
3107+
val retrievedChildRunner =
3108+
runnerApiService.getRunner(organizationSaved.id, workspaceSaved.id, childCreatedRunner.id)
3109+
assertNotNull(retrievedChildRunner.datasets.parameters)
3110+
assertEquals(2, retrievedChildRunner.datasets.parameters!!.size)
3111+
assertNotEquals(
3112+
datasetParentRunnerId,
3113+
retrievedChildRunner.datasets.parameter,
3114+
)
3115+
assertEquals(1, retrievedChildRunner.parametersValues.size)
3116+
val childRunnerParameterValue = retrievedChildRunner.parametersValues[0]
3117+
assertEquals("param1", childRunnerParameterValue.parameterId)
3118+
assertEquals("5", childRunnerParameterValue.value)
3119+
assertEquals("integer", childRunnerParameterValue.varType)
3120+
3121+
// 8 - Retrieve stored data for assertion
3122+
val datasetParameterFromChildRunner =
3123+
datasetApiService.getDataset(
3124+
organizationSaved.id,
3125+
workspaceSaved.id,
3126+
retrievedChildRunner.datasets.parameter,
3127+
)
3128+
3129+
retrievedParentRunner =
3130+
runnerApiService.getRunner(organizationSaved.id, workspaceSaved.id, parentCreatedRunner.id)
3131+
3132+
val childDatasetParameterParts =
3133+
retrievedChildRunner.datasets.parameters as MutableList<DatasetPart>
3134+
val parentDatasetParameterParts =
3135+
retrievedParentRunner.datasets.parameters as MutableList<DatasetPart>
3136+
3137+
assertEquals(
3138+
datasetParameterFromChildRunner.parts,
3139+
childDatasetParameterParts,
3140+
)
3141+
3142+
// Not equals due to datasetPart ids and create/update infos
3143+
// We need to be sure that child parts are new ones and not just links to parent parts
3144+
assertNotEquals(
3145+
datasetParameterFromChildRunner.parts,
3146+
parentDatasetParameterParts,
3147+
)
3148+
// Fix randomed and timestamped values
3149+
childDatasetParameterParts.forEach {
3150+
it.id = "id"
3151+
it.datasetId = "datasetId"
3152+
it.createInfo.timestamp = 0
3153+
it.updateInfo.timestamp = 0
3154+
}
3155+
3156+
parentDatasetParameterParts.forEach {
3157+
it.id = "id"
3158+
it.datasetId = "datasetId"
3159+
it.createInfo.timestamp = 0
3160+
it.updateInfo.timestamp = 0
3161+
}
3162+
3163+
// Check if dataset parts are equal
3164+
assertEquals(parentDatasetParameterParts, childDatasetParameterParts)
3165+
}
3166+
29543167
fun makeSolution(organizationId: String = organizationSaved.id): SolutionCreateRequest {
29553168
return SolutionCreateRequest(
29563169
key = UUID.randomUUID().toString(),
@@ -2959,7 +3172,7 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
29593172
mutableListOf(
29603173
RunTemplateParameterGroupCreateRequest(
29613174
id = "testParameterGroups",
2962-
parameters = mutableListOf("param1", "param2"),
3175+
parameters = mutableListOf("param1", "param2", "param3"),
29633176
)
29643177
),
29653178
parameters =
@@ -2975,6 +3188,10 @@ class RunnerServiceIntegrationTest : CsmTestBase() {
29753188
id = "param2",
29763189
varType = DATASET_PART_VARTYPE_FILE,
29773190
),
3191+
RunTemplateParameterCreateRequest(
3192+
id = "param3",
3193+
varType = DATASET_PART_VARTYPE_DB,
3194+
),
29783195
),
29793196
runTemplates =
29803197
mutableListOf(

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

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -670,11 +670,10 @@ class RunnerService(
670670
val parentDatasetParameter = parentDatasetParameters[parameterId]
671671
if (parentDatasetParameter != null) {
672672
datasetPartList.add(
673-
addDatasetPartInDatasetParameter(
673+
copyDatasetPartInDataset(
674674
parentDatasetParameter,
675675
runner.datasets.parameter,
676676
parameterId,
677-
runner.id,
678677
)
679678
)
680679
} else {
@@ -689,21 +688,20 @@ class RunnerService(
689688
return datasetPartList
690689
}
691690

692-
private fun addDatasetPartInDatasetParameter(
691+
private fun copyDatasetPartInDataset(
693692
datasetPartToAdd: DatasetPart,
694693
datasetId: String,
695-
parameterId: String,
696-
runnerId: String,
694+
newDatasetPartName: String,
697695
): DatasetPart {
698696

699-
val sourceName = datasetPartToAdd.sourceName
700697
val datasetPartCreateRequest =
701698
DatasetPartCreateRequest(
702-
name = parameterId,
703-
description = "Dataset Part associated to $parameterId parameter",
704-
sourceName = sourceName,
705-
tags = mutableListOf(runnerId, parameterId),
699+
name = newDatasetPartName,
700+
description = datasetPartToAdd.description,
701+
sourceName = datasetPartToAdd.sourceName,
702+
tags = datasetPartToAdd.tags,
706703
type = datasetPartToAdd.type,
704+
additionalData = datasetPartToAdd.additionalData,
707705
)
708706
val datasetPartResource =
709707
datasetApiService.downloadDatasetPart(

0 commit comments

Comments
 (0)