Chris@0: drupalCreateUser(['ban IP addresses']); Chris@0: $this->drupalLogin($admin_user); Chris@0: $this->drupalGet('admin/config/people/ban'); Chris@18: $connection = Database::getConnection(); Chris@0: Chris@0: // Ban a valid IP address. Chris@0: $edit = []; Chris@0: $edit['ip'] = '1.2.3.3'; Chris@0: $this->drupalPostForm('admin/config/people/ban', $edit, t('Add')); Chris@0: $ip = db_query("SELECT iid from {ban_ip} WHERE ip = :ip", [':ip' => $edit['ip']])->fetchField(); Chris@0: $this->assertTrue($ip, 'IP address found in database.'); Chris@0: $this->assertRaw(t('The IP address %ip has been banned.', ['%ip' => $edit['ip']]), 'IP address was banned.'); Chris@0: Chris@0: // Try to block an IP address that's already blocked. Chris@0: $edit = []; Chris@0: $edit['ip'] = '1.2.3.3'; Chris@0: $this->drupalPostForm('admin/config/people/ban', $edit, t('Add')); Chris@0: $this->assertText(t('This IP address is already banned.')); Chris@0: Chris@0: // Try to block a reserved IP address. Chris@0: $edit = []; Chris@0: $edit['ip'] = '255.255.255.255'; Chris@0: $this->drupalPostForm('admin/config/people/ban', $edit, t('Add')); Chris@0: $this->assertText(t('Enter a valid IP address.')); Chris@0: Chris@0: // Try to block a reserved IP address. Chris@0: $edit = []; Chris@0: $edit['ip'] = 'test.example.com'; Chris@0: $this->drupalPostForm('admin/config/people/ban', $edit, t('Add')); Chris@0: $this->assertText(t('Enter a valid IP address.')); Chris@0: Chris@0: // Submit an empty form. Chris@0: $edit = []; Chris@0: $edit['ip'] = ''; Chris@0: $this->drupalPostForm('admin/config/people/ban', $edit, t('Add')); Chris@0: $this->assertText(t('Enter a valid IP address.')); Chris@0: Chris@0: // Pass an IP address as a URL parameter and submit it. Chris@0: $submit_ip = '1.2.3.4'; Chris@0: $this->drupalPostForm('admin/config/people/ban/' . $submit_ip, [], t('Add')); Chris@0: $ip = db_query("SELECT iid from {ban_ip} WHERE ip = :ip", [':ip' => $submit_ip])->fetchField(); Chris@0: $this->assertTrue($ip, 'IP address found in database'); Chris@0: $this->assertRaw(t('The IP address %ip has been banned.', ['%ip' => $submit_ip]), 'IP address was banned.'); Chris@0: Chris@0: // Submit your own IP address. This fails, although it works when testing Chris@0: // manually. Chris@0: // TODO: On some systems this test fails due to a bug/inconsistency in cURL. Chris@0: // $edit = array(); Chris@0: // $edit['ip'] = \Drupal::request()->getClientIP(); Chris@0: // $this->drupalPostForm('admin/config/people/ban', $edit, t('Save')); Chris@0: // $this->assertText(t('You may not ban your own IP address.')); Chris@0: Chris@0: // Test duplicate ip address are not present in the 'blocked_ips' table. Chris@0: // when they are entered programmatically. Chris@0: $banIp = new BanIpManager($connection); Chris@0: $ip = '1.0.0.0'; Chris@0: $banIp->banIp($ip); Chris@0: $banIp->banIp($ip); Chris@0: $banIp->banIp($ip); Chris@18: $query = $connection->select('ban_ip', 'bip'); Chris@0: $query->fields('bip', ['iid']); Chris@0: $query->condition('bip.ip', $ip); Chris@0: $ip_count = $query->execute()->fetchAll(); Chris@0: $this->assertEqual(1, count($ip_count)); Chris@0: $ip = ''; Chris@0: $banIp->banIp($ip); Chris@0: $banIp->banIp($ip); Chris@18: $query = $connection->select('ban_ip', 'bip'); Chris@0: $query->fields('bip', ['iid']); Chris@0: $query->condition('bip.ip', $ip); Chris@0: $ip_count = $query->execute()->fetchAll(); Chris@0: $this->assertEqual(1, count($ip_count)); Chris@0: } Chris@0: Chris@0: }