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

197 lines
4.2 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"
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 <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 := 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 <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.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 <jelle@archlinux.org>",
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)
}