Skip to content

Commit e14ceb6

Browse files
committed
test: cover the build aggregator's resource set
1 parent 42f0076 commit e14ceb6

2 files changed

Lines changed: 75 additions & 1 deletion

File tree

rust/operator-binary/src/controller/build/mod.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,66 @@ pub mod properties;
117117
pub mod region_mover;
118118
pub mod resource;
119119
pub mod role;
120+
121+
#[cfg(test)]
122+
mod tests {
123+
use stackable_operator::kube::Resource;
124+
125+
use super::build;
126+
use crate::test_utils;
127+
128+
/// Collects the `.metadata.name`s of the given resources, sorted for stable comparison.
129+
fn sorted_names(resources: &[impl Resource]) -> Vec<&str> {
130+
let mut names: Vec<&str> = resources
131+
.iter()
132+
.filter_map(|resource| resource.meta().name.as_deref())
133+
.collect();
134+
names.sort();
135+
names
136+
}
137+
138+
#[test]
139+
fn build_produces_expected_resource_names() {
140+
let cluster = test_utils::validated_cluster();
141+
let cluster_info = test_utils::cluster_info();
142+
let resources =
143+
build(&cluster, &cluster_info, "hbase-serviceaccount").expect("build succeeds");
144+
145+
// One StatefulSet per role group (one `default` group for each of the three roles).
146+
assert_eq!(
147+
sorted_names(&resources.stateful_sets),
148+
[
149+
"hbase-master-default",
150+
"hbase-regionserver-default",
151+
"hbase-restserver-default",
152+
]
153+
);
154+
// One headless and one metrics Service per role group.
155+
assert_eq!(
156+
sorted_names(&resources.services),
157+
[
158+
"hbase-master-default-headless",
159+
"hbase-master-default-metrics",
160+
"hbase-regionserver-default-headless",
161+
"hbase-regionserver-default-metrics",
162+
"hbase-restserver-default-headless",
163+
"hbase-restserver-default-metrics",
164+
]
165+
);
166+
// One ConfigMap per role group plus the cluster-wide discovery ConfigMap (`hbase`).
167+
assert_eq!(
168+
sorted_names(&resources.config_maps),
169+
[
170+
"hbase",
171+
"hbase-master-default",
172+
"hbase-regionserver-default",
173+
"hbase-restserver-default",
174+
]
175+
);
176+
// A default PodDisruptionBudget per role.
177+
assert_eq!(
178+
sorted_names(&resources.pod_disruption_budgets),
179+
["hbase-master", "hbase-regionserver", "hbase-restserver"]
180+
);
181+
}
182+
}

rust/operator-binary/src/test_utils.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
88
use std::str::FromStr;
99

10-
use stackable_operator::v2::types::operator::RoleGroupName;
10+
use stackable_operator::{
11+
commons::networking::DomainName, utils::cluster_info::KubernetesClusterInfo,
12+
v2::types::operator::RoleGroupName,
13+
};
1114

1215
use crate::{
1316
controller::{
@@ -80,6 +83,14 @@ pub fn role_group_name(name: &str) -> RoleGroupName {
8083
RoleGroupName::from_str(name).expect("valid role group name")
8184
}
8285

86+
/// A fixed [`KubernetesClusterInfo`] (`cluster.local` domain) for builders that need cluster
87+
/// metadata such as the discovery `ConfigMap` and Kerberos principals.
88+
pub fn cluster_info() -> KubernetesClusterInfo {
89+
KubernetesClusterInfo {
90+
cluster_domain: DomainName::from_str("cluster.local").expect("valid cluster domain"),
91+
}
92+
}
93+
8394
/// The merged [`AnyServiceConfig`] for the given `role` and `role_group`.
8495
pub fn merged_config_for<'a>(
8596
validated_cluster: &'a ValidatedCluster,

0 commit comments

Comments
 (0)