1 image.test public ImageStyleFloodProtection::testFloodProtection()

Check the number of images that can be generated simultaneously.

File

core/modules/image/tests/image.test, line 1929
Tests for image.module.

Class

ImageStyleFloodProtection
Tests the functions for generating paths and URLs for image styles.

Code

public function testFloodProtection() {
  // Copy sample images.
  $files = $this->backdropGetTestFiles('image');
  $file = reset($files);
  $image1 = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
  $image2 = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
  $image3 = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
  $image4 = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
  $image5 = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);
  $image6 = file_unmanaged_copy($file->uri, 'public://', FILE_EXISTS_RENAME);

  // Check that the default value of 5 max images is respected.
  for ($n = 0; $n < 6; $n++) {
    $flood_lock_name = image_style_flood_lock_name();
    if ($n < 5) {
      $this->assertTrue(!empty($flood_lock_name), 'Lock ' . ($n + 1) . ' acquired for generating images.');
    }
    else {
      $this->assertFalse($flood_lock_name, 'Lock ' . ($n + 1) . ' correctly not acquired');
    }
  }

  // Release all locks created in the calls to image_style_flood_lock_name().
  lock_release_all();

  // Reduce the threshold down to 2 unauthorized images at a time.
  config_set('system.core', 'image_style_flood_limit', 2);

  // The image_module_test_wait_effect effect has a 5 second delay on it. Make
  // 3 simultaneous requests and check that the 3rd one returns a 403.
  $images = array(
    image_style_url($this->style_name, $image1),
    image_style_url($this->style_name, $image2),
    image_style_url($this->style_name, $image3),
  );

  // Remove the allowlist to test unauthorized requests.
  $added_uris = &image_style_add_allowed_uri();
  $added_uris = array();

  // Without the allowlist, only 2 unauthorized requests should be allowed.
  $this->assertMultiStyleGenerated($images, 2);

  // Make the list again, this time saving the allowlist immediately.
  $images = array(
    image_style_url($this->style_name, $image1),
    image_style_url($this->style_name, $image2),
    image_style_url($this->style_name, $image3),
    image_style_url($this->style_name, $image4),
    image_style_url($this->style_name, $image5),
    image_style_url($this->style_name, $image6),
  );
  // Save the allowlist.
  image_style_save_allowed_uris();

  // Now all of these images should be allowed.
  $this->assertMultiStyleGenerated($images, 6);
}