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...