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  }