annotate core/modules/ban/tests/src/Functional/IpAddressBlockingTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\ban\Functional;
Chris@0 4
Chris@0 5 use Drupal\Tests\BrowserTestBase;
Chris@0 6 use Drupal\Core\Database\Database;
Chris@0 7 use Drupal\ban\BanIpManager;
Chris@0 8
Chris@0 9 /**
Chris@0 10 * Tests IP address banning.
Chris@0 11 *
Chris@0 12 * @group ban
Chris@0 13 */
Chris@0 14 class IpAddressBlockingTest extends BrowserTestBase {
Chris@0 15
Chris@0 16 /**
Chris@0 17 * Modules to install.
Chris@0 18 *
Chris@0 19 * @var array
Chris@0 20 */
Chris@0 21 public static $modules = ['ban'];
Chris@0 22
Chris@0 23 /**
Chris@0 24 * Tests various user input to confirm correct validation and saving of data.
Chris@0 25 */
Chris@0 26 public function testIPAddressValidation() {
Chris@0 27 // Create user.
Chris@0 28 $admin_user = $this->drupalCreateUser(['ban IP addresses']);
Chris@0 29 $this->drupalLogin($admin_user);
Chris@0 30 $this->drupalGet('admin/config/people/ban');
Chris@18 31 $connection = Database::getConnection();
Chris@0 32
Chris@0 33 // Ban a valid IP address.
Chris@0 34 $edit = [];
Chris@0 35 $edit['ip'] = '1.2.3.3';
Chris@0 36 $this->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
Chris@0 37 $ip = db_query("SELECT iid from {ban_ip} WHERE ip = :ip", [':ip' => $edit['ip']])->fetchField();
Chris@0 38 $this->assertTrue($ip, 'IP address found in database.');
Chris@0 39 $this->assertRaw(t('The IP address %ip has been banned.', ['%ip' => $edit['ip']]), 'IP address was banned.');
Chris@0 40
Chris@0 41 // Try to block an IP address that's already blocked.
Chris@0 42 $edit = [];
Chris@0 43 $edit['ip'] = '1.2.3.3';
Chris@0 44 $this->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
Chris@0 45 $this->assertText(t('This IP address is already banned.'));
Chris@0 46
Chris@0 47 // Try to block a reserved IP address.
Chris@0 48 $edit = [];
Chris@0 49 $edit['ip'] = '255.255.255.255';
Chris@0 50 $this->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
Chris@0 51 $this->assertText(t('Enter a valid IP address.'));
Chris@0 52
Chris@0 53 // Try to block a reserved IP address.
Chris@0 54 $edit = [];
Chris@0 55 $edit['ip'] = 'test.example.com';
Chris@0 56 $this->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
Chris@0 57 $this->assertText(t('Enter a valid IP address.'));
Chris@0 58
Chris@0 59 // Submit an empty form.
Chris@0 60 $edit = [];
Chris@0 61 $edit['ip'] = '';
Chris@0 62 $this->drupalPostForm('admin/config/people/ban', $edit, t('Add'));
Chris@0 63 $this->assertText(t('Enter a valid IP address.'));
Chris@0 64
Chris@0 65 // Pass an IP address as a URL parameter and submit it.
Chris@0 66 $submit_ip = '1.2.3.4';
Chris@0 67 $this->drupalPostForm('admin/config/people/ban/' . $submit_ip, [], t('Add'));
Chris@0 68 $ip = db_query("SELECT iid from {ban_ip} WHERE ip = :ip", [':ip' => $submit_ip])->fetchField();
Chris@0 69 $this->assertTrue($ip, 'IP address found in database');
Chris@0 70 $this->assertRaw(t('The IP address %ip has been banned.', ['%ip' => $submit_ip]), 'IP address was banned.');
Chris@0 71
Chris@0 72 // Submit your own IP address. This fails, although it works when testing
Chris@0 73 // manually.
Chris@0 74 // TODO: On some systems this test fails due to a bug/inconsistency in cURL.
Chris@0 75 // $edit = array();
Chris@0 76 // $edit['ip'] = \Drupal::request()->getClientIP();
Chris@0 77 // $this->drupalPostForm('admin/config/people/ban', $edit, t('Save'));
Chris@0 78 // $this->assertText(t('You may not ban your own IP address.'));
Chris@0 79
Chris@0 80 // Test duplicate ip address are not present in the 'blocked_ips' table.
Chris@0 81 // when they are entered programmatically.
Chris@0 82 $banIp = new BanIpManager($connection);
Chris@0 83 $ip = '1.0.0.0';
Chris@0 84 $banIp->banIp($ip);
Chris@0 85 $banIp->banIp($ip);
Chris@0 86 $banIp->banIp($ip);
Chris@18 87 $query = $connection->select('ban_ip', 'bip');
Chris@0 88 $query->fields('bip', ['iid']);
Chris@0 89 $query->condition('bip.ip', $ip);
Chris@0 90 $ip_count = $query->execute()->fetchAll();
Chris@0 91 $this->assertEqual(1, count($ip_count));
Chris@0 92 $ip = '';
Chris@0 93 $banIp->banIp($ip);
Chris@0 94 $banIp->banIp($ip);
Chris@18 95 $query = $connection->select('ban_ip', 'bip');
Chris@0 96 $query->fields('bip', ['iid']);
Chris@0 97 $query->condition('bip.ip', $ip);
Chris@0 98 $ip_count = $query->execute()->fetchAll();
Chris@0 99 $this->assertEqual(1, count($ip_count));
Chris@0 100 }
Chris@0 101
Chris@0 102 }