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 }
|