test_utils.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. '''
  2. this file is part of "El Botadero"
  3. copyright 2018 Rodrigo Garcia <strysg@riseup.net>
  4. AGPL liberated.
  5. '''
  6. import os
  7. import tempfile
  8. import random
  9. import pytest
  10. from botadero import create_app
  11. from botadero.shared import globalParams
  12. from flask import current_app
  13. # NOTA: para ver los mensajes en print usar: pytest -s
  14. def test_listaDeArchivos(db):
  15. from botadero.utils import listaDeArchivos, categorias
  16. # categorias
  17. try:
  18. listaCategorias = categorias()
  19. for categoria in listaCategorias:
  20. lista = listaDeArchivos(categoria)
  21. print ('lista obtenida:', str(lista))
  22. for l in lista:
  23. print (l)
  24. #assert len(lista) > 0
  25. except:
  26. print ('Error listando archivos')
  27. assert 1 == 0
  28. def test_hashArchivo_sinAceleracion(db):
  29. from botadero.utils import hashArchivo
  30. archivo = os.path.join(os.path.abspath(os.curdir),
  31. 'tests', 'fixtures', 'archivos', '1.txt')
  32. hexdigest = hashArchivo(archivo)
  33. print ('hash sin aceleracion 1.txt', hexdigest)
  34. assert hexdigest == '6e07f20f10664b06c50faa52dd5fad44d0e4461d'
  35. archivo = os.path.join(os.path.abspath(os.curdir),
  36. 'tests', 'fixtures', 'archivos', 'pingüino.jpg')
  37. hexdigest = hashArchivo(archivo)
  38. print ('hash sin aceleracion pingüino.jpg', hexdigest)
  39. assert hexdigest == 'dce3c92b190dfd3a4a3d82b31f360ded041dcdfa'
  40. # archivo grande
  41. archivo = os.path.join(os.path.abspath(os.curdir),
  42. 'tests', 'fixtures', 'archivos',
  43. 'pasto1.jpg')
  44. hexdigest = hashArchivo(archivo)
  45. print ('hash sin aceleracion pasto1.jpg', hexdigest)
  46. assert hexdigest == '1da479d184c1cf9a7d8df498c842ab258912a482'
  47. def test_hashArchivo_conAceleracion(db):
  48. from botadero.utils import hashArchivo
  49. # archivo chico
  50. archivo = os.path.join(os.path.abspath(os.curdir),
  51. 'tests', 'fixtures', 'archivos', '1.txt')
  52. hexdigest = hashArchivo(archivo, accelerateHash=True)
  53. print ('hash con aceleracion 1.txt', hexdigest)
  54. assert hexdigest == '6e07f20f10664b06c50faa52dd5fad44d0e4461d'
  55. # archivo mediano
  56. archivo = os.path.join(os.path.abspath(os.curdir),
  57. 'tests', 'fixtures', 'archivos', 'pingüino.jpg')
  58. hexdigest = hashArchivo(archivo, accelerateHash=True)
  59. print ('hash con aceleracion pingüino.jpg', hexdigest)
  60. assert hexdigest == 'dce3c92b190dfd3a4a3d82b31f360ded041dcdfa'
  61. # archivo grande
  62. archivo = os.path.join(os.path.abspath(os.curdir),
  63. 'tests', 'fixtures', 'archivos',
  64. 'pasto1.jpg')
  65. hexdigest = hashArchivo(archivo, accelerateHash=True)
  66. print ('hash con aceleracion pasto.jpg', hexdigest)
  67. assert hexdigest == '04433af3f8541ea34903e6e3cbda075a953cd6f2'
  68. def test_registrarArchivo(db):
  69. from botadero.utils import registrarArchivo
  70. from botadero.database.models import Archivo
  71. nombreYRuta = crearArchivoPrueba()
  72. registrado = registrarArchivo(nombreYRuta)
  73. print ('ARchivo registrado:', str(registrado))
  74. assert registrado is not None
  75. assert Archivo.query.filter_by(name=registrado.name).first() is not None
  76. def test_existeArchivoEnBD(db):
  77. from botadero.utils import existeArchivo, registrarArchivo
  78. from botadero.database.models import Archivo
  79. nombreYRuta = crearArchivoPrueba()
  80. registrado = registrarArchivo(nombreYRuta)
  81. assert existeArchivo(nombreYRuta) is not None
  82. nombreYRuta = crearArchivoPrueba()
  83. assert existeArchivo(nombreYRuta) is None
  84. def test_borrarArchivo(db):
  85. from botadero.utils import existeArchivo, registrarArchivo, borrarArchivo
  86. from botadero.database.models import Archivo
  87. nombreYRuta = crearArchivoPrueba()
  88. registrado = registrarArchivo(nombreYRuta)
  89. assert existeArchivo(nombreYRuta) is not None
  90. assert borrarArchivo(nombreYRuta) is True
  91. assert existeArchivo(nombreYRuta) is None
  92. def test_descargarAchivo(db):
  93. from botadero.utils import descargarArchivo, registrarArchivo
  94. from botadero.database.models import Archivo
  95. nombreYRuta = crearArchivoPrueba()
  96. registrado = registrarArchivo(nombreYRuta)
  97. assert descargarArchivo(cat='', nombreArchivo=nombreYRuta) is not None
  98. a = Archivo.query.filter_by(path=nombreYRuta).first()
  99. assert a.downloads == 1
  100. def test_hashPassword():
  101. from botadero.utils import hashPassword, checkHashedPassword
  102. hashed = hashPassword('abeced')
  103. assert checkHashedPassword('abeced', hashed) is True
  104. def test_crearArchivoConPassword(db):
  105. from botadero.utils import hashPassword, checkHashedPassword
  106. from botadero.utils import registrarArchivo, comprobarPassword
  107. from botadero.utils import descargarArchivo, borrarArchivo, existeArchivo
  108. nombreYRuta = crearArchivoPrueba()
  109. hashedPassword = hashPassword('123456')
  110. registrado = registrarArchivo(nombreYRuta, hashedPassword=hashedPassword)
  111. assert descargarArchivo(cat='', nombreArchivo=nombreYRuta) is not None
  112. assert comprobarPassword(nombreYRuta, '123456')
  113. assert borrarArchivo(nombreYRuta) is True
  114. assert existeArchivo(nombreYRuta) is None
  115. # @pytest.fixture
  116. # def test_crearHtmlListado_forzado(db):
  117. # #flaskr.app.config['TESTING'] = True
  118. # print ('listadoooooooooooooooo')
  119. # from botadero.database.models import HtmlPage
  120. # from botadero.utils import crearHtmlListado, sincronizarArchivos
  121. # l1, l2 = sincronizarArchivos()
  122. # html_page = crearHtmlListado(categoria='Misc', force=True)
  123. # assert flask.request.path == '/'
  124. # assert flask.request.args['name'] == 'Peter'
  125. # #flaskr_app.config['SERVER_NAME'] = 'local'
  126. # print('------------------------html---------')
  127. # print ('test_crearHtmlListado_forzado:', str(html_page))
  128. # assert html_page is not None
  129. # utils para pruebas
  130. def crearArchivoPrueba(numCadenas=5000):
  131. db_fd, db_path = tempfile.mkstemp(suffix='.txt')
  132. with open(db_path, 'w') as file:
  133. i = int(numCadenas)
  134. cont = ''
  135. while i > 10:
  136. cont += ',' + str(random.randint(1,i))
  137. i -= 1
  138. file.write(cont)
  139. return db_path