Skip to content

Commit 3f6e993

Browse files
committed
test(supervisor): cover startup provider polling
Signed-off-by: Eric Busto <ebusto@nvidia.com>
1 parent 64f99c2 commit 3f6e993

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

  • crates/openshell-supervisor/src

‎crates/openshell-supervisor/src/lib.rs‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6128,6 +6128,65 @@ network_policies:
61286128
let _ = task.await;
61296129
}
61306130

6131+
#[tokio::test]
6132+
async fn provider_readiness_startup_environment_avoids_unchanged_refresh() {
6133+
let policy = proto_policy_fixture();
6134+
let mut settings = settings_poll_result(
6135+
Some(policy.clone()),
6136+
1,
6137+
openshell_core::proto::PolicySource::Sandbox,
6138+
);
6139+
settings.provider_env_revision = 6;
6140+
let engine = Arc::new(OpaEngine::from_proto(&policy).unwrap());
6141+
let mut ctx = policy_poll_test_context(
6142+
engine.clone(),
6143+
LoadedPolicyOrigin::Gateway {
6144+
revision: Some(LoadedPolicyRevision::from_snapshot(&settings)),
6145+
has_last_valid_policy: true,
6146+
},
6147+
default_middleware_connector(),
6148+
);
6149+
let mut provider = static_provider_environment(6, Some("initial"));
6150+
provider.policy_hash.clone_from(&settings.policy_hash);
6151+
let credentials = prepare_provider_environment(&provider).unwrap();
6152+
ctx.provider_credentials = CapturedProviderEnvironment::new(credentials, &provider)
6153+
.install(&ctx.provider_readiness);
6154+
let generation = engine.current_generation();
6155+
let guard = engine.generation_guard(generation).unwrap();
6156+
let (policy_gateway, polls, mut reports) = scripted_policy_gateway();
6157+
let observed_polls = policy_gateway.polled_sandboxes.clone();
6158+
let (requests, mut received) = tokio::sync::mpsc::unbounded_channel();
6159+
let task = tokio::spawn(run_policy_poll_loop_with_client(
6160+
ctx,
6161+
ScriptedProviderGateway {
6162+
policy: policy_gateway,
6163+
requests,
6164+
},
6165+
));
6166+
6167+
polls.send(settings.clone()).unwrap();
6168+
expect_policy_report(&mut reports, 1).await;
6169+
polls.send(settings).unwrap();
6170+
timeout(Duration::from_secs(1), async {
6171+
while observed_polls.lock().await.len() < 2 {
6172+
tokio::task::yield_now().await;
6173+
}
6174+
})
6175+
.await
6176+
.unwrap();
6177+
6178+
assert!(
6179+
timeout(Duration::from_millis(50), received.recv())
6180+
.await
6181+
.is_err(),
6182+
"unchanged settings must not refetch the startup environment"
6183+
);
6184+
assert_eq!(engine.current_generation(), generation);
6185+
assert!(!guard.is_stale());
6186+
task.abort();
6187+
let _ = task.await;
6188+
}
6189+
61316190
#[tokio::test]
61326191
async fn provider_poll_installs_fail_closed_environment_and_acknowledges_policy() {
61336192
let policy = proto_policy_fixture();

0 commit comments

Comments
 (0)