github.com/anchore/syft@v1.38.2/syft/format/syftjson/model/document_test.go (about) 1 package model 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 TestDocumentUnmarshalJSON_SchemaDetection(t *testing.T) { 12 tests := []struct { 13 name string 14 jsonData string 15 modes []int 16 }{ 17 { 18 name: "schema version 1.0.0 + anchorectl", 19 jsonData: `{ 20 "files": [ 21 {"metadata": {"mode": 493}}, 22 {"metadata": {"mode": 420}} 23 ], 24 "schema": {"version": "1.0.0"}, 25 "descriptor": { 26 "name": "anchorectl" 27 } 28 }`, 29 modes: []int{755, 644}, 30 }, 31 { 32 name: "schema version 1.0.0 + syft", 33 jsonData: `{ 34 "files": [ 35 {"metadata": {"mode": 755}}, 36 {"metadata": {"mode": 644}} 37 ], 38 "schema": {"version": "1.0.0"}, 39 "descriptor": { 40 "name": "syft" 41 } 42 }`, 43 modes: []int{755, 644}, 44 }, 45 { 46 name: "schema version 2.0.0 + anchorectl", 47 jsonData: `{ 48 "files": [ 49 {"metadata": {"mode": 755}}, 50 {"metadata": {"mode": 644}} 51 ], 52 "schema": {"version": "2.0.0"}, 53 "descriptor": { 54 "name": "anchorectl" 55 } 56 }`, 57 modes: []int{755, 644}, 58 }, 59 { 60 name: "missing schema version should not convert modes", 61 jsonData: `{ 62 "files": [ 63 {"metadata": {"mode": 755}} 64 ], 65 "schema": {} 66 }`, 67 modes: []int{755}, 68 }, 69 { 70 name: "empty files array with version 1.0.0", 71 jsonData: `{ 72 "files": [], 73 "schema": {"version": "1.0.0"}, 74 "descriptor": { 75 "name": "anchorectl" 76 } 77 }`, 78 }, 79 } 80 81 for _, tt := range tests { 82 t.Run(tt.name, func(t *testing.T) { 83 var doc Document 84 85 err := json.Unmarshal([]byte(tt.jsonData), &doc) 86 if err != nil { 87 t.Fatalf("Failed to unmarshal JSON: %v", err) 88 } 89 90 var modes []int 91 for _, file := range doc.Files { 92 modes = append(modes, file.Metadata.Mode) 93 } 94 95 require.Len(t, doc.Files, len(tt.modes), "Unexpected number of files") 96 assert.Equal(t, tt.modes, modes, "File modes do not match expected values") 97 }) 98 } 99 }