public function test_random_string() { // Make sure the generated string contains only human friendly characters and is 30 characters long $str = util::random_string(30); $this->assertTrue((bool) preg_match('/^([ABCDEFGHJKLMNPQRSTUVWXYZabcdefhjkmnprstuvwxyz23456789]{30})$/', $str)); // Make sure the generated string is 30 characters long $str = util::random_string(30, false, true); $this->assertTrue(strlen($str) === 30, 'random_string produced an invalid length string'); // Make sure the generated string is 120 characters long $str = util::random_string(120); $this->assertTrue(strlen($str) === 120, 'random_string produced an invalid length string'); // Make sure the string doesn't contain duplicate letters $str = util::random_string(53, true, false, true); $this->assertTrue(strlen($str) === 53, 'random_string produced an invalid length string'); $this->assertTrue(count(array_unique(str_split($str))) === strlen($str), 'random_string produced a string with duplicate characters'); // Longer length than characters available try { $str = util::random_string(55, true, false, true); $this->assertTrue(false); } catch (Exception $e) { $this->assertTrue(true); } // Test secure variant $str = util::secure_random_string(16); $this->assertTrue(strlen($str) === 16); // Longer length than characters available try { $str = util::secure_random_string(0); $this->assertTrue(false); } catch (Exception $e) { $this->assertTrue(true); } }