/** * Parseo de nombres de artefacto de CloudRestoreAS. * * El nombre es lo que determina a qué plataforma y arquitectura corresponde cada binario. Si * el parseo falla en silencio, el artefacto queda invisible en el catálogo y el servidor * correspondiente nunca recibe la actualización — un síntoma muy difícil de diagnosticar. */ import { describe, expect, it } from 'vitest'; import { parseArtifactName } from './cras-sync'; describe('parseArtifactName', () => { it('reconoce el artefacto de Linux', () => { expect(parseArtifactName('CloudRestoreAS-1.1.0-linux-x86_64.tar.gz')).toEqual({ version: '1.1.0', platform: 'linux', arch: 'x86_64' }); }); it('traduce el token "win" del nombre a la plataforma "windows"', () => { // En el nombre se abrevia, pero el vocabulario del catálogo (y del CHECK de la tabla) // es el que reporta el agente: "windows". expect(parseArtifactName('CloudRestoreAS-1.1.0-win-x86_64.zip')).toEqual({ version: '1.1.0', platform: 'windows', arch: 'x86_64' }); }); it('acepta versiones de 1 a 4 componentes', () => { expect(parseArtifactName('CloudRestoreAS-2-linux-x86_64.tar.gz')?.version).toBe('2'); expect(parseArtifactName('CloudRestoreAS-26.7.1.4-linux-x86_64.tar.gz')?.version).toBe( '26.7.1.4' ); }); it('acepta otras arquitecturas y las normaliza a minúsculas', () => { expect(parseArtifactName('CloudRestoreAS-1.1.0-linux-arm64.tar.gz')?.arch).toBe('arm64'); expect(parseArtifactName('CloudRestoreAS-1.1.0-linux-ARM64.tar.gz')?.arch).toBe('arm64'); }); it('rechaza los archivos de verificación que se publican junto a los paquetes', () => { expect(parseArtifactName('SHA256SUMS')).toBeNull(); expect(parseArtifactName('release.json')).toBeNull(); }); it('rechaza nombres que no son artefactos de despliegue', () => { for (const name of [ 'CloudRestoreAS.exe', // binario crudo, no el paquete 'CloudRestoreAS-linux', // sin versión (esquema anterior) 'CloudRestoreAS-win.zip', // sin versión ni arch (esquema anterior) 'CloudRestoreAS-1.1.0-macos-arm64.tar.gz', // plataforma no soportada 'CloudRestoreAS-1.1.0-linux-x86_64.7z', // extensión inesperada 'CloudRestoreAS-1.0.0-rc1-linux-x86_64.tar.gz', // versión no comparable 'OtroProducto-1.1.0-linux-x86_64.tar.gz', '', ' ' ]) { expect(parseArtifactName(name), name).toBeNull(); } }); it('tolera espacios alrededor', () => { expect(parseArtifactName(' CloudRestoreAS-1.1.0-linux-x86_64.tar.gz ')?.version).toBe( '1.1.0' ); }); });