code.gitea.io/gitea@v1.22.3/modules/packages/rpm/metadata_test.go (about)

     1  // Copyright 2023 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package rpm
     5  
     6  import (
     7  	"bytes"
     8  	"compress/gzip"
     9  	"encoding/base64"
    10  	"testing"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  func TestParsePackage(t *testing.T) {
    16  	base64RpmPackageContent := `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`
    44  	rpmPackageContent, err := base64.StdEncoding.DecodeString(base64RpmPackageContent)
    45  	assert.NoError(t, err)
    46  
    47  	zr, err := gzip.NewReader(bytes.NewReader(rpmPackageContent))
    48  	assert.NoError(t, err)
    49  
    50  	p, err := ParsePackage(zr)
    51  	assert.NotNil(t, p)
    52  	assert.NoError(t, err)
    53  
    54  	assert.Equal(t, "gitea-test", p.Name)
    55  	assert.Equal(t, "1.0.2-1", p.Version)
    56  	assert.NotNil(t, p.VersionMetadata)
    57  	assert.NotNil(t, p.FileMetadata)
    58  
    59  	assert.Equal(t, "MIT", p.VersionMetadata.License)
    60  	assert.Equal(t, "https://gitea.io", p.VersionMetadata.ProjectURL)
    61  	assert.Equal(t, "RPM package summary", p.VersionMetadata.Summary)
    62  	assert.Equal(t, "RPM package description", p.VersionMetadata.Description)
    63  
    64  	assert.Equal(t, "x86_64", p.FileMetadata.Architecture)
    65  	assert.Equal(t, "0", p.FileMetadata.Epoch)
    66  	assert.Equal(t, "1.0.2", p.FileMetadata.Version)
    67  	assert.Equal(t, "1", p.FileMetadata.Release)
    68  	assert.Empty(t, p.FileMetadata.Vendor)
    69  	assert.Equal(t, "KN4CK3R", p.FileMetadata.Packager)
    70  	assert.Equal(t, "gitea-test-1.0.2-1.src.rpm", p.FileMetadata.SourceRpm)
    71  	assert.Equal(t, "e44b1687d04b", p.FileMetadata.BuildHost)
    72  	assert.EqualValues(t, 1678225964, p.FileMetadata.BuildTime)
    73  	assert.EqualValues(t, 1678225964, p.FileMetadata.FileTime)
    74  	assert.EqualValues(t, 13, p.FileMetadata.InstalledSize)
    75  	assert.EqualValues(t, 272, p.FileMetadata.ArchiveSize)
    76  	assert.Empty(t, p.FileMetadata.Conflicts)
    77  	assert.Empty(t, p.FileMetadata.Obsoletes)
    78  
    79  	assert.ElementsMatch(
    80  		t,
    81  		[]*Entry{
    82  			{
    83  				Name:    "gitea-test",
    84  				Flags:   "EQ",
    85  				Version: "1.0.2",
    86  				Epoch:   "0",
    87  				Release: "1",
    88  			},
    89  			{
    90  				Name:    "gitea-test(x86-64)",
    91  				Flags:   "EQ",
    92  				Version: "1.0.2",
    93  				Epoch:   "0",
    94  				Release: "1",
    95  			},
    96  		},
    97  		p.FileMetadata.Provides,
    98  	)
    99  	assert.ElementsMatch(
   100  		t,
   101  		[]*Entry{
   102  			{
   103  				Name: "/bin/sh",
   104  			},
   105  			{
   106  				Name: "/bin/sh",
   107  			},
   108  			{
   109  				Name: "/bin/sh",
   110  			},
   111  			{
   112  				Name:    "rpmlib(CompressedFileNames)",
   113  				Flags:   "LE",
   114  				Version: "3.0.4",
   115  				Epoch:   "0",
   116  				Release: "1",
   117  			},
   118  			{
   119  				Name:    "rpmlib(FileDigests)",
   120  				Flags:   "LE",
   121  				Version: "4.6.0",
   122  				Epoch:   "0",
   123  				Release: "1",
   124  			},
   125  			{
   126  				Name:    "rpmlib(PayloadFilesHavePrefix)",
   127  				Flags:   "LE",
   128  				Version: "4.0",
   129  				Epoch:   "0",
   130  				Release: "1",
   131  			},
   132  			{
   133  				Name:    "rpmlib(PayloadIsXz)",
   134  				Flags:   "LE",
   135  				Version: "5.2",
   136  				Epoch:   "0",
   137  				Release: "1",
   138  			},
   139  		},
   140  		p.FileMetadata.Requires,
   141  	)
   142  	assert.ElementsMatch(
   143  		t,
   144  		[]*File{
   145  			{
   146  				Path:         "/usr/local/bin/hello",
   147  				IsExecutable: true,
   148  			},
   149  		},
   150  		p.FileMetadata.Files,
   151  	)
   152  	assert.ElementsMatch(
   153  		t,
   154  		[]*Changelog{
   155  			{
   156  				Author: "KN4CK3R <dummy@gitea.io>",
   157  				Date:   1678276800,
   158  				Text:   "- Changelog message.",
   159  			},
   160  		},
   161  		p.FileMetadata.Changelogs,
   162  	)
   163  }