async.test.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. const bcrypt = require('../bcrypt');
  2. test('salt_length', done => {
  3. expect.assertions(1);
  4. bcrypt.genSalt(10, function (err, salt) {
  5. expect(salt).toHaveLength(29);
  6. done();
  7. });
  8. })
  9. test('salt_only_cb', () => {
  10. expect.assertions(1);
  11. expect(() => {
  12. bcrypt.genSalt((err, salt) => {
  13. });
  14. }).not.toThrow();
  15. })
  16. test('salt_rounds_is_string_number', done => {
  17. expect.assertions(2);
  18. bcrypt.genSalt('10', void 0, function (err, salt) {
  19. expect(err instanceof Error).toBe(true)
  20. expect(err.message).toBe('rounds must be a number')
  21. done();
  22. });
  23. })
  24. test('salt_rounds_is_string_non_number', done => {
  25. expect.assertions(2);
  26. bcrypt.genSalt('z', function (err, salt) {
  27. expect(err instanceof Error).toBe(true)
  28. expect(err.message).toBe('rounds must be a number')
  29. done();
  30. });
  31. })
  32. test('salt_minor', done => {
  33. expect.assertions(3);
  34. bcrypt.genSalt(10, 'a', function (err, value) {
  35. expect(value).toHaveLength(29);
  36. const [_, minor, salt] = value.split('$');
  37. expect(minor).toEqual('2a');
  38. expect(salt).toEqual('10');
  39. done();
  40. });
  41. })
  42. test('salt_minor_b', done => {
  43. expect.assertions(3);
  44. bcrypt.genSalt(10, 'b', function (err, value) {
  45. expect(value).toHaveLength(29);
  46. const [_, minor, salt] = value.split('$');
  47. expect(minor).toEqual('2b');
  48. expect(salt).toEqual('10');
  49. done();
  50. });
  51. })
  52. test('hash', done => {
  53. expect.assertions(2);
  54. bcrypt.genSalt(10, function (err, salt) {
  55. bcrypt.hash('password', salt, function (err, res) {
  56. expect(res).toBeDefined();
  57. expect(err).toBeUndefined();
  58. done();
  59. });
  60. });
  61. })
  62. test('hash_rounds', done => {
  63. expect.assertions(1);
  64. bcrypt.hash('bacon', 8, function (err, hash) {
  65. expect(bcrypt.getRounds(hash)).toEqual(8);
  66. done();
  67. });
  68. })
  69. test('hash_empty_strings', done => {
  70. expect.assertions(1);
  71. bcrypt.genSalt(10, function (err, salt) {
  72. bcrypt.hash('', salt, function (err, res) {
  73. expect(res).toBeDefined();
  74. done();
  75. });
  76. });
  77. })
  78. test('hash_fails_with_empty_salt', done => {
  79. expect.assertions(1);
  80. bcrypt.hash('', '', function (err, res) {
  81. expect(err.message).toBe('Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue')
  82. done();
  83. });
  84. })
  85. test('hash_no_params', done => {
  86. expect.assertions(1);
  87. bcrypt.hash(function (err, hash) {
  88. expect(err.message).toBe('data must be a string or Buffer and salt must either be a salt string or a number of rounds')
  89. done();
  90. });
  91. })
  92. test('hash_one_param', done => {
  93. expect.assertions(1);
  94. bcrypt.hash('password', function (err, hash) {
  95. expect(err.message).toBe('data must be a string or Buffer and salt must either be a salt string or a number of rounds');
  96. done();
  97. });
  98. })
  99. test('hash_salt_validity', done => {
  100. expect.assertions(2);
  101. bcrypt.hash('password', '$2a$10$somesaltyvaluertsetrse', function (err, enc) {
  102. expect(err).toBeUndefined();
  103. bcrypt.hash('password', 'some$value', function (err, enc) {
  104. expect(err.message).toBe("Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue");
  105. done();
  106. });
  107. });
  108. })
  109. test('verify_salt', done => {
  110. expect.assertions(2);
  111. bcrypt.genSalt(10, function (err, value) {
  112. const [_, version, rounds] = value.split('$');
  113. expect(version).toEqual('2b');
  114. expect(rounds).toEqual('10');
  115. done();
  116. });
  117. })
  118. test('verify_salt_min_rounds', done => {
  119. expect.assertions(2);
  120. bcrypt.genSalt(1, function (err, value) {
  121. const [_, version, rounds] = value.split('$');
  122. expect(version).toEqual('2b');
  123. expect(rounds).toEqual('04');
  124. done();
  125. });
  126. })
  127. test('verify_salt_max_rounds', done => {
  128. expect.assertions(2);
  129. bcrypt.genSalt(100, function (err, value) {
  130. const [_, version, rounds] = value.split('$');
  131. expect(version).toEqual('2b');
  132. expect(rounds).toEqual('31');
  133. done();
  134. });
  135. })
  136. test('hash_compare', done => {
  137. expect.assertions(2);
  138. bcrypt.genSalt(10, function (err, salt) {
  139. bcrypt.hash("test", salt, function (err, hash) {
  140. bcrypt.compare("test", hash, function (err, res) {
  141. expect(hash).toBeDefined();
  142. bcrypt.compare("blah", hash, function (err, res) {
  143. expect(res).toBe(false);
  144. done();
  145. });
  146. });
  147. });
  148. });
  149. })
  150. test('hash_compare_empty_strings', done => {
  151. expect.assertions(2);
  152. const hash = bcrypt.hashSync("test", bcrypt.genSaltSync(10));
  153. bcrypt.compare("", hash, function (err, res) {
  154. expect(res).toEqual(false)
  155. bcrypt.compare("", "", function (err, res) {
  156. expect(res).toEqual(false);
  157. done();
  158. });
  159. });
  160. })
  161. test('hash_compare_invalid_strings', done => {
  162. expect.assertions(2);
  163. const fullString = 'envy1362987212538';
  164. const hash = '$2a$10$XOPbrlUPQdwdJUpSrIF6X.LbE14qsMmKGhM1A8W9iqaG3vv1BD7WC';
  165. const wut = ':';
  166. bcrypt.compare(fullString, hash, function (err, res) {
  167. expect(res).toBe(true);
  168. bcrypt.compare(fullString, wut, function (err, res) {
  169. expect(res).toBe(false);
  170. done();
  171. });
  172. });
  173. })
  174. test('compare_no_params', done => {
  175. expect.assertions(1);
  176. bcrypt.compare(function (err, hash) {
  177. expect(err.message).toBe('data and hash arguments required');
  178. done();
  179. });
  180. })
  181. test('hash_compare_one_param', done => {
  182. expect.assertions(1);
  183. bcrypt.compare('password', function (err, hash) {
  184. expect(err.message).toBe('data and hash arguments required');
  185. done();
  186. });
  187. })