github.com/google/osv-scalibr@v0.4.1/extractor/filesystem/os/flatpak/metadata/metadata_test.go (about) 1 // Copyright 2025 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package metadata_test 16 17 import ( 18 "testing" 19 20 "github.com/google/go-cmp/cmp" 21 "github.com/google/osv-scalibr/extractor/filesystem/os/flatpak/metadata" 22 "google.golang.org/protobuf/proto" 23 "google.golang.org/protobuf/testing/protocmp" 24 25 pb "github.com/google/osv-scalibr/binary/proto/scan_result_go_proto" 26 ) 27 28 func TestSetProto(t *testing.T) { 29 testCases := []struct { 30 desc string 31 m *metadata.Metadata 32 p *pb.Package 33 want *pb.Package 34 }{ 35 { 36 desc: "nil_metadata", 37 m: nil, 38 p: &pb.Package{Name: "some-package"}, 39 want: &pb.Package{Name: "some-package"}, 40 }, 41 { 42 desc: "nil_package", 43 m: &metadata.Metadata{ 44 PackageName: "name", 45 }, 46 p: nil, 47 want: nil, 48 }, 49 { 50 desc: "set_metadata", 51 m: &metadata.Metadata{ 52 PackageName: "name", 53 }, 54 p: &pb.Package{Name: "some-package"}, 55 want: &pb.Package{ 56 Name: "some-package", 57 Metadata: &pb.Package_FlatpakMetadata{ 58 FlatpakMetadata: &pb.FlatpakPackageMetadata{ 59 PackageName: "name", 60 }, 61 }, 62 }, 63 }, 64 { 65 desc: "override_metadata", 66 m: &metadata.Metadata{ 67 PackageName: "another-name", 68 }, 69 p: &pb.Package{ 70 Name: "some-package", 71 Metadata: &pb.Package_FlatpakMetadata{ 72 FlatpakMetadata: &pb.FlatpakPackageMetadata{ 73 PackageName: "name", 74 }, 75 }, 76 }, 77 want: &pb.Package{ 78 Name: "some-package", 79 Metadata: &pb.Package_FlatpakMetadata{ 80 FlatpakMetadata: &pb.FlatpakPackageMetadata{ 81 PackageName: "another-name", 82 }, 83 }, 84 }, 85 }, 86 { 87 desc: "set_all_fields", 88 m: &metadata.Metadata{ 89 PackageName: "name", 90 PackageID: "id", 91 PackageVersion: "version", 92 ReleaseDate: "release-date", 93 OSName: "os-name", 94 OSID: "os-id", 95 OSVersionID: "os-version-id", 96 OSBuildID: "os-build-id", 97 Developer: "developer", 98 }, 99 p: &pb.Package{Name: "some-package"}, 100 want: &pb.Package{ 101 Name: "some-package", 102 Metadata: &pb.Package_FlatpakMetadata{ 103 FlatpakMetadata: &pb.FlatpakPackageMetadata{ 104 PackageName: "name", 105 PackageId: "id", 106 PackageVersion: "version", 107 ReleaseDate: "release-date", 108 OsName: "os-name", 109 OsId: "os-id", 110 OsVersionId: "os-version-id", 111 OsBuildId: "os-build-id", 112 Developer: "developer", 113 }, 114 }, 115 }, 116 }, 117 } 118 119 for _, tc := range testCases { 120 t.Run(tc.desc, func(t *testing.T) { 121 p := proto.Clone(tc.p).(*pb.Package) 122 tc.m.SetProto(p) 123 opts := []cmp.Option{ 124 protocmp.Transform(), 125 } 126 if diff := cmp.Diff(tc.want, p, opts...); diff != "" { 127 t.Errorf("Metatadata{%+v}.SetProto(%+v): (-want +got):\n%s", tc.m, tc.p, diff) 128 } 129 130 // Test the reverse conversion for completeness. 131 132 if tc.p == nil && tc.want == nil { 133 return 134 } 135 136 got := metadata.ToStruct(p.GetFlatpakMetadata()) 137 if diff := cmp.Diff(tc.m, got); diff != "" { 138 t.Errorf("ToStruct(%+v): (-want +got):\n%s", p.GetFlatpakMetadata(), diff) 139 } 140 }) 141 } 142 } 143 144 func TestToStruct(t *testing.T) { 145 testCases := []struct { 146 desc string 147 m *pb.FlatpakPackageMetadata 148 want *metadata.Metadata 149 }{ 150 { 151 desc: "nil", 152 m: nil, 153 want: nil, 154 }, 155 { 156 desc: "some_fields", 157 m: &pb.FlatpakPackageMetadata{ 158 PackageName: "name", 159 }, 160 want: &metadata.Metadata{ 161 PackageName: "name", 162 }, 163 }, 164 { 165 desc: "all_fields", 166 m: &pb.FlatpakPackageMetadata{ 167 PackageName: "name", 168 PackageId: "id", 169 PackageVersion: "version", 170 ReleaseDate: "release-date", 171 OsName: "os-name", 172 OsId: "os-id", 173 OsVersionId: "os-version-id", 174 OsBuildId: "os-build-id", 175 Developer: "developer", 176 }, 177 want: &metadata.Metadata{ 178 PackageName: "name", 179 PackageID: "id", 180 PackageVersion: "version", 181 ReleaseDate: "release-date", 182 OSName: "os-name", 183 OSID: "os-id", 184 OSVersionID: "os-version-id", 185 OSBuildID: "os-build-id", 186 Developer: "developer", 187 }, 188 }, 189 } 190 191 for _, tc := range testCases { 192 t.Run(tc.desc, func(t *testing.T) { 193 got := metadata.ToStruct(tc.m) 194 if diff := cmp.Diff(tc.want, got); diff != "" { 195 t.Errorf("ToStruct(%+v): (-want +got):\n%s", tc.m, diff) 196 } 197 198 if tc.m == nil { 199 return 200 } 201 202 // Test the reverse conversion for completeness. 203 204 gotP := &pb.Package{} 205 wantP := &pb.Package{ 206 Metadata: &pb.Package_FlatpakMetadata{ 207 FlatpakMetadata: tc.m, 208 }, 209 } 210 got.SetProto(gotP) 211 opts := []cmp.Option{ 212 protocmp.Transform(), 213 } 214 if diff := cmp.Diff(wantP, gotP, opts...); diff != "" { 215 t.Errorf("Metatadata{%+v}.SetProto(%+v): (-want +got):\n%s", got, gotP, diff) 216 } 217 }) 218 } 219 }