sha1.test.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { expect } from 'chai'
  2. import { generateSHA1Hash } from '../../../../frontend/js/shared/utils/sha1'
  3. function generateRandomString(length) {
  4. const characters =
  5. 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
  6. let result = ''
  7. const charactersLength = characters.length
  8. for (let i = 0; i < length; i++) {
  9. result += characters.charAt(Math.floor(Math.random() * charactersLength))
  10. }
  11. return result
  12. }
  13. function generateMultipleRandomStrings(numStrings, maxLength) {
  14. const randomStrings = []
  15. for (let i = 0; i < numStrings; i++) {
  16. const length = Math.floor(Math.random() * maxLength)
  17. randomStrings.push(generateRandomString(length))
  18. }
  19. return [...new Set(randomStrings)]
  20. }
  21. describe('sha1', function () {
  22. describe('generateSHA1Hash', function () {
  23. const strings = generateMultipleRandomStrings(100, 1000)
  24. it('generates 40 base16 characters', function () {
  25. for (const str of strings)
  26. expect(generateSHA1Hash(str)).to.match(/^[\da-f]{40}$/)
  27. })
  28. it("doesn't have collisions on a small set", function () {
  29. expect(new Set(strings.map(generateSHA1Hash)).size).to.equal(
  30. strings.length
  31. )
  32. })
  33. it('sample string 1', function () {
  34. expect(generateSHA1Hash('sample string 1')).to.equal(
  35. '135028161629af5901ea2f15554730dc0de38a01'
  36. )
  37. })
  38. it('sample string 2', function () {
  39. expect(generateSHA1Hash('sample string 2')).to.equal(
  40. 'db9460374e49a7c737b609c2fb37302381f345d6'
  41. )
  42. })
  43. it('abc', function () {
  44. expect(generateSHA1Hash('abc')).to.equal(
  45. 'a9993e364706816aba3e25717850c26c9cd0d89d'
  46. )
  47. })
  48. it('generates a sha1 for an empty string', function () {
  49. expect(generateSHA1Hash('')).to.equal(
  50. 'da39a3ee5e6b4b0d3255bfef95601890afd80709'
  51. )
  52. })
  53. it('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq', function () {
  54. expect(
  55. generateSHA1Hash(
  56. 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'
  57. )
  58. ).to.equal('84983e441c3bd26ebaae4aa1f95129e5e54670f1')
  59. })
  60. it('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', function () {
  61. expect(
  62. generateSHA1Hash(
  63. 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'
  64. )
  65. ).to.equal('a49b2446a02c645bf419f995b67091253a04a259')
  66. })
  67. })
  68. })