github.com/verrazzano/verrazzano@v1.7.1/tools/vz/pkg/internal/util/json/json_test.go (about) 1 // Copyright (c) 2021, 2024, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 package json 4 5 import ( 6 "fmt" 7 "reflect" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/verrazzano/verrazzano/tools/vz/pkg/internal/util/log" 12 ) 13 14 // TestGetJSONDataFromFileGoodData Tests that we can get Json data from a valid Json file 15 // GIVEN a call to getJsonDataFromFile 16 // WHEN with a valid json file path 17 // THEN valid json data will be returned 18 func TestGetJSONDataFromFileGoodData(t *testing.T) { 19 logger := log.GetDebugEnabledLogger() 20 myData, err := GetJSONDataFromFile(logger, "../../test/json/nodes.json") 21 assert.Nil(t, err) 22 assert.NotNil(t, myData) 23 apiVersion, err := GetJSONValue(logger, myData, "apiVersion") 24 assert.Nil(t, err) 25 assert.NotNil(t, apiVersion) 26 assert.Equal(t, apiVersion, "v1") 27 28 resVersion, err := GetJSONValue(logger, myData, "metadata.resourceVersion") 29 assert.Nil(t, err) 30 assert.NotNil(t, resVersion) 31 fmt.Printf("metadata.resourceVersion: %s\n", resVersion) 32 33 names, err := GetJSONValue(logger, myData, "items.metadata.name") 34 assert.Nil(t, err) 35 assert.NotNil(t, names) 36 fmt.Printf("items.metadata.name: %s\n", names) 37 38 images, err := GetJSONValue(logger, myData, "items.status.images.names") 39 assert.Nil(t, err) 40 assert.NotNil(t, images) 41 fmt.Printf("items.status.images.names: %s\n", images) 42 43 // Get it again, this should find it in the cache 44 myData, err = GetJSONDataFromFile(logger, "../../test/json/nodes.json") 45 assert.Nil(t, err) 46 assert.NotNil(t, myData) 47 assert.True(t, cacheHits > 0) 48 49 // Make sure we can call debugMap 50 //debugMap(logger, myData.(map[string]interface{})) 51 } 52 53 // TestGetJSONDataFromFileFileNotFound Tests that we fail as expected when Json file is not found 54 // GIVEN a call to getJsonDataFromFile 55 // WHEN with an invalid json file path 56 // THEN we will fail as expected 57 func TestGetJSONDataFromFileFileNotFound(t *testing.T) { 58 logger := log.GetDebugEnabledLogger() 59 _, err := GetJSONDataFromFile(logger, "file-not-found.json") 60 assert.NotNil(t, err) 61 } 62 63 // TestGetJSONDataFromFileBadData Tests that we fail as expected when file with invalid Json format is supplied 64 // GIVEN a call to getJsonDataFromFile 65 // WHEN with a file with invalid Json data 66 // THEN we will fail as expected 67 func TestGetJSONDataFromFileBadData(t *testing.T) { 68 logger := log.GetDebugEnabledLogger() 69 _, err := GetJSONDataFromFile(logger, "../../test/json/bogus.json") 70 assert.NotNil(t, err) 71 } 72 73 // TestGetJSONArrays Tests that we can get Json array data valid Json files 74 // GIVEN a call to getJsonDataFromFile 75 // WHEN with a valid json file paths with array variants 76 // THEN valid json data will be returned 77 func TestGetJSONArrays(t *testing.T) { 78 logger := log.GetDebugEnabledLogger() 79 myData, err := GetJSONDataFromFile(logger, "../../test/json/basic_array.json") 80 assert.Nil(t, err) 81 assert.NotNil(t, myData) 82 value, err := GetJSONValue(logger, myData, "[1]") 83 assert.Nil(t, err) 84 assert.NotNil(t, value) 85 assert.Equal(t, value, "one") 86 arrayValue, err := GetJSONValue(logger, myData, "[]") 87 assert.Nil(t, err) 88 assert.NotNil(t, arrayValue) 89 assert.True(t, len(arrayValue.([]interface{})) == 4) 90 noNameArrayValue, err := GetJSONValue(logger, myData, "") 91 assert.Nil(t, err) 92 assert.NotNil(t, noNameArrayValue) 93 assert.True(t, len(noNameArrayValue.([]interface{})) == 4) 94 assert.True(t, reflect.DeepEqual(arrayValue, noNameArrayValue)) 95 } 96 97 // TODO: Add many more variants of data to these, file read access issues, etc...