function test_detects_if_exceeded_queue_size_limit_and_oldest_item_gt_15_mins()
{
$this->listener->get_sync_queue()->reset();
// first, let's try overriding the default queue limit
$this->assertEquals(Jetpack_Sync_Defaults::$default_max_queue_size, $this->listener->get_queue_size_limit());
$this->assertEquals(Jetpack_Sync_Defaults::$default_max_queue_lag, $this->listener->get_queue_lag_limit());
// set max queue size to 2 items
Jetpack_Sync_Settings::update_settings(array('max_queue_size' => 2));
// set max queue age to 3 seconds
Jetpack_Sync_Settings::update_settings(array('max_queue_lag' => 3));
$this->listener->set_defaults();
// should pick up new queue size limit
$this->assertEquals(2, $this->listener->get_queue_size_limit());
$this->assertEquals(3, $this->listener->get_queue_lag_limit());
$this->assertEquals(0, $this->listener->get_sync_queue()->size());
// now let's try exceeding the new limit
add_action('my_action', array($this->listener, 'action_handler'));
$this->listener->force_recheck_queue_limit();
do_action('my_action');
$this->assertEquals(1, $this->listener->get_sync_queue()->size());
$this->listener->force_recheck_queue_limit();
do_action('my_action');
$this->assertEquals(2, $this->listener->get_sync_queue()->size());
$this->listener->force_recheck_queue_limit();
do_action('my_action');
$this->assertEquals(3, $this->listener->get_sync_queue()->size());
// sleep for 3 seconds, so the oldest item in the queue is at least 3 seconds old -
// now our queue limit should kick in
sleep(3);
$this->listener->force_recheck_queue_limit();
do_action('my_action');
$this->assertEquals(3, $this->listener->get_sync_queue()->size());
remove_action('my_action', array($this->listener, 'action_handler'));
}