github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/apk_metadata_test.go (about) 1 package pkg 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestApkMetadata_UnmarshalJSON(t *testing.T) { 12 tests := []struct { 13 name string 14 input string 15 want ApkMetadata 16 wantErr require.ErrorAssertionFunc 17 }{ 18 { 19 name: "empty", 20 input: "{}", 21 want: ApkMetadata{}, 22 }, 23 { 24 name: "string array dependencies", 25 input: `{ 26 "package": "scanelf", 27 "originPackage": "pax-utils", 28 "maintainer": "Natanael Copa <ncopa@alpinelinux.org>", 29 "version": "1.3.4-r0", 30 "license": "GPL-2.0-only", 31 "architecture": "x86_64", 32 "url": "https://wiki.gentoo.org/wiki/Hardened/PaX_Utilities", 33 "description": "Scan ELF binaries for stuff", 34 "size": 36745, 35 "installedSize": 94208, 36 "pullChecksum": "Q1Gcqe+ND8DFOlhM3R0o5KyZjR2oE=", 37 "gitCommitOfApkPort": "d7ae612a3cc5f827289d915783b4cbf8c7207947", 38 "files": [ 39 { 40 "path": "/usr" 41 } 42 ], 43 "pullDependencies": ["foo", "bar"] 44 }`, 45 want: ApkMetadata{ 46 Package: "scanelf", 47 OriginPackage: "pax-utils", 48 Maintainer: "Natanael Copa <ncopa@alpinelinux.org>", 49 Version: "1.3.4-r0", 50 Architecture: "x86_64", 51 URL: "https://wiki.gentoo.org/wiki/Hardened/PaX_Utilities", 52 Description: "Scan ELF binaries for stuff", 53 Size: 36745, 54 InstalledSize: 94208, 55 Dependencies: []string{"foo", "bar"}, 56 Checksum: "Q1Gcqe+ND8DFOlhM3R0o5KyZjR2oE=", 57 GitCommit: "d7ae612a3cc5f827289d915783b4cbf8c7207947", 58 Files: []ApkFileRecord{{Path: "/usr"}}, 59 }, 60 }, 61 { 62 name: "single string dependencies", 63 input: `{ 64 "package": "scanelf", 65 "originPackage": "pax-utils", 66 "maintainer": "Natanael Copa <ncopa@alpinelinux.org>", 67 "version": "1.3.4-r0", 68 "license": "GPL-2.0-only", 69 "architecture": "x86_64", 70 "url": "https://wiki.gentoo.org/wiki/Hardened/PaX_Utilities", 71 "description": "Scan ELF binaries for stuff", 72 "size": 36745, 73 "installedSize": 94208, 74 "pullChecksum": "Q1Gcqe+ND8DFOlhM3R0o5KyZjR2oE=", 75 "gitCommitOfApkPort": "d7ae612a3cc5f827289d915783b4cbf8c7207947", 76 "files": [ 77 { 78 "path": "/usr" 79 } 80 ], 81 "pullDependencies": "foo bar" 82 }`, 83 want: ApkMetadata{ 84 Package: "scanelf", 85 OriginPackage: "pax-utils", 86 Maintainer: "Natanael Copa <ncopa@alpinelinux.org>", 87 Version: "1.3.4-r0", 88 Architecture: "x86_64", 89 URL: "https://wiki.gentoo.org/wiki/Hardened/PaX_Utilities", 90 Description: "Scan ELF binaries for stuff", 91 Size: 36745, 92 InstalledSize: 94208, 93 Dependencies: []string{"foo", "bar"}, 94 Checksum: "Q1Gcqe+ND8DFOlhM3R0o5KyZjR2oE=", 95 GitCommit: "d7ae612a3cc5f827289d915783b4cbf8c7207947", 96 Files: []ApkFileRecord{{Path: "/usr"}}, 97 }, 98 }, 99 { 100 name: "null pullDependencies", 101 input: `{ 102 "pullDependencies": null 103 }`, 104 want: ApkMetadata{ 105 Dependencies: nil, 106 }, 107 }, 108 } 109 for _, tt := range tests { 110 t.Run(tt.name, func(t *testing.T) { 111 if tt.wantErr == nil { 112 tt.wantErr = require.NoError 113 } 114 var got ApkMetadata 115 err := json.Unmarshal([]byte(tt.input), &got) 116 tt.wantErr(t, err) 117 if err != nil { 118 return 119 } 120 assert.Equal(t, tt.want, got) 121 }) 122 } 123 } 124 125 func TestSpaceDelimitedStringSlice_UnmarshalJSON(t *testing.T) { 126 tests := []struct { 127 name string 128 data string 129 want []string 130 wantErr require.ErrorAssertionFunc 131 }{ 132 { 133 name: "empty string", 134 data: `""`, 135 want: nil, 136 }, 137 { 138 name: "single string with one elements", 139 data: `"foo"`, 140 want: []string{"foo"}, 141 }, 142 { 143 name: "single string with multiple elements", 144 data: `"foo bar"`, 145 want: []string{"foo", "bar"}, 146 }, 147 { 148 name: "string array", 149 data: `["foo", "bar"]`, 150 want: []string{"foo", "bar"}, 151 }, 152 } 153 for _, tt := range tests { 154 t.Run(tt.name, func(t *testing.T) { 155 if tt.wantErr == nil { 156 tt.wantErr = require.NoError 157 } 158 element := spaceDelimitedStringSlice{} 159 tt.wantErr(t, element.UnmarshalJSON([]byte(tt.data))) 160 assert.Equal(t, tt.want, []string(element)) 161 }) 162 } 163 }