Skip to content

Commit 1d92b97

Browse files
committed
test: add config_map unit tests; dedupe trust-store type / derby.log into consts
1 parent b83c371 commit 1d92b97

3 files changed

Lines changed: 84 additions & 4 deletions

File tree

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,12 @@ use stackable_operator::{
66
use super::properties::ConfigFileName;
77
use crate::crd::{
88
DruidRole, RW_CONFIG_DIRECTORY, STACKABLE_TRUST_STORE, STACKABLE_TRUST_STORE_PASSWORD,
9+
STACKABLE_TRUST_STORE_TYPE,
910
};
1011

12+
/// The Derby error log file, written by the Coordinator's embedded Derby (default metadata store).
13+
const DERBY_LOG_FILE: &str = "/stackable/var/druid/derby.log";
14+
1115
#[derive(Snafu, Debug)]
1216
pub enum Error {
1317
#[snafu(display("failed to format memory quantity {value:?} for Java"))]
@@ -58,10 +62,10 @@ pub fn construct_jvm_args(
5862
format!("-Dlog4j.configurationFile={RW_CONFIG_DIRECTORY}/{log4j2_config_file}"),
5963
format!("-Djavax.net.ssl.trustStore={STACKABLE_TRUST_STORE}"),
6064
format!("-Djavax.net.ssl.trustStorePassword={STACKABLE_TRUST_STORE_PASSWORD}"),
61-
"-Djavax.net.ssl.trustStoreType=pkcs12".to_owned(),
65+
format!("-Djavax.net.ssl.trustStoreType={STACKABLE_TRUST_STORE_TYPE}"),
6266
]);
6367
if druid_role == &DruidRole::Coordinator {
64-
jvm_args.push("-Dderby.stream.error.file=/stackable/var/druid/derby.log".to_owned());
68+
jvm_args.push(format!("-Dderby.stream.error.file={DERBY_LOG_FILE}"));
6569
}
6670

6771
Ok(jvm_argument_overrides.apply_to(jvm_args).join("\n"))

rust/operator-binary/src/controller/build/resource/config_map.rs

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ use crate::{
4040
},
4141
crd::{
4242
DruidConfigOverrides, DruidRole, STACKABLE_TRUST_STORE, STACKABLE_TRUST_STORE_PASSWORD,
43-
build_recommended_labels, build_string_list, env_var_reference, file_reference,
43+
STACKABLE_TRUST_STORE_TYPE, build_recommended_labels, build_string_list, env_var_reference,
44+
file_reference,
4445
},
4546
};
4647

@@ -113,7 +114,7 @@ fn middlemanager_indexer_java_opts() -> (String, String) {
113114
build_string_list(&[
114115
format!("-Djavax.net.ssl.trustStore={STACKABLE_TRUST_STORE}"),
115116
format!("-Djavax.net.ssl.trustStorePassword={STACKABLE_TRUST_STORE_PASSWORD}"),
116-
"-Djavax.net.ssl.trustStoreType=pkcs12".to_owned(),
117+
format!("-Djavax.net.ssl.trustStoreType={STACKABLE_TRUST_STORE_TYPE}"),
117118
]),
118119
)
119120
}
@@ -360,3 +361,77 @@ pub fn build_rolegroup_config_map(
360361
role_group: role_group_name.to_string(),
361362
})
362363
}
364+
365+
#[cfg(test)]
366+
mod tests {
367+
use std::str::FromStr;
368+
369+
use stackable_operator::{
370+
k8s_openapi::api::core::v1::ConfigMap, v2::types::operator::RoleGroupName,
371+
};
372+
373+
use super::*;
374+
use crate::controller::validate::test_support::{
375+
MINIMAL_DRUID_YAML, druid_from_yaml, validated_cluster,
376+
};
377+
378+
/// Builds the rolegroup `ConfigMap` for `<role>/<role_group>` from the minimal test fixture.
379+
fn build_cm(role: DruidRole, role_group: &str) -> ConfigMap {
380+
let druid = druid_from_yaml(MINIMAL_DRUID_YAML);
381+
let cluster = validated_cluster(&druid);
382+
let role_group_name = RoleGroupName::from_str(role_group).unwrap();
383+
let rg = cluster
384+
.role_group_configs
385+
.get(&role)
386+
.expect("role present")
387+
.get(&role_group_name)
388+
.expect("role group present")
389+
.clone();
390+
build_rolegroup_config_map(&cluster, &role, &role_group_name, &rg).expect("config map")
391+
}
392+
393+
#[test]
394+
fn contains_the_operator_written_config_files() {
395+
let cm = build_cm(DruidRole::Broker, "default");
396+
let data = cm.data.expect("config map has data");
397+
398+
// Always-present operator-written files.
399+
assert!(data.contains_key(&ConfigFileName::RuntimeProperties.to_string()));
400+
assert!(data.contains_key(&ConfigFileName::SecurityProperties.to_string()));
401+
assert!(data.contains_key(&ConfigFileName::JvmConfig.to_string()));
402+
// Automatic logging is the default, so log4j2 is rendered.
403+
assert!(data.contains_key(&ConfigFileName::Log4j2Properties.to_string()));
404+
// The Vector agent is disabled by default, so no `vector.yaml` is added.
405+
assert!(!data.contains_key(VECTOR_CONFIG_FILE));
406+
}
407+
408+
#[test]
409+
fn has_the_expected_name_and_recommended_labels() {
410+
let cm = build_cm(DruidRole::Broker, "default");
411+
let meta = cm.metadata;
412+
413+
assert_eq!(meta.name.as_deref(), Some("simple-druid-broker-default"));
414+
415+
let labels = meta.labels.expect("recommended labels");
416+
assert_eq!(
417+
labels.get("app.kubernetes.io/name").map(String::as_str),
418+
Some("druid")
419+
);
420+
assert_eq!(
421+
labels.get("app.kubernetes.io/instance").map(String::as_str),
422+
Some("simple-druid")
423+
);
424+
assert_eq!(
425+
labels
426+
.get("app.kubernetes.io/component")
427+
.map(String::as_str),
428+
Some("broker")
429+
);
430+
assert_eq!(
431+
labels
432+
.get("app.kubernetes.io/role-group")
433+
.map(String::as_str),
434+
Some("default")
435+
);
436+
}
437+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ pub const RW_CONFIG_DIRECTORY: &str = "/stackable/rwconfig";
8181
// store directories
8282
pub const STACKABLE_TRUST_STORE: &str = "/stackable/truststore.p12";
8383
pub const STACKABLE_TRUST_STORE_PASSWORD: &str = "changeit";
84+
pub const STACKABLE_TRUST_STORE_TYPE: &str = "pkcs12";
8485
pub const STACKABLE_LOG_DIR: &str = "/stackable/log";
8586

8687
pub const PROP_SEGMENT_CACHE_LOCATIONS: &str = "druid.segmentCache.locations";

0 commit comments

Comments
 (0)