Files
libopenapi/index/map_index_nodes_test.go
2023-11-25 10:10:51 -05:00

87 lines
2.4 KiB
Go

// Copyright 2023 Princess B33f Heavy Industries / Dave Shanley
// SPDX-License-Identifier: MIT
package index
import (
"github.com/pb33f/libopenapi/utils"
"github.com/stretchr/testify/assert"
"github.com/vmware-labs/yaml-jsonpath/pkg/yamlpath"
"gopkg.in/yaml.v3"
"os"
"reflect"
"testing"
)
func TestSpecIndex_MapNodes(t *testing.T) {
petstore, _ := os.ReadFile("../test_specs/petstorev3.json")
var rootNode yaml.Node
_ = yaml.Unmarshal(petstore, &rootNode)
index := NewSpecIndexWithConfig(&rootNode, CreateOpenAPIIndexConfig())
<-index.nodeMapCompleted
// look up a node and make sure they match exactly (same pointer)
path, _ := yamlpath.NewPath("$.paths./pet.put")
nodes, _ := path.Find(&rootNode)
keyNode, valueNode := utils.FindKeyNodeTop("operationId", nodes[0].Content)
mappedKeyNode, _ := index.GetNode(keyNode.Line, keyNode.Column)
mappedValueNode, _ := index.GetNode(valueNode.Line, valueNode.Column)
assert.Equal(t, keyNode, mappedKeyNode)
assert.Equal(t, valueNode, mappedValueNode)
// make sure the pointers are the same
p1 := reflect.ValueOf(keyNode).Pointer()
p2 := reflect.ValueOf(mappedKeyNode).Pointer()
assert.Equal(t, p1, p2)
// check missing line
var ok bool
mappedKeyNode, ok = index.GetNode(999, 999)
assert.False(t, ok)
assert.Nil(t, mappedKeyNode)
mappedKeyNode, ok = index.GetNode(12, 999)
assert.False(t, ok)
assert.Nil(t, mappedKeyNode)
index.nodeMap[15] = nil
mappedKeyNode, ok = index.GetNode(15, 999)
assert.False(t, ok)
assert.Nil(t, mappedKeyNode)
}
func BenchmarkSpecIndex_MapNodes(b *testing.B) {
petstore, _ := os.ReadFile("../test_specs/petstorev3.json")
var rootNode yaml.Node
_ = yaml.Unmarshal(petstore, &rootNode)
path, _ := yamlpath.NewPath("$.paths./pet.put")
for i := 0; i < b.N; i++ {
index := NewSpecIndexWithConfig(&rootNode, CreateOpenAPIIndexConfig())
<-index.nodeMapCompleted
// look up a node and make sure they match exactly (same pointer)
nodes, _ := path.Find(&rootNode)
keyNode, valueNode := utils.FindKeyNodeTop("operationId", nodes[0].Content)
mappedKeyNode, _ := index.GetNode(keyNode.Line, keyNode.Column)
mappedValueNode, _ := index.GetNode(valueNode.Line, valueNode.Column)
assert.Equal(b, keyNode, mappedKeyNode)
assert.Equal(b, valueNode, mappedValueNode)
// make sure the pointers are the same
p1 := reflect.ValueOf(keyNode).Pointer()
p2 := reflect.ValueOf(mappedKeyNode).Pointer()
assert.Equal(b, p1, p2)
}
}