Skip to content

Commit 7e79179

Browse files
committed
fix(predicate): update tests to validate UID tracking for resource recreation scenarios
1 parent 8a5446b commit 7e79179

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

kube-runtime/src/utils/predicate.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ pub struct PredicateFilter<St, K: Resource, P: Predicate<K>> {
123123
stream: St,
124124
predicate: P,
125125
cache: HashMap<PredicateCacheKey, u64>,
126+
// K: Resource necessary to get .meta() of an object during polling
126127
_phantom: PhantomData<K>,
127128
}
128129
impl<St, K, P> PredicateFilter<St, K, P>
@@ -290,10 +291,11 @@ pub(crate) mod tests {
290291
p
291292
};
292293

293-
// Simulate: create (gen=1, uid=1) -> delete -> create (gen=1, uid=2)
294+
// Simulate: create (gen=1, uid=1) -> delete -> create (gen=1, uid=2) -> delete -> create (gen=2, uid=3)
294295
let data = stream::iter([
295296
Ok(mkobj(1, "uid-1")), // First resource created, generation=1
296297
Ok(mkobj(1, "uid-2")), // Resource recreated with same generation but different UID
298+
Ok(mkobj(2, "uid-3")), // Resource recreated again with new generation and different UID
297299
]);
298300
let mut rx = pin!(PredicateFilter::new(data, predicates::generation));
299301

@@ -308,6 +310,12 @@ pub(crate) mod tests {
308310
assert_eq!(second.meta().generation, Some(1));
309311
assert_eq!(second.meta().uid.as_deref(), Some("uid-2"));
310312

313+
// Third object should also pass through because it's a different resource
314+
// (different UID and generation)
315+
let third = rx.next().now_or_never().unwrap().unwrap().unwrap();
316+
assert_eq!(third.meta().generation, Some(2));
317+
assert_eq!(third.meta().uid.as_deref(), Some("uid-3"));
318+
311319
// Stream should be exhausted
312320
assert!(matches!(poll!(rx.next()), Poll::Ready(None)));
313321
}

0 commit comments

Comments
 (0)