gitea/modules/packages/arch/metadata_test.go
2023-10-12 11:43:33 -03:00

177 lines
3.4 KiB
Go

// Copyright 2023 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package arch
import (
"encoding/base64"
"io"
"os"
"testing"
"testing/fstest"
"time"
pkg_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 <jelle@archlinux.org>
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 <jelle@archlinux.org>
%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 := pkg_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 <jelle@archlinux.org>")
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.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"})
desc := md.String()
assert.Equal(t, desc, pkgdesc)
}
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)
}