Skip to content

Commit d669b44

Browse files
razvanCopilot
andcommitted
more unit tests for edge cases
Co-authored-by: Copilot <copilot@github.com>
1 parent 4c4a314 commit d669b44

1 file changed

Lines changed: 235 additions & 0 deletions

File tree

rust/operator-binary/src/crd/template_merger.rs

Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,112 @@ mod tests {
554554
);
555555
}
556556

557+
#[test]
558+
fn test_deep_merge_config_overrides_base_only() {
559+
let base = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
560+
---
561+
apiVersion: spark.stackable.tech/v1alpha1
562+
kind: SparkApplication
563+
metadata:
564+
name: base-app
565+
spec:
566+
mode: cluster
567+
mainApplicationFile: base.py
568+
sparkImage:
569+
productVersion: "3.5.8"
570+
job:
571+
configOverrides:
572+
security.properties:
573+
test.base.only: base
574+
config:
575+
retryOnFailureCount: 1
576+
"#})
577+
.unwrap();
578+
579+
let overlay = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
580+
---
581+
apiVersion: spark.stackable.tech/v1alpha1
582+
kind: SparkApplication
583+
metadata:
584+
name: overlay-app
585+
spec:
586+
mode: cluster
587+
mainApplicationFile: overlay.py
588+
sparkImage:
589+
productVersion: "4.1.0"
590+
job:
591+
config:
592+
retryOnFailureCount: 2
593+
"#})
594+
.unwrap();
595+
596+
let merged = deep_merge(&base, &overlay);
597+
let submit_security_props = merged
598+
.spec
599+
.job
600+
.as_ref()
601+
.and_then(|j| j.config_overrides.get("security.properties"))
602+
.unwrap();
603+
604+
assert_eq!(
605+
submit_security_props.get("test.base.only"),
606+
Some(&"base".to_string())
607+
);
608+
}
609+
610+
#[test]
611+
fn test_deep_merge_config_overrides_overlay_only() {
612+
let base = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
613+
---
614+
apiVersion: spark.stackable.tech/v1alpha1
615+
kind: SparkApplication
616+
metadata:
617+
name: base-app
618+
spec:
619+
mode: cluster
620+
mainApplicationFile: base.py
621+
sparkImage:
622+
productVersion: "3.5.8"
623+
job:
624+
config:
625+
retryOnFailureCount: 1
626+
"#})
627+
.unwrap();
628+
629+
let overlay = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
630+
---
631+
apiVersion: spark.stackable.tech/v1alpha1
632+
kind: SparkApplication
633+
metadata:
634+
name: overlay-app
635+
spec:
636+
mode: cluster
637+
mainApplicationFile: overlay.py
638+
sparkImage:
639+
productVersion: "4.1.0"
640+
job:
641+
configOverrides:
642+
security.properties:
643+
test.overlay.only: overlay
644+
config:
645+
retryOnFailureCount: 2
646+
"#})
647+
.unwrap();
648+
649+
let merged = deep_merge(&base, &overlay);
650+
let submit_security_props = merged
651+
.spec
652+
.job
653+
.as_ref()
654+
.and_then(|j| j.config_overrides.get("security.properties"))
655+
.unwrap();
656+
657+
assert_eq!(
658+
submit_security_props.get("test.overlay.only"),
659+
Some(&"overlay".to_string())
660+
);
661+
}
662+
557663
#[test]
558664
fn test_deep_merge_env_overrides() {
559665
let base = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
@@ -915,6 +1021,135 @@ mod tests {
9151021
);
9161022
}
9171023

1024+
#[test]
1025+
fn test_deep_merge_pod_overrides_base_only() {
1026+
let base = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
1027+
---
1028+
apiVersion: spark.stackable.tech/v1alpha1
1029+
kind: SparkApplication
1030+
metadata:
1031+
name: base-app
1032+
spec:
1033+
mode: cluster
1034+
mainApplicationFile: base.py
1035+
sparkImage:
1036+
productVersion: "3.5.8"
1037+
job:
1038+
podOverrides:
1039+
spec:
1040+
serviceAccountName: base-sa
1041+
nodeSelector:
1042+
test.base.only: base
1043+
config:
1044+
retryOnFailureCount: 1
1045+
"#})
1046+
.unwrap();
1047+
1048+
let overlay = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
1049+
---
1050+
apiVersion: spark.stackable.tech/v1alpha1
1051+
kind: SparkApplication
1052+
metadata:
1053+
name: overlay-app
1054+
spec:
1055+
mode: cluster
1056+
mainApplicationFile: overlay.py
1057+
sparkImage:
1058+
productVersion: "4.1.0"
1059+
job:
1060+
config:
1061+
retryOnFailureCount: 2
1062+
"#})
1063+
.unwrap();
1064+
1065+
let merged = deep_merge(&base, &overlay);
1066+
let submit_spec = merged
1067+
.spec
1068+
.job
1069+
.as_ref()
1070+
.unwrap()
1071+
.pod_overrides
1072+
.spec
1073+
.as_ref()
1074+
.unwrap();
1075+
1076+
assert_eq!(submit_spec.service_account_name.as_deref(), Some("base-sa"));
1077+
assert_eq!(
1078+
submit_spec
1079+
.node_selector
1080+
.as_ref()
1081+
.and_then(|selector| selector.get("test.base.only"))
1082+
.map(String::as_str),
1083+
Some("base")
1084+
);
1085+
}
1086+
1087+
#[test]
1088+
fn test_deep_merge_pod_overrides_overlay_only() {
1089+
let base = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
1090+
---
1091+
apiVersion: spark.stackable.tech/v1alpha1
1092+
kind: SparkApplication
1093+
metadata:
1094+
name: base-app
1095+
spec:
1096+
mode: cluster
1097+
mainApplicationFile: base.py
1098+
sparkImage:
1099+
productVersion: "3.5.8"
1100+
job:
1101+
config:
1102+
retryOnFailureCount: 1
1103+
"#})
1104+
.unwrap();
1105+
1106+
let overlay = serde_yaml::from_str::<crate::crd::v1alpha1::SparkApplication>(indoc! {r#"
1107+
---
1108+
apiVersion: spark.stackable.tech/v1alpha1
1109+
kind: SparkApplication
1110+
metadata:
1111+
name: overlay-app
1112+
spec:
1113+
mode: cluster
1114+
mainApplicationFile: overlay.py
1115+
sparkImage:
1116+
productVersion: "4.1.0"
1117+
job:
1118+
podOverrides:
1119+
spec:
1120+
serviceAccountName: overlay-sa
1121+
nodeSelector:
1122+
test.overlay.only: overlay
1123+
config:
1124+
retryOnFailureCount: 2
1125+
"#})
1126+
.unwrap();
1127+
1128+
let merged = deep_merge(&base, &overlay);
1129+
let submit_spec = merged
1130+
.spec
1131+
.job
1132+
.as_ref()
1133+
.unwrap()
1134+
.pod_overrides
1135+
.spec
1136+
.as_ref()
1137+
.unwrap();
1138+
1139+
assert_eq!(
1140+
submit_spec.service_account_name.as_deref(),
1141+
Some("overlay-sa")
1142+
);
1143+
assert_eq!(
1144+
submit_spec
1145+
.node_selector
1146+
.as_ref()
1147+
.and_then(|selector| selector.get("test.overlay.only"))
1148+
.map(String::as_str),
1149+
Some("overlay")
1150+
);
1151+
}
1152+
9181153
#[test]
9191154
fn test_merge_two_templates_into_spark_application() {
9201155
let template_a = serde_yaml::from_str::<

0 commit comments

Comments
 (0)