Newer
Older
Sunfish / DOC / COMPILACION-Y-PRUEBAS.md
@Ivan Dominguez Ivan Dominguez 1 day ago 4 KB Pre 3.0 (definitions)

Compilación, pruebas y estado

Estado actual

  • Sunfish 3 en diseño: solo hay documentación (DOC/, AGENTS.md, README.md).
  • El código de la 2.0 sigue en el repositorio y no es la base de la 3: se reescribe desde cero (LEGACY-2.0.md).
  • Rama actual master en un remoto privado. El README ya da las instrucciones para GitHub (rama main), para cuando se publique allí.

Publicación prevista

Proyecto Salida Propiedades
Sunfish.Core biblioteca IsAotCompatible, TreatWarningsAsErrors para avisos de AOT/trimming
Sunfish.Cli sunfish-cli / sunfish-cli.exe PublishAot, InvariantGlobalization, StripSymbols
Sunfish.WinForms Sunfish.exe OutputType=WinExe, UseWindowsForms, PublishSingleFile, IncludeNativeLibrariesForSelfExtract; autocontenido + EnableCompressionInSingleFile o dependiente del framework (pendiente, ver ARQUITECTURA.md)
  • .NET 10. RID: win-x64, win-arm64, linux-x64, linux-arm64, osx-x64, osx-arm64.
  • Native AOT no compila de forma cruzada entre sistemas: cada sunfish-cli se compila en su sistema.

Requisitos

  • git y el SDK de .NET 10.
  • Para sunfish-cli (AOT):
    • Windows: Visual Studio Build Tools con «Desarrollo para escritorio con C++».
    • Linux: clang, ld y las cabeceras de zlib.
    • macOS: Xcode Command Line Tools.
  • Para Sunfish.exe: solo el SDK.

Scripts previstos

Script Función
build.ps1 Windows. Detecta el RID, comprueba requisitos (no instala nada; da el comando), usa el repo actual o clona/actualiza, publica Sunfish.exe y sunfish-cli.exe, los deja en la raíz y explica cómo poner sunfish-cli en el PATH. Pendiente: si faltan las herramientas de C++, ¿falla o compila solo la GUI?
build.sh Linux y macOS. Lo mismo para sunfish-cli (sugerencias para apt, dnf, pacman y brew)
run.cmd dotnet run de Sunfish.WinForms, para doble clic
run-cli.cmd dotnet run de Sunfish.Cli, para doble clic
run.sh dotnet run de Sunfish.Cli en Linux y macOS
  • Variable para forks: SUNFISH_REPO_URL.
  • Sin script publish aparte: build.* ya publica.
  • .gitignore: /Sunfish.exe, /sunfish-cli, /sunfish-cli.exe, /sunfish.conf, publish/.

Comandos previstos

dotnet build
dotnet test
dotnet run --project src/Sunfish.WinForms
dotnet run --project src/Sunfish.Cli -- [argumentos]
dotnet publish src/Sunfish.Cli -c Release -r <RID>
dotnet publish src/Sunfish.WinForms -c Release -r win-x64

Pruebas automáticas previstas (tests/Sunfish.Tests)

xUnit sobre net10.0, con InternalsVisibleTo desde Sunfish.Core. Las pruebas que tocan variables de entorno van en una colección sin paralelismo. Las de servidor arrancan SunfishHost en localhost con puertos libres y hablan con él por sockets.

Área Qué se prueba
HTTP HTTP/0.9, 1.0 sin Host, LF solo, cabeceras raras, límites, keep-alive, chunked, Range, 304, HEAD
Multipart Límites partidos entre búferes, varios ficheros, nombres con ruta de Windows o de Mac, subida cortada (no deja restos)
Locations Prefijo más largo, comparación por segmentos, ocultación, directorios virtuales, raíz con y sin menú, /$sunfish
Rutas .., %2e%2e, \, :, nombres reservados, enlaces que salen del share (con ramas por SO)
Permisos Matriz operación × opción de share × web/FTP/WebDAV; usuarios
HTML Escapado, entidades Latin-1, enlaces %XX en UTF-8, modo clásico sin <script>
CSRF / Auth Tokens válidos, caducados y de otra ruta; PBKDF2; caché; bloqueo por intentos
FTP Comandos, LIST en formato ls -l, MLSD, PASV/EPSV, PORT hacia otra IP rechazado, REST, TYPE A, juegos de caracteres
WebDAV PROPFIND 0/1, infinity rechazado, MKCOL, MOVE/COPY, LOCK simulado, XML con DTD rechazado
Mac Ver MAC-CLASICO.md
ZIP Lo generado se lee con System.IO.Compression; Stored y Deflate; nombres CP437/UTF-8
Config Lectura, escritura conservando comentarios, errores con línea, importación de sunfish2
QR Matrices frente a vectores de referencia

Pruebas manuales previstas

  • Navegadores modernos: web clásica y moderna, arrastrar y soltar, subida grande por trozos.
  • Windows 95/98 con sus navegadores de la época: listado, descargas, subidas por formulario, ZIP; ftp.exe en modo activo; Carpetas web (WebDAV).
  • Mac clásico (System 6/7, Mac OS 8/9) con navegadores y clientes FTP de la época: listado, descargas .bin/.hqx, subidas MacBinary/BinHex, nombres con acentos.
  • WebDAV moderno: Explorador de Windows, Finder de macOS, GVfs.
  • GUI: doble clic, arrastrar carpeta a la lista y sobre el .exe, bandeja, instancia única.
  • TUI en Windows Terminal, conhost, Linux, macOS y por SSH.
  • build.ps1 con | iex; build.sh en Linux y macOS.