Skip to content

Commit 3704ff0

Browse files
committed
tests: modified integration tests to work with SSA
Signed-off-by: Chirag Rao <crao@redhat.com> Assisted-by: Cursor
1 parent 4bed959 commit 3704ff0

1 file changed

Lines changed: 70 additions & 35 deletions

File tree

tests/trusted_execution_cluster.rs

Lines changed: 70 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
use compute_pcrs_lib::{Part, Pcr};
66
use k8s_openapi::api::apps::v1::Deployment;
77
use k8s_openapi::api::core::v1::{ConfigMap, Secret};
8-
use kube::{Api, api::DeleteParams};
8+
use kube::{
9+
Api,
10+
api::{DeleteParams, PostParams},
11+
};
912
use std::time::Duration;
1013
use trusted_cluster_operator_lib::conditions::NOT_COMMITTED_REASON_PENDING;
1114
use trusted_cluster_operator_lib::reference_values::ImagePcrs;
1215
use trusted_cluster_operator_lib::{
13-
ApprovedImage, AttestationKey, Machine, TrustedExecutionCluster, generate_owner_reference,
16+
ApprovedImage, AttestationKey, FIELD_MANAGER, Machine, TrustedExecutionCluster,
17+
generate_owner_controller_reference,
1418
};
1519
use trusted_cluster_operator_test_utils::*;
1620

