feat(2meet-data-optimizer): sample drift daily and record the result
- TMDO_Drift_Check::cron_tick() runs on the existing wpdo_daily_health_check event (no new schedule to add or clear): every entity type whose flat tables are written (dual_write or higher) is checked on 500 random entities per group, and the outcome replaces the recorded status, so a group found drifting leaves the router that day. - Verify: DriftCheckTest cron cases (RED: method / hook missing); dev36 with all four entities in dual_write: one tick over 22 groups in 10 s, 0 drift, status option restored. - PR: PR-073
This commit is contained in:
@@ -181,6 +181,45 @@ class DriftCheckTest extends TestCase {
|
||||
$this->assertFalse( TMDO_Cache_Orchestrator::get_row( 'user', 2, 'dc_grp' ) );
|
||||
}
|
||||
|
||||
// ── cron_tick() (2.2 PR-073) ────────────────────────────────────────────
|
||||
|
||||
private static function set_modes( ?array $modes ): void {
|
||||
$cache = ( new ReflectionClass( WPDO_Mode_Manager::class ) )->getProperty( 'cache' );
|
||||
$cache->setAccessible( true );
|
||||
$cache->setValue( null, $modes );
|
||||
}
|
||||
|
||||
public function test_the_daily_tick_samples_entities_that_write_to_flat(): void {
|
||||
self::set_modes( array( 'post' => 'disabled', 'user' => 'dual_write', 'term' => 'disabled', 'comment' => 'disabled' ) );
|
||||
try {
|
||||
TMDO_Drift_Check::cron_tick();
|
||||
} finally {
|
||||
self::set_modes( null );
|
||||
}
|
||||
|
||||
$status = get_option( TMDO_Drift_Check::OPTION );
|
||||
$this->assertSame( TMDO_Drift_Check::CRON_SAMPLE, $status['user']['dc_grp']['sample'] );
|
||||
$this->assertSame( 2, $status['user']['dc_grp']['diff'], 'the sample covers all 7 fixture users' );
|
||||
$this->assertArrayNotHasKey( 'post', $status );
|
||||
}
|
||||
|
||||
public function test_the_daily_tick_skips_entities_that_do_not_write_to_flat(): void {
|
||||
self::set_modes( array( 'post' => 'disabled', 'user' => 'disabled', 'term' => 'disabled', 'comment' => 'disabled' ) );
|
||||
try {
|
||||
TMDO_Drift_Check::cron_tick();
|
||||
} finally {
|
||||
self::set_modes( null );
|
||||
}
|
||||
|
||||
$this->assertFalse( get_option( TMDO_Drift_Check::OPTION ) );
|
||||
}
|
||||
|
||||
public function test_the_daily_tick_runs_on_the_daily_health_check_hook(): void {
|
||||
$source = (string) file_get_contents( WPDO_PLUGIN_DIR . 'includes/class-tmdo-core.php' );
|
||||
|
||||
$this->assertStringContainsString( "add_action( 'wpdo_daily_health_check', array( 'TMDO_Drift_Check', 'cron_tick' ) );", $source );
|
||||
}
|
||||
|
||||
public function test_rejects_an_unknown_group(): void {
|
||||
$this->expectException( InvalidArgumentException::class );
|
||||
TMDO_Drift_Check::run( 'user', 'no_such_group' );
|
||||
|
||||
Reference in New Issue
Block a user