github.com/google/osv-scalibr@v0.4.1/extractor/filesystem/language/dotnet/depsjson/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 depsjson_test 16 17 import ( 18 "testing" 19 20 "github.com/google/go-cmp/cmp" 21 "github.com/google/osv-scalibr/extractor/filesystem/language/dotnet/depsjson" 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 *depsjson.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: &depsjson.Metadata{PackageName: "some-package"}, 44 p: nil, 45 want: nil, 46 }, 47 { 48 desc: "set_metadata", 49 m: &depsjson.Metadata{PackageName: "some-package"}, 50 p: &pb.Package{Name: "some-package"}, 51 want: &pb.Package{ 52 Name: "some-package", 53 Metadata: &pb.Package_DepsjsonMetadata{ 54 DepsjsonMetadata: &pb.DEPSJSONMetadata{ 55 PackageName: "some-package", 56 }, 57 }, 58 }, 59 }, 60 { 61 desc: "override_metadata", 62 m: &depsjson.Metadata{PackageName: "another-package"}, 63 p: &pb.Package{ 64 Name: "some-package", 65 Metadata: &pb.Package_DepsjsonMetadata{ 66 DepsjsonMetadata: &pb.DEPSJSONMetadata{ 67 PackageName: "some-package", 68 }, 69 }, 70 }, 71 want: &pb.Package{ 72 Name: "some-package", 73 Metadata: &pb.Package_DepsjsonMetadata{ 74 DepsjsonMetadata: &pb.DEPSJSONMetadata{ 75 PackageName: "another-package", 76 }, 77 }, 78 }, 79 }, 80 { 81 desc: "set_all_fields", 82 m: &depsjson.Metadata{ 83 PackageName: "some-package", 84 PackageVersion: "1.0.0", 85 Type: "package", 86 }, 87 p: &pb.Package{Name: "some-package"}, 88 want: &pb.Package{ 89 Name: "some-package", 90 Metadata: &pb.Package_DepsjsonMetadata{ 91 DepsjsonMetadata: &pb.DEPSJSONMetadata{ 92 PackageName: "some-package", 93 PackageVersion: "1.0.0", 94 Type: "package", 95 }, 96 }, 97 }, 98 }, 99 } 100 101 for _, tc := range testCases { 102 t.Run(tc.desc, func(t *testing.T) { 103 p := proto.Clone(tc.p).(*pb.Package) 104 tc.m.SetProto(p) 105 opts := []cmp.Option{ 106 protocmp.Transform(), 107 } 108 if diff := cmp.Diff(tc.want, p, opts...); diff != "" { 109 t.Errorf("Metatadata{%+v}.SetProto(%+v): (-want +got):\n%s", tc.m, tc.p, diff) 110 } 111 112 // Test the reverse conversion for completeness. 113 114 if tc.p == nil && tc.want == nil { 115 return 116 } 117 118 got := depsjson.ToStruct(p.GetDepsjsonMetadata()) 119 if diff := cmp.Diff(tc.m, got); diff != "" { 120 t.Errorf("ToStruct(%+v): (-want +got):\n%s", p.GetDepsjsonMetadata(), diff) 121 } 122 }) 123 } 124 } 125 126 func TestToStruct(t *testing.T) { 127 testCases := []struct { 128 desc string 129 m *pb.DEPSJSONMetadata 130 want *depsjson.Metadata 131 }{ 132 { 133 desc: "nil", 134 m: nil, 135 want: nil, 136 }, 137 { 138 desc: "some_fields", 139 m: &pb.DEPSJSONMetadata{ 140 PackageName: "some-package", 141 }, 142 want: &depsjson.Metadata{ 143 PackageName: "some-package", 144 }, 145 }, 146 { 147 desc: "all_fields", 148 m: &pb.DEPSJSONMetadata{ 149 PackageName: "some-package", 150 PackageVersion: "1.0.0", 151 Type: "package", 152 }, 153 want: &depsjson.Metadata{ 154 PackageName: "some-package", 155 PackageVersion: "1.0.0", 156 Type: "package", 157 }, 158 }, 159 } 160 161 for _, tc := range testCases { 162 t.Run(tc.desc, func(t *testing.T) { 163 got := depsjson.ToStruct(tc.m) 164 if diff := cmp.Diff(tc.want, got); diff != "" { 165 t.Errorf("ToStruct(%+v): (-want +got):\n%s", tc.m, diff) 166 } 167 168 if tc.m == nil { 169 return 170 } 171 172 // Test the reverse conversion for completeness. 173 174 gotP := &pb.Package{} 175 wantP := &pb.Package{ 176 Metadata: &pb.Package_DepsjsonMetadata{ 177 DepsjsonMetadata: tc.m, 178 }, 179 } 180 got.SetProto(gotP) 181 opts := []cmp.Option{ 182 protocmp.Transform(), 183 } 184 if diff := cmp.Diff(wantP, gotP, opts...); diff != "" { 185 t.Errorf("Metatadata{%+v}.SetProto(%+v): (-want +got):\n%s", got, wantP, diff) 186 } 187 }) 188 } 189 }