github.com/google/osv-scalibr@v0.4.1/enricher/packagedeprecation/packagedeprecation_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 packagedeprecation_test 16 17 import ( 18 "testing" 19 20 grpcpb "deps.dev/api/v3alpha" 21 "github.com/google/go-cmp/cmp" 22 "github.com/google/osv-scalibr/enricher" 23 "github.com/google/osv-scalibr/enricher/packagedeprecation" 24 "github.com/google/osv-scalibr/extractor" 25 "github.com/google/osv-scalibr/inventory" 26 "github.com/google/osv-scalibr/purl" 27 ) 28 29 func TestEnrich(t *testing.T) { 30 deprecationMap := map[packagedeprecation.VersionKey]bool{ 31 packagedeprecation.VersionKey{System: grpcpb.System_CARGO, Name: "url", Version: "2.5.3"}: true, 32 packagedeprecation.VersionKey{System: grpcpb.System_CARGO, Name: "url", Version: "2.5.4"}: false, 33 } 34 35 fakeClient := newFakeClient(deprecationMap) 36 e := mustNew(t, &fakeClient) 37 38 tests := []struct { 39 name string 40 client packagedeprecation.Client 41 inv *inventory.Inventory 42 want *inventory.Inventory 43 wantErr error 44 }{ 45 { 46 name: "empty_inventory", 47 inv: &inventory.Inventory{}, 48 want: &inventory.Inventory{}, 49 }, 50 { 51 name: "unsupported_purl_type", 52 inv: &inventory.Inventory{ 53 Packages: []*extractor.Package{ 54 &extractor.Package{ 55 PURLType: "invalid", 56 Name: "invalid", 57 Version: "invalid", 58 }, 59 }, 60 }, 61 want: &inventory.Inventory{ 62 Packages: []*extractor.Package{ 63 &extractor.Package{ 64 PURLType: "invalid", 65 Name: "invalid", 66 Version: "invalid", 67 Deprecated: false, 68 }, 69 }, 70 }, 71 }, 72 { 73 name: "package_version_not_found_in_depsdev", 74 inv: &inventory.Inventory{ 75 Packages: []*extractor.Package{ 76 &extractor.Package{ 77 PURLType: purl.TypePyPi, 78 Name: "pip", 79 Version: "invalid", 80 }, 81 }}, 82 want: &inventory.Inventory{ 83 Packages: []*extractor.Package{ 84 &extractor.Package{ 85 PURLType: purl.TypePyPi, 86 Name: "pip", 87 Version: "invalid", 88 Deprecated: false, 89 }, 90 }, 91 }, 92 }, 93 { 94 name: "package_version_deprecated", 95 inv: &inventory.Inventory{ 96 Packages: []*extractor.Package{ 97 &extractor.Package{ 98 PURLType: purl.TypeCargo, 99 Name: "url", 100 Version: "2.5.3", 101 }, 102 }, 103 }, 104 want: &inventory.Inventory{ 105 Packages: []*extractor.Package{ 106 &extractor.Package{ 107 PURLType: purl.TypeCargo, 108 Name: "url", 109 Version: "2.5.3", 110 Deprecated: true, 111 }, 112 }, 113 }, 114 }, 115 { 116 name: "package_version_not_deprecated", 117 inv: &inventory.Inventory{ 118 Packages: []*extractor.Package{ 119 &extractor.Package{ 120 PURLType: purl.TypeCargo, 121 Name: "url", 122 Version: "2.5.4", 123 }, 124 }, 125 }, 126 want: &inventory.Inventory{ 127 Packages: []*extractor.Package{ 128 &extractor.Package{ 129 PURLType: purl.TypeCargo, 130 Name: "url", 131 Version: "2.5.4", 132 Deprecated: false, 133 }, 134 }, 135 }, 136 }, 137 } 138 139 for _, tc := range tests { 140 t.Run(tc.name, func(t *testing.T) { 141 enrichErr := e.Enrich(t.Context(), nil, tc.inv) 142 if enrichErr != nil { 143 t.Errorf("Enrich() returned error %v, want %v", enrichErr, tc.wantErr) 144 } 145 if diff := cmp.Diff(tc.want, tc.inv); diff != "" { 146 t.Errorf("Enrich() returned diff (-want +got):\n%s", diff) 147 } 148 }) 149 } 150 } 151 152 func mustNew(t *testing.T, client packagedeprecation.Client) enricher.Enricher { 153 t.Helper() 154 e := packagedeprecation.New().(*packagedeprecation.Enricher) 155 e.SetClient(client) 156 return e 157 }