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 }