Skip to content

Commit aba6e44

Browse files
committed
test: decouple builder tests from crd::merged_config via validated_cluster()
1 parent aaa3181 commit aba6e44

7 files changed

Lines changed: 94 additions & 89 deletions

File tree

rust/operator-binary/src/controller/build/properties/hbase_env.rs

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -62,33 +62,18 @@ pub fn build(
6262
#[cfg(test)]
6363
mod tests {
6464
use super::*;
65-
use crate::{
66-
controller::build::properties::test_support::{config_overrides, minimal_hbase},
67-
crd::v1alpha1,
68-
};
69-
70-
fn master_merged_config(hbase: &v1alpha1::HbaseCluster) -> AnyServiceConfig {
71-
hbase
72-
.merged_config(&HbaseRole::Master, "default", "simple-hdfs")
73-
.expect("merged config for the minimal master group")
74-
}
75-
76-
fn region_server_merged_config(hbase: &v1alpha1::HbaseCluster) -> AnyServiceConfig {
77-
hbase
78-
.merged_config(&HbaseRole::RegionServer, "default", "simple-hdfs")
79-
.expect("merged config for the minimal region server group")
80-
}
65+
use crate::controller::build::properties::test_support::{merged_config, validated_cluster};
8166

8267
#[test]
8368
fn renders_operator_defaults() {
84-
let hbase = minimal_hbase();
85-
let merged = master_merged_config(&hbase);
69+
let validated_cluster = validated_cluster();
70+
let merged = merged_config(&validated_cluster, &HbaseRole::Master);
8671
let env = build(
87-
&merged,
72+
merged,
8873
&HbaseRole::Master,
8974
false,
9075
"-Xtest".to_string(),
91-
config_overrides(&[]),
76+
KeyValueConfigOverrides::default(),
9277
)
9378
.unwrap();
9479
assert!(env.contains("export HBASE_MANAGES_ZK=\"false\""), "{env}");
@@ -97,29 +82,29 @@ mod tests {
9782

9883
#[test]
9984
fn renders_region_server_opts() {
100-
let hbase = minimal_hbase();
101-
let merged = region_server_merged_config(&hbase);
85+
let validated_cluster = validated_cluster();
86+
let merged = merged_config(&validated_cluster, &HbaseRole::RegionServer);
10287
let env = build(
103-
&merged,
88+
merged,
10489
&HbaseRole::RegionServer,
10590
false,
10691
"-Xtest".to_string(),
107-
config_overrides(&[]),
92+
KeyValueConfigOverrides::default(),
10893
)
10994
.unwrap();
11095
assert!(env.contains("export HBASE_REGIONSERVER_OPTS="), "{env}");
11196
}
11297

11398
#[test]
11499
fn user_override_appears() {
115-
let hbase = minimal_hbase();
116-
let merged = master_merged_config(&hbase);
100+
let validated_cluster = validated_cluster();
101+
let merged = merged_config(&validated_cluster, &HbaseRole::Master);
117102
let env = build(
118-
&merged,
103+
merged,
119104
&HbaseRole::Master,
120105
false,
121106
"-Xtest".to_string(),
122-
config_overrides(&[("CUSTOM_VAR", "custom_value")]),
107+
[("CUSTOM_VAR", "custom_value")].into(),
123108
)
124109
.unwrap();
125110
assert!(env.contains("export CUSTOM_VAR=\"custom_value\""), "{env}");

rust/operator-binary/src/controller/build/properties/hbase_site.rs

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -113,40 +113,19 @@ pub fn build(
113113
#[cfg(test)]
114114
mod tests {
115115
use super::*;
116-
use crate::{
117-
controller::build::properties::test_support::{config_overrides, minimal_hbase},
118-
crd::v1alpha1,
119-
};
120-
121-
fn master_merged_config(hbase: &v1alpha1::HbaseCluster) -> AnyServiceConfig {
122-
hbase
123-
.merged_config(&HbaseRole::Master, "default", "simple-hdfs")
124-
.expect("merged config for the minimal master group")
125-
}
126-
127-
fn region_server_merged_config(hbase: &v1alpha1::HbaseCluster) -> AnyServiceConfig {
128-
hbase
129-
.merged_config(&HbaseRole::RegionServer, "default", "simple-hdfs")
130-
.expect("merged config for the minimal region server group")
131-
}
132-
133-
fn rest_server_merged_config(hbase: &v1alpha1::HbaseCluster) -> AnyServiceConfig {
134-
hbase
135-
.merged_config(&HbaseRole::RestServer, "default", "simple-hdfs")
136-
.expect("merged config for the minimal rest server group")
137-
}
116+
use crate::controller::build::properties::test_support::{merged_config, validated_cluster};
138117

139118
#[test]
140119
fn renders_operator_defaults() {
141-
let hbase = minimal_hbase();
142-
let merged = master_merged_config(&hbase);
120+
let validated_cluster = validated_cluster();
121+
let merged = merged_config(&validated_cluster, &HbaseRole::Master);
143122
let xml = build(
144123
&HbaseRole::Master,
145-
&merged,
124+
merged,
146125
BTreeMap::new(),
147126
BTreeMap::new(),
148127
None,
149-
config_overrides(&[]),
128+
KeyValueConfigOverrides::default(),
150129
);
151130
assert!(
152131
xml.contains("<name>hbase.cluster.distributed</name>\n <value>true</value>"),
@@ -160,15 +139,15 @@ mod tests {
160139

161140
#[test]
162141
fn renders_region_server_bind_settings() {
163-
let hbase = minimal_hbase();
164-
let merged = region_server_merged_config(&hbase);
142+
let validated_cluster = validated_cluster();
143+
let merged = merged_config(&validated_cluster, &HbaseRole::RegionServer);
165144
let xml = build(
166145
&HbaseRole::RegionServer,
167-
&merged,
146+
merged,
168147
BTreeMap::new(),
169148
BTreeMap::new(),
170149
None,
171-
config_overrides(&[]),
150+
KeyValueConfigOverrides::default(),
172151
);
173152
assert!(
174153
xml.contains("<name>hbase.regionserver.ipc.address</name>\n <value>0.0.0.0</value>"),
@@ -184,15 +163,15 @@ mod tests {
184163

185164
#[test]
186165
fn renders_rest_server_endpoint() {
187-
let hbase = minimal_hbase();
188-
let merged = rest_server_merged_config(&hbase);
166+
let validated_cluster = validated_cluster();
167+
let merged = merged_config(&validated_cluster, &HbaseRole::RestServer);
189168
let xml = build(
190169
&HbaseRole::RestServer,
191-
&merged,
170+
merged,
192171
BTreeMap::new(),
193172
BTreeMap::new(),
194173
None,
195-
config_overrides(&[]),
174+
KeyValueConfigOverrides::default(),
196175
);
197176
assert!(
198177
xml.contains(
@@ -204,15 +183,15 @@ mod tests {
204183

205184
#[test]
206185
fn user_override_wins() {
207-
let hbase = minimal_hbase();
208-
let merged = master_merged_config(&hbase);
186+
let validated_cluster = validated_cluster();
187+
let merged = merged_config(&validated_cluster, &HbaseRole::Master);
209188
let xml = build(
210189
&HbaseRole::Master,
211-
&merged,
190+
merged,
212191
BTreeMap::new(),
213192
BTreeMap::new(),
214193
None,
215-
config_overrides(&[("hbase.cluster.distributed", "false")]),
194+
[("hbase.cluster.distributed", "false")].into(),
216195
);
217196
assert!(
218197
xml.contains("<name>hbase.cluster.distributed</name>\n <value>false</value>"),

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

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,17 @@ mod tests {
6060

6161
#[cfg(test)]
6262
pub(crate) mod test_support {
63-
use stackable_operator::v2::config_overrides::KeyValueConfigOverrides;
63+
use stackable_operator::{
64+
commons::networking::DomainName, utils::cluster_info::KubernetesClusterInfo,
65+
};
6466

65-
use crate::crd::v1alpha1;
66-
67-
/// Builds a [`KeyValueConfigOverrides`] from `(key, value)` pairs for tests.
68-
pub fn config_overrides(pairs: &[(&str, &str)]) -> KeyValueConfigOverrides {
69-
KeyValueConfigOverrides {
70-
overrides: pairs
71-
.iter()
72-
.map(|(k, v)| (k.to_string(), v.to_string()))
73-
.collect(),
74-
}
75-
}
67+
use crate::{
68+
controller::{
69+
ValidatedCluster, dereference::DereferencedObjects, validate::validate_cluster,
70+
},
71+
crd::{AnyServiceConfig, HbaseRole, v1alpha1},
72+
zookeeper::ZookeeperConnectionInformation,
73+
};
7674

7775
/// A minimal three-role HbaseCluster used to drive the per-file builder tests.
7876
pub const MINIMAL_HBASE_YAML: &str = r#"
@@ -82,6 +80,7 @@ kind: HbaseCluster
8280
metadata:
8381
name: hbase
8482
namespace: default
83+
uid: c2c8c5c0-0b5a-4b1e-9f3e-1a2b3c4d5e6f
8584
spec:
8685
image:
8786
productVersion: 2.6.3
@@ -105,4 +104,35 @@ spec:
105104
pub fn minimal_hbase() -> v1alpha1::HbaseCluster {
106105
serde_yaml::from_str(MINIMAL_HBASE_YAML).expect("invalid test HbaseCluster YAML")
107106
}
107+
108+
pub fn cluster_info() -> KubernetesClusterInfo {
109+
KubernetesClusterInfo {
110+
cluster_domain: DomainName::try_from("cluster.local").unwrap(),
111+
}
112+
}
113+
114+
/// Runs the real validation pipeline once over [`minimal_hbase`], with a fixed
115+
/// dereferenced ZooKeeper connection (and no OPA), so the per-file builder tests can
116+
/// pull merged configs straight from the [`ValidatedCluster`] instead of re-merging by
117+
/// hand via `crd::merged_config`.
118+
pub fn validated_cluster() -> ValidatedCluster {
119+
validate_cluster(
120+
&minimal_hbase(),
121+
"oci.example.org",
122+
&cluster_info(),
123+
DereferencedObjects {
124+
zookeeper_connection_information: ZookeeperConnectionInformation::for_tests(),
125+
hbase_opa_config: None,
126+
},
127+
)
128+
.expect("validate should succeed for the minimal fixture")
129+
}
130+
131+
/// The merged [`AnyServiceConfig`] for the `default` role group of `role`.
132+
pub fn merged_config<'a>(
133+
validated_cluster: &'a ValidatedCluster,
134+
role: &HbaseRole,
135+
) -> &'a AnyServiceConfig {
136+
&validated_cluster.role_group_configs[role]["default"].config
137+
}
108138
}

rust/operator-binary/src/controller/build/properties/security_properties.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,28 +44,27 @@ pub fn build(
4444
#[cfg(test)]
4545
mod tests {
4646
use super::*;
47-
use crate::controller::build::properties::test_support::config_overrides;
4847

4948
#[test]
5049
fn injects_master_dns_cache_ttl() {
5150
assert_eq!(
52-
build(&HbaseRole::Master, config_overrides(&[])).unwrap(),
51+
build(&HbaseRole::Master, KeyValueConfigOverrides::default()).unwrap(),
5352
"networkaddress.cache.negative.ttl=0\nnetworkaddress.cache.ttl=5\n"
5453
);
5554
}
5655

5756
#[test]
5857
fn injects_regionserver_dns_cache_ttl() {
5958
assert_eq!(
60-
build(&HbaseRole::RegionServer, config_overrides(&[])).unwrap(),
59+
build(&HbaseRole::RegionServer, KeyValueConfigOverrides::default()).unwrap(),
6160
"networkaddress.cache.negative.ttl=0\nnetworkaddress.cache.ttl=10\n"
6261
);
6362
}
6463

6564
#[test]
6665
fn injects_restserver_dns_cache_ttl() {
6766
assert_eq!(
68-
build(&HbaseRole::RestServer, config_overrides(&[])).unwrap(),
67+
build(&HbaseRole::RestServer, KeyValueConfigOverrides::default()).unwrap(),
6968
"networkaddress.cache.negative.ttl=0\nnetworkaddress.cache.ttl=30\n"
7069
);
7170
}
@@ -75,7 +74,7 @@ mod tests {
7574
assert_eq!(
7675
build(
7776
&HbaseRole::Master,
78-
config_overrides(&[("networkaddress.cache.ttl", "60")])
77+
[("networkaddress.cache.ttl", "60")].into()
7978
)
8079
.unwrap(),
8180
"networkaddress.cache.negative.ttl=0\nnetworkaddress.cache.ttl=60\n"

rust/operator-binary/src/controller/build/properties/ssl_client.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ pub fn build(settings: BTreeMap<String, String>, overrides: KeyValueConfigOverri
1313
#[cfg(test)]
1414
mod tests {
1515
use super::*;
16-
use crate::controller::build::properties::test_support::config_overrides;
1716

1817
#[test]
1918
fn settings_appear_in_xml() {
@@ -22,7 +21,7 @@ mod tests {
2221
"ssl.client.truststore.type".to_string(),
2322
"pkcs12".to_string(),
2423
)]),
25-
config_overrides(&[]),
24+
KeyValueConfigOverrides::default(),
2625
);
2726
assert!(
2827
xml.contains("<name>ssl.client.truststore.type</name>\n <value>pkcs12</value>"),
@@ -34,7 +33,7 @@ mod tests {
3433
fn user_override_appears_in_xml() {
3534
let xml = build(
3635
BTreeMap::new(),
37-
config_overrides(&[("ssl.client.keystore.type", "jks")]),
36+
[("ssl.client.keystore.type", "jks")].into(),
3837
);
3938
assert!(
4039
xml.contains("<name>ssl.client.keystore.type</name>\n <value>jks</value>"),

rust/operator-binary/src/controller/build/properties/ssl_server.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,12 @@ pub fn build(settings: BTreeMap<String, String>, overrides: KeyValueConfigOverri
1313
#[cfg(test)]
1414
mod tests {
1515
use super::*;
16-
use crate::controller::build::properties::test_support::config_overrides;
1716

1817
#[test]
1918
fn settings_appear_in_xml() {
2019
let xml = build(
2120
BTreeMap::from([("ssl.server.keystore.type".to_string(), "pkcs12".to_string())]),
22-
config_overrides(&[]),
21+
KeyValueConfigOverrides::default(),
2322
);
2423
assert!(
2524
xml.contains("<name>ssl.server.keystore.type</name>\n <value>pkcs12</value>"),
@@ -31,7 +30,7 @@ mod tests {
3130
fn user_override_appears_in_xml() {
3231
let xml = build(
3332
BTreeMap::new(),
34-
config_overrides(&[("ssl.server.keystore.type", "jks")]),
33+
[("ssl.server.keystore.type", "jks")].into(),
3534
);
3635
assert!(
3736
xml.contains("<name>ssl.server.keystore.type</name>\n <value>jks</value>"),

rust/operator-binary/src/zookeeper.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,20 @@ pub struct ZookeeperConnectionInformation {
5353
port: u16,
5454
}
5555

56+
#[cfg(test)]
57+
impl ZookeeperConnectionInformation {
58+
/// A fixed connection used by the per-file builder tests, so they don't need a live
59+
/// ZooKeeper/ZNode discovery `ConfigMap`.
60+
pub(crate) fn for_tests() -> Self {
61+
Self {
62+
hosts: "simple-zk-server-default-0.simple-zk-server-default.default.svc.cluster.local"
63+
.to_owned(),
64+
chroot: "/znode-test".to_owned(),
65+
port: 2282,
66+
}
67+
}
68+
}
69+
5670
impl ZookeeperConnectionInformation {
5771
pub async fn retrieve(hbase: &v1alpha1::HbaseCluster, client: &Client) -> Result<Self> {
5872
let zk_discovery_cm_name = &hbase.spec.cluster_config.zookeeper_config_map_name;

0 commit comments

Comments
 (0)