You are here

public function IpAddressBlockingTest::testIPAddressValidation in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/ban/tests/src/Functional/IpAddressBlockingTest.php \Drupal\Tests\ban\Functional\IpAddressBlockingTest::testIPAddressValidation()
  2. 10 core/modules/ban/tests/src/Functional/IpAddressBlockingTest.php \Drupal\Tests\ban\Functional\IpAddressBlockingTest::testIPAddressValidation()

Tests various user input to confirm correct validation and saving of data.

File

core/modules/ban/tests/src/Functional/IpAddressBlockingTest.php, line 31

Class

IpAddressBlockingTest
Tests IP address banning.

Namespace

Drupal\Tests\ban\Functional

Code

public function testIPAddressValidation() {

  // Create user.
  $admin_user = $this
    ->drupalCreateUser([
    'ban IP addresses',
  ]);
  $this
    ->drupalLogin($admin_user);
  $this
    ->drupalGet('admin/config/people/ban');
  $connection = Database::getConnection();

  // Ban a valid IP address.
  $edit = [];
  $edit['ip'] = '1.2.3.3';
  $this
    ->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
  $ip = $connection
    ->select('ban_ip', 'bi')
    ->fields('bi', [
    'iid',
  ])
    ->condition('ip', $edit['ip'])
    ->execute()
    ->fetchField();
  $this
    ->assertNotEmpty($ip, 'IP address found in database.');
  $this
    ->assertRaw(t('The IP address %ip has been banned.', [
    '%ip' => $edit['ip'],
  ]), 'IP address was banned.');

  // Try to block an IP address that's already blocked.
  $edit = [];
  $edit['ip'] = '1.2.3.3';
  $this
    ->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
  $this
    ->assertText(t('This IP address is already banned.'));

  // Try to block a reserved IP address.
  $edit = [];
  $edit['ip'] = '255.255.255.255';
  $this
    ->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
  $this
    ->assertText(t('Enter a valid IP address.'));

  // Try to block a reserved IP address.
  $edit = [];
  $edit['ip'] = 'test.example.com';
  $this
    ->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
  $this
    ->assertText(t('Enter a valid IP address.'));

  // Submit an empty form.
  $edit = [];
  $edit['ip'] = '';
  $this
    ->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
  $this
    ->assertText(t('Enter a valid IP address.'));

  // Pass an IP address as a URL parameter and submit it.
  $submit_ip = '1.2.3.4';
  $this
    ->drupalPostForm('admin/config/people/ban/' . $submit_ip, [], t('Add'));
  $ip = $connection
    ->select('ban_ip', 'bi')
    ->fields('bi', [
    'iid',
  ])
    ->condition('ip', $submit_ip)
    ->execute()
    ->fetchField();
  $this
    ->assertNotEmpty($ip, 'IP address found in database');
  $this
    ->assertRaw(t('The IP address %ip has been banned.', [
    '%ip' => $submit_ip,
  ]), 'IP address was banned.');

  // Submit your own IP address. This fails, although it works when testing
  // manually.
  // TODO: On some systems this test fails due to a bug/inconsistency in cURL.
  // $edit = array();
  // $edit['ip'] = \Drupal::request()->getClientIP();
  // $this->drupalPostForm('admin/config/people/ban', $edit, t('Save'));
  // $this->assertText(t('You may not ban your own IP address.'));
  // Test duplicate ip address are not present in the 'blocked_ips' table.
  // when they are entered programmatically.
  $banIp = new BanIpManager($connection);
  $ip = '1.0.0.0';
  $banIp
    ->banIp($ip);
  $banIp
    ->banIp($ip);
  $banIp
    ->banIp($ip);
  $query = $connection
    ->select('ban_ip', 'bip');
  $query
    ->fields('bip', [
    'iid',
  ]);
  $query
    ->condition('bip.ip', $ip);
  $ip_count = $query
    ->execute()
    ->fetchAll();
  $this
    ->assertCount(1, $ip_count);
  $ip = '';
  $banIp
    ->banIp($ip);
  $banIp
    ->banIp($ip);
  $query = $connection
    ->select('ban_ip', 'bip');
  $query
    ->fields('bip', [
    'iid',
  ]);
  $query
    ->condition('bip.ip', $ip);
  $ip_count = $query
    ->execute()
    ->fetchAll();
  $this
    ->assertCount(1, $ip_count);
}