+
+ $cache->getWithSetCallback( $keyInner, 100, $innerFn, [ 'pcTTL' => 5 ] );
+ $cache->getWithSetCallback( $keyInner, 100, $innerFn, [ 'pcTTL' => 5 ] );
+
+ $this->assertEquals( 1, $innerHit, "Inner callback value cached" );
+ $cache->delete( $keyInner, $cache::HOLDOFF_NONE );
+ $mockWallClock += 1;
+
+ $cache->getWithSetCallback( $keyInner, 100, $innerFn, [ 'pcTTL' => 5 ] );
+ $this->assertEquals( 1, $innerHit, "Inner callback process cached" );
+
+ // Outer key misses and inner key process cache value is refused
+ $cache->getWithSetCallback( $keyOuter, 100, $outerFn );
+
+ $this->assertEquals( 1, $outerHit, "Outer callback value not yet cached" );
+ $this->assertEquals( 2, $innerHit, "Inner callback value process cache skipped" );
+
+ $cache->getWithSetCallback( $keyOuter, 100, $outerFn );
+
+ $this->assertEquals( 1, $outerHit, "Outer callback value cached" );
+
+ $cache->delete( $keyInner, $cache::HOLDOFF_NONE );
+ $cache->delete( $keyOuter, $cache::HOLDOFF_NONE );
+ $mockWallClock += 1;
+ $cache->clearProcessCache();
+ $cache->getWithSetCallback( $keyOuter, 100, $outerFn );
+
+ $this->assertEquals( 2, $outerHit, "Outer callback value not yet cached" );
+ $this->assertEquals( 3, $innerHit, "Inner callback value not yet cached" );
+
+ $cache->delete( $keyInner, $cache::HOLDOFF_NONE );
+ $mockWallClock += 1;
+ $cache->getWithSetCallback( $keyInner, 100, $innerFn, [ 'pcTTL' => 5 ] );
+
+ $this->assertEquals( 3, $innerHit, "Inner callback value process cached" );