// Copyright 2023 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package arch import ( "encoding/base64" "io" "os" "testing" "testing/fstest" "time" packages_module "code.gitea.io/gitea/modules/packages" "github.com/mholt/archiver/v3" "github.com/stretchr/testify/assert" ) const pkginfo = `# Generated by makepkg 6.0.2 # using fakeroot version 1.31 pkgname = zstd pkgbase = zstd pkgver = 1.5.5-1 pkgdesc = Zstandard - Fast real-time compression algorithm url = https://facebook.github.io/zstd/ builddate = 1681646714 packager = Jelle van der Waa size = 1500453 arch = x86_64 license = BSD license = GPL2 provides = libzstd.so=1-64 depend = glibc depend = gcc-libs depend = zlib depend = xz depend = lz4 makedepend = cmake makedepend = gtest makedepend = ninja ` const pkgdesc = `%FILENAME% zstd-1.5.5-1-x86_64.pkg.tar.zst %NAME% zstd %BASE% zstd %VERSION% 1.5.5-1 %DESC% Zstandard - Fast real-time compression algorithm %CSIZE% 401 %ISIZE% 1500453 %MD5SUM% 5016660ef3d9aa148a7b72a08d3df1b2 %SHA256SUM% 9fa4ede47e35f5971e4f26ecadcbfb66ab79f1d638317ac80334a3362dedbabd %URL% https://facebook.github.io/zstd/ %LICENSE% BSD GPL2 %ARCH% x86_64 %BUILDDATE% 1681646714 %PACKAGER% Jelle van der Waa %PROVIDES% libzstd.so=1-64 %DEPENDS% glibc gcc-libs zlib xz lz4 %MAKEDEPENDS% cmake gtest ninja ` const dbarchive = "H4sIAAAAAAAA/0rLzEnVS60oYaAhMDAwMDA3NwfTBgYG6LSBgYEpEtuAwcDQwMzUgEHBgJaOgoHS4pLEIgYDiu1C99wQASmlubmVA+2IUTAKRsEoGAV0B4AAAAD//2VF3KIACAAA" func TestMetadata(t *testing.T) { fs := fstest.MapFS{ "pkginfo": &fstest.MapFile{ Data: []byte(pkginfo), Mode: os.ModePerm, ModTime: time.Now(), }, } info, err := fs.Stat("pkginfo") assert.NoError(t, err) file, err := fs.Open("pkginfo") assert.NoError(t, err) buf, err := packages_module.NewHashedBuffer() assert.NoError(t, err) archive := archiver.NewTarZstd() archive.Create(buf) n, err := archiver.NameInArchive(info, ".PKGINFO", ".PKGINFO") assert.NoError(t, err) err = archive.Write(archiver.File{ FileInfo: archiver.FileInfo{ FileInfo: info, CustomName: n, }, ReadCloser: file, }) file.Close() archive.Close() assert.NoError(t, err) md, err := ParseMetadata("zstd-1.5.5-1-x86_64.pkg.tar.zst", "archlinux", buf) assert.NoError(t, err) assert.Equal(t, md.Name, "zstd") assert.Equal(t, md.Base, "zstd") assert.Equal(t, md.Version, "1.5.5-1") assert.Equal(t, md.Description, "Zstandard - Fast real-time compression algorithm") assert.Equal(t, md.ProjectURL, "https://facebook.github.io/zstd/") assert.Equal(t, md.BuildDate, int64(1681646714)) assert.Equal(t, md.Packager, "Jelle van der Waa ") assert.Equal(t, md.InstalledSize, int64(1500453)) assert.Equal(t, md.Arch, []string{"x86_64"}) assert.Equal(t, md.License, []string{"BSD", "GPL2"}) assert.Equal(t, md.Provides, []string{"libzstd.so=1-64"}) assert.Equal(t, md.Depends, []string{"glibc", "gcc-libs", "zlib", "xz", "lz4"}) assert.Equal(t, md.MakeDepends, []string{"cmake", "gtest", "ninja"}) } func TestDescString(t *testing.T) { md := &DbDesc{ Filename: "zstd-1.5.5-1-x86_64.pkg.tar.zst", Name: "zstd", Base: "zstd", Version: "1.5.5-1", Description: "Zstandard - Fast real-time compression algorithm", CompressedSize: 401, InstalledSize: 1500453, MD5: "5016660ef3d9aa148a7b72a08d3df1b2", SHA256: "9fa4ede47e35f5971e4f26ecadcbfb66ab79f1d638317ac80334a3362dedbabd", ProjectURL: "https://facebook.github.io/zstd/", BuildDate: 1681646714, Packager: "Jelle van der Waa ", Provides: []string{"libzstd.so=1-64"}, License: []string{"BSD", "GPL2"}, Arch: []string{"x86_64"}, Depends: []string{"glibc", "gcc-libs", "zlib", "xz", "lz4"}, MakeDepends: []string{"cmake", "gtest", "ninja"}, } desc := md.String() assert.Equal(t, pkgdesc, desc) } func TestDatabase(t *testing.T) { db, err := CreatePacmanDb(map[string][]byte{ "file.ext": []byte("dummy"), }) assert.NoError(t, err) actual, err := io.ReadAll(db) assert.NoError(t, err) expected, err := base64.RawStdEncoding.DecodeString(dbarchive) assert.NoError(t, err) assert.Equal(t, expected, actual) }