@@ -28,10 +32,9 @@ named_test!(
2832
let tec_api: Api<TrustedExecutionCluster> = Api::namespaced(client.clone(), namespace);
2933
let tec = tec_api.get(name).await?;
3034

31-
let owner_reference = generate_owner_reference(&tec)?;
35+
let owner_controller_reference = generate_owner_controller_reference(&tec)?;
3236

33-
// Create a test Machine with TEC as owner reference. We need to set the owner reference
34-
// manually since the machine is not created directly by the operator.
37+
// Create a test Machine with TEC as owner-controller reference. We need to set the owner reference manually since the machine is not created directly by the operator, but by register-server.
3538
let machine_uuid = uuid::Uuid::new_v4().to_string();
3639
let machine_name = format!("test-machine-{}", &machine_uuid[..8]);
3740

@@ -40,7 +43,7 @@ named_test!(
4043
metadata: k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta {
4144
name: Some(machine_name.clone()),
4245
namespace: Some(namespace.to_string()),
43-
owner_references: Some(vec![owner_reference.clone()]),
46+
owner_references: Some(vec![owner_controller_reference.clone()]),
4447
..Default::default()
4548
},
4649
spec: trusted_cluster_operator_lib::MachineSpec {
@@ -49,7 +52,11 @@ named_test!(
4952
status: None,
5053
};
5154

52-
machines.create(&Default::default(), &machine).await?;
55+
let pp = PostParams {
56+
field_manager: Some(FIELD_MANAGER.to_string()),
57+
..Default::default()
58+
};
59+
machines.create(&pp, &machine).await?;
5360
test_ctx.info(format!("Created test Machine: {machine_name}"));
5461

5562
// Create an AttestationKey with the same uuid as the Machine
@@ -70,9 +77,11 @@ named_test!(
7077
status: None,
7178
};
7279

73-
attestation_keys
74-
.create(&Default::default(), &attestation_key)
75-
.await?;
80+
let pp = PostParams {
81+
field_manager: Some(FIELD_MANAGER.to_string()),
82+
..Default::default()
83+
};
84+
attestation_keys.create(&pp, &attestation_key).await?;
7685
test_ctx.info(format!(
7786
"Created test AttestationKey: {ak_name} with uuid: {machine_uuid}",
7887
));
@@ -87,6 +96,8 @@ named_test!(
8796
.poll_async(|| {
8897
let ak_api = attestation_keys.clone();
8998
let ak_name_clone = ak_name.clone();
99+
let machine_name_clone = machine_name.clone();
100+
90101
async move {
91102
let ak = ak_api.get(&ak_name_clone).await?;
92103

@@ -108,6 +119,26 @@ named_test!(
108119
));
109120
}
110121

122+
// On approval of attestation key, the operator transfers ownership and control of the AttestationKey to the Machine. Validating that it happens below.
123+
let has_machine_controller = ak
124+
.metadata
125+
.owner_references
126+
.as_ref()
127+
.map(|refs| {
128+
refs.iter().any(|r| {
129+
r.kind == "Machine"
130+
&& r.name == machine_name_clone
131+
&& r.controller == Some(true)
132+
})
133+
})
134+
.unwrap_or(false);
135+
136+
if !has_machine_controller {
137+
return Err(anyhow::anyhow!(
138+
"AttestationKey does not have Machine as controller yet"
139+
));
140+
}
141+
111142
Ok(())
112143
}
113144
})
@@ -290,7 +321,7 @@ async fn test_attestation_key_lifecycle() -> anyhow::Result<()> {
290321

291322
let tec_api: Api<TrustedExecutionCluster> = Api::namespaced(client.clone(), namespace);
292323
let tec = tec_api.get(tec_name).await?;
293-
let owner_reference = generate_owner_reference(&tec)?;
324+
let owner_controller_reference = generate_owner_controller_reference(&tec)?;
294325

295326
let machine_uuid = uuid::Uuid::new_v4().to_string();
296327

@@ -302,7 +333,7 @@ async fn test_attestation_key_lifecycle() -> anyhow::Result<()> {
302333
metadata: k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta {
303334
name: Some(ak_name.clone()),
304335
namespace: Some(namespace.to_string()),
305-
owner_references: Some(vec![owner_reference.clone()]),
336+
owner_references: Some(vec![owner_controller_reference.clone()]),
306337
..Default::default()
307338
},
308339
spec: trusted_cluster_operator_lib::AttestationKeySpec {
@@ -312,9 +343,8 @@ async fn test_attestation_key_lifecycle() -> anyhow::Result<()> {
312343
status: None,
313344
};
314345

315-
attestation_keys
316-
.create(&Default::default(), &attestation_key)
317-
.await?;
346+
let pp = PostParams { field_manager: Some(FIELD_MANAGER.to_string()), ..Default::default() };
347+
attestation_keys.create(&pp, &attestation_key).await?;
318348
test_ctx.info(format!(
319349
"Created test AttestationKey: {ak_name} with uuid: {machine_uuid}",
320350
));
@@ -325,7 +355,7 @@ async fn test_attestation_key_lifecycle() -> anyhow::Result<()> {
325355
metadata: k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta {
326356
name: Some(machine_name.clone()),
327357
namespace: Some(namespace.to_string()),
328-
owner_references: Some(vec![owner_reference.clone()]),
358+
owner_references: Some(vec![owner_controller_reference.clone()]),
329359
..Default::default()
330360
},
331361
spec: trusted_cluster_operator_lib::MachineSpec {
@@ -334,7 +364,8 @@ async fn test_attestation_key_lifecycle() -> anyhow::Result<()> {
334364
status: None,
335365
};
336366

337-
machines.create(&Default::default(), &machine).await?;
367+
let pp = PostParams { field_manager: Some(FIELD_MANAGER.to_string()), ..Default::default() };
368+
machines.create(&pp, &machine).await?;
338369
test_ctx.info(format!(
339370
"Created test Machine: {machine_name} with uuid: {machine_uuid}",
340371
));
@@ -373,40 +404,44 @@ async fn test_attestation_key_lifecycle() -> anyhow::Result<()> {
373404
));
374405
}
375406

376-
// Check for owner reference to the Machine
377-
let has_machine_owner_ref = ak
407+
// Check for owner-controller reference to the Machine
408+
let has_machine_owner_controller_ref = ak
378409
.metadata
379410
.owner_references
380411
.as_ref()
381-
.map(|owner_refs| {
382-
owner_refs.iter().any(|owner_ref| {
383-
owner_ref.kind == "Machine" && owner_ref.name == machine_name_clone
412+
.map(|owner_controller_refs| {
413+
owner_controller_refs.iter().any(|owner_ref| {
414+
owner_ref.kind == "Machine"
415+
&& owner_ref.name == machine_name_clone
416+
&& owner_ref.controller == Some(true)
384417
})
385418
})
386419
.unwrap_or(false);
387420

388-
if !has_machine_owner_ref {
421+
if !has_machine_owner_controller_ref {
389422
return Err(anyhow::anyhow!(
390-
"AttestationKey does not have owner reference to Machine yet"
423+
"AttestationKey does not have Machine as owner-controller yet"
391424
));
392425
}
393426

394-
// Check that a Secret with the same name exists and has the AttestationKey as owner
427+
// Check that a Secret with the same name exists and has the AttestationKey as owner-controller
395428
let secret = secrets.get(&ak_name_clone).await?;
396-
let has_ak_owner_ref = secret
429+
let has_ak_owner_controller_ref = secret
397430
.metadata
398431
.owner_references
399432
.as_ref()
400-
.map(|owner_refs| {
401-
owner_refs.iter().any(|owner_ref| {
402-
owner_ref.kind == "AttestationKey" && owner_ref.name == ak_name_clone
433+
.map(|owner_controller_refs| {
434+
owner_controller_refs.iter().any(|owner_ref| {
435+
owner_ref.kind == "AttestationKey"
436+
&& owner_ref.name == ak_name_clone
437+
&& owner_ref.controller == Some(true)
403438
})
404439
})
405440
.unwrap_or(false);
406441

407-
if !has_ak_owner_ref {
442+
if !has_ak_owner_controller_ref {
408443
return Err(anyhow::anyhow!(
409-
"Secret does not have owner reference to AttestationKey yet"
444+
"Secret does not have AttestationKey as owner-controller yet"
410445
));
411446
}
412447

@@ -415,9 +450,9 @@ async fn test_attestation_key_lifecycle() -> anyhow::Result<()> {
415450
})
416451
.await?;
417452

418-
test_ctx.info(format!(
419-
"AttestationKey successfully approved with owner reference to Machine: {machine_name} and Secret created"
420-
));
453+
test_ctx.info(
454+
"AttestationKey successfully approved with Machine as owner-controller and Secret created",
455+
);
421456

422457
// Delete the Machine
423458
let dp = DeleteParams::default();
@@ -444,7 +479,7 @@ async fn test_nonexistent_approved_image() -> anyhow::Result<()> {
444479
let namespace = test_ctx.namespace();
445480

446481
let images: Api<ApprovedImage> = Api::namespaced(client.clone(), namespace);
447-
images.create(&Default::default(), &ApprovedImage {
482+
images.create(&PostParams { field_manager: Some(FIELD_MANAGER.to_string()), ..Default::default() }, &ApprovedImage {
448483
metadata: k8s_openapi::apimachinery::pkg::apis::meta::v1::ObjectMeta {
449484
name: Some("coreos1".to_string()),
450485
namespace: Some(namespace.to_string()),

0 commit comments

Comments
 (0)