diff --git a/datamodel/high/base/contact_test.go b/datamodel/high/base/contact_test.go index b854eb5..a35be27 100644 --- a/datamodel/high/base/contact_test.go +++ b/datamodel/high/base/contact_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "fmt" lowmodel "github.com/pb33f/libopenapi/datamodel/low" lowbase "github.com/pb33f/libopenapi/datamodel/low/base" @@ -70,7 +71,7 @@ email: buckaroo@pb33f.io // build low var lowContact lowbase.Contact _ = lowmodel.BuildModel(cNode.Content[0], &lowContact) - _ = lowContact.Build(nil, cNode.Content[0], nil) + _ = lowContact.Build(context.Background(), nil, cNode.Content[0], nil) // build high highContact := NewContact(&lowContact) diff --git a/datamodel/high/base/dynamic_value_test.go b/datamodel/high/base/dynamic_value_test.go index bbd05e3..799be06 100644 --- a/datamodel/high/base/dynamic_value_test.go +++ b/datamodel/high/base/dynamic_value_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" lowbase "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/pb33f/libopenapi/index" @@ -116,7 +117,7 @@ func TestDynamicValue_MarshalYAMLInline(t *testing.T) { _ = yaml.Unmarshal([]byte(ymlSchema), &node) lowProxy := new(lowbase.SchemaProxy) - err := lowProxy.Build(nil, node.Content[0], idx) + err := lowProxy.Build(context.Background(), nil, node.Content[0], idx) assert.NoError(t, err) lowRef := low.NodeReference[*lowbase.SchemaProxy]{ @@ -160,7 +161,7 @@ func TestDynamicValue_MarshalYAMLInline_Error(t *testing.T) { _ = yaml.Unmarshal([]byte(ymlSchema), &node) lowProxy := new(lowbase.SchemaProxy) - err := lowProxy.Build(nil, node.Content[0], idx) + err := lowProxy.Build(context.Background(), nil, node.Content[0], idx) assert.NoError(t, err) lowRef := low.NodeReference[*lowbase.SchemaProxy]{ diff --git a/datamodel/high/base/example_test.go b/datamodel/high/base/example_test.go index a783c0a..81184d2 100644 --- a/datamodel/high/base/example_test.go +++ b/datamodel/high/base/example_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "fmt" lowmodel "github.com/pb33f/libopenapi/datamodel/low" lowbase "github.com/pb33f/libopenapi/datamodel/low/base" @@ -29,7 +30,7 @@ x-hack: code` var lowExample lowbase.Example _ = lowmodel.BuildModel(cNode.Content[0], &lowExample) - _ = lowExample.Build(&cNode, cNode.Content[0], nil) + _ = lowExample.Build(context.Background(), &cNode, cNode.Content[0], nil) // build high highExample := NewExample(&lowExample) @@ -59,7 +60,7 @@ func TestExtractExamples(t *testing.T) { var lowExample lowbase.Example _ = lowmodel.BuildModel(cNode.Content[0], &lowExample) - _ = lowExample.Build(nil, cNode.Content[0], nil) + _ = lowExample.Build(context.Background(), nil, cNode.Content[0], nil) examplesMap := make(map[lowmodel.KeyReference[string]]lowmodel.ValueReference[*lowbase.Example]) examplesMap[lowmodel.KeyReference[string]{ @@ -89,7 +90,7 @@ x-hack: code` _ = lowmodel.BuildModel(node.Content[0], &lowExample) // build out low-level example - _ = lowExample.Build(nil, node.Content[0], nil) + _ = lowExample.Build(context.Background(), nil, node.Content[0], nil) // create a new high-level example highExample := NewExample(&lowExample) diff --git a/datamodel/high/base/external_doc_test.go b/datamodel/high/base/external_doc_test.go index e4fd204..224e2a9 100644 --- a/datamodel/high/base/external_doc_test.go +++ b/datamodel/high/base/external_doc_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "fmt" lowmodel "github.com/pb33f/libopenapi/datamodel/low" lowbase "github.com/pb33f/libopenapi/datamodel/low/base" @@ -26,7 +27,7 @@ x-hack: code` var lowExt lowbase.ExternalDoc _ = lowmodel.BuildModel(cNode.Content[0], &lowExt) - _ = lowExt.Build(nil, cNode.Content[0], nil) + _ = lowExt.Build(context.Background(), nil, cNode.Content[0], nil) highExt := NewExternalDoc(&lowExt) @@ -61,7 +62,7 @@ x-hack: code` _ = lowmodel.BuildModel(node.Content[0], &lowExt) // build out low-level properties (like extensions) - _ = lowExt.Build(nil, node.Content[0], nil) + _ = lowExt.Build(context.Background(), nil, node.Content[0], nil) // create new high-level ExternalDoc highExt := NewExternalDoc(&lowExt) diff --git a/datamodel/high/base/info_test.go b/datamodel/high/base/info_test.go index 33e31b9..c510fd3 100644 --- a/datamodel/high/base/info_test.go +++ b/datamodel/high/base/info_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "fmt" "testing" @@ -32,7 +33,7 @@ x-cli-name: chicken cli` var lowInfo lowbase.Info _ = lowmodel.BuildModel(cNode.Content[0], &lowInfo) - _ = lowInfo.Build(nil, cNode.Content[0], nil) + _ = lowInfo.Build(context.Background(), nil, cNode.Content[0], nil) highInfo := NewInfo(&lowInfo) @@ -74,7 +75,7 @@ version: 1.2.3` // build out the low-level model var lowInfo lowbase.Info _ = lowmodel.BuildModel(&node, &lowInfo) - _ = lowInfo.Build(nil, node.Content[0], nil) + _ = lowInfo.Build(context.Background(), nil, node.Content[0], nil) // build the high level model highInfo := NewInfo(&lowInfo) @@ -97,7 +98,7 @@ url: https://opensource.org/licenses/MIT` // build out the low-level model var lowLicense lowbase.License _ = lowmodel.BuildModel(node.Content[0], &lowLicense) - _ = lowLicense.Build(nil, node.Content[0], nil) + _ = lowLicense.Build(context.Background(), nil, node.Content[0], nil) // build the high level model highLicense := NewLicense(&lowLicense) @@ -140,7 +141,7 @@ func TestInfo_Render(t *testing.T) { // build low var lowInfo lowbase.Info _ = lowmodel.BuildModel(cNode.Content[0], &lowInfo) - _ = lowInfo.Build(nil, cNode.Content[0], nil) + _ = lowInfo.Build(context.Background(), nil, cNode.Content[0], nil) // build high highInfo := NewInfo(&lowInfo) @@ -181,7 +182,7 @@ x-cake: // build low var lowInfo lowbase.Info _ = lowmodel.BuildModel(cNode.Content[0], &lowInfo) - _ = lowInfo.Build(nil, cNode.Content[0], nil) + _ = lowInfo.Build(context.Background(), nil, cNode.Content[0], nil) // build high highInfo := NewInfo(&lowInfo) diff --git a/datamodel/high/base/licence_test.go b/datamodel/high/base/licence_test.go index 1658298..152ca3b 100644 --- a/datamodel/high/base/licence_test.go +++ b/datamodel/high/base/licence_test.go @@ -4,6 +4,7 @@ package base import ( + "context" lowmodel "github.com/pb33f/libopenapi/datamodel/low" lowbase "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/stretchr/testify/assert" @@ -44,7 +45,7 @@ url: https://pb33f.io/not-real // build low var lowLicense lowbase.License _ = lowmodel.BuildModel(cNode.Content[0], &lowLicense) - _ = lowLicense.Build(nil, cNode.Content[0], nil) + _ = lowLicense.Build(context.Background(), nil, cNode.Content[0], nil) // build high highLicense := NewLicense(&lowLicense) @@ -92,7 +93,7 @@ func TestLicense_Render_IdentifierAndURL_Error(t *testing.T) { // build low var lowLicense lowbase.License _ = lowmodel.BuildModel(cNode.Content[0], &lowLicense) - err := lowLicense.Build(nil, cNode.Content[0], nil) + err := lowLicense.Build(context.Background(), nil, cNode.Content[0], nil) assert.Error(t, err) } diff --git a/datamodel/high/base/schema_proxy_test.go b/datamodel/high/base/schema_proxy_test.go index 38e98fd..e0018e6 100644 --- a/datamodel/high/base/schema_proxy_test.go +++ b/datamodel/high/base/schema_proxy_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" lowbase "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/pb33f/libopenapi/index" @@ -40,7 +41,7 @@ func TestSchemaProxy_MarshalYAML(t *testing.T) { _ = yaml.Unmarshal([]byte(ymlSchema), &node) lowProxy := new(lowbase.SchemaProxy) - err := lowProxy.Build(nil, node.Content[0], idx) + err := lowProxy.Build(context.Background(), nil, node.Content[0], idx) assert.NoError(t, err) lowRef := low.NodeReference[*lowbase.SchemaProxy]{ diff --git a/datamodel/high/base/schema_test.go b/datamodel/high/base/schema_test.go index 642489f..7f38439 100644 --- a/datamodel/high/base/schema_test.go +++ b/datamodel/high/base/schema_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "fmt" "github.com/pb33f/libopenapi/datamodel" "strings" @@ -50,7 +51,7 @@ func TestNewSchemaProxy(t *testing.T) { _ = yaml.Unmarshal([]byte(yml), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], idx) + err := sp.Build(context.Background(), nil, compNode.Content[0], idx) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -91,7 +92,7 @@ func TestNewSchemaProxyRender(t *testing.T) { _ = yaml.Unmarshal([]byte(yml), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], idx) + err := sp.Build(context.Background(), nil, compNode.Content[0], idx) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -270,7 +271,7 @@ $anchor: anchor` _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -344,7 +345,7 @@ func TestSchemaObjectWithAllOfSequenceOrder(t *testing.T) { } sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -481,7 +482,7 @@ required: [cake, fish]` _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -537,7 +538,7 @@ func TestSchemaProxy_GoLow(t *testing.T) { _ = yaml.Unmarshal([]byte(ymlSchema), &node) lowProxy := new(lowbase.SchemaProxy) - err := lowProxy.Build(nil, node.Content[0], idx) + err := lowProxy.Build(context.Background(), nil, node.Content[0], idx) assert.NoError(t, err) lowRef := low.NodeReference[*lowbase.SchemaProxy]{ @@ -562,7 +563,7 @@ func getHighSchema(t *testing.T, yml string) *Schema { // build out the low-level model var lowSchema lowbase.Schema assert.NoError(t, low.BuildModel(node.Content[0], &lowSchema)) - assert.NoError(t, lowSchema.Build(node.Content[0], nil)) + assert.NoError(t, lowSchema.Build(context.Background(), node.Content[0], nil)) // build the high level model return NewSchema(&lowSchema) @@ -723,7 +724,7 @@ properties: // build out the low-level model var lowSchema lowbase.Schema _ = low.BuildModel(node.Content[0], &lowSchema) - _ = lowSchema.Build(node.Content[0], nil) + _ = lowSchema.Build(context.Background(), node.Content[0], nil) // build the high level model highSchema := NewSchema(&lowSchema) @@ -752,7 +753,7 @@ properties: // build out the low-level model var lowSchema lowbase.SchemaProxy _ = low.BuildModel(node.Content[0], &lowSchema) - _ = lowSchema.Build(nil, node.Content[0], nil) + _ = lowSchema.Build(context.Background(), nil, node.Content[0], nil) // build the high level schema proxy highSchema := NewSchemaProxy(&low.NodeReference[*lowbase.SchemaProxy]{ @@ -812,7 +813,7 @@ allOf: _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -875,7 +876,7 @@ items: _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -937,7 +938,7 @@ xml: _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -966,7 +967,7 @@ func TestNewSchemaProxy_RenderSchemaCheckDiscriminatorMappingOrder(t *testing.T) _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -989,7 +990,7 @@ func TestNewSchemaProxy_CheckDefaultBooleanFalse(t *testing.T) { _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -1012,7 +1013,7 @@ func TestNewSchemaProxy_RenderAdditionalPropertiesFalse(t *testing.T) { _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -1056,7 +1057,7 @@ components: sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], idx) + err := sp.Build(context.Background(), nil, compNode.Content[0], idx) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -1108,7 +1109,7 @@ components: sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], idx) + err := sp.Build(context.Background(), nil, compNode.Content[0], idx) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -1177,7 +1178,7 @@ properties: _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -1200,7 +1201,7 @@ func TestSchema_RenderProxyWithConfig_3(t *testing.T) { _ = yaml.Unmarshal([]byte(testSpec), &compNode) sp := new(lowbase.SchemaProxy) - err := sp.Build(nil, compNode.Content[0], nil) + err := sp.Build(context.Background(), nil, compNode.Content[0], nil) assert.NoError(t, err) config := index.CreateOpenAPIIndexConfig() @@ -1234,7 +1235,7 @@ func TestSchema_RenderProxyWithConfig_Corrected_31(t *testing.T) { } idx := index.NewSpecIndexWithConfig(compNode.Content[0], config) - err := sp.Build(nil, compNode.Content[0], idx) + err := sp.Build(context.Background(), nil, compNode.Content[0], idx) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ @@ -1268,7 +1269,7 @@ func TestSchema_RenderProxyWithConfig_Corrected_3(t *testing.T) { } idx := index.NewSpecIndexWithConfig(compNode.Content[0], config) - err := sp.Build(nil, compNode.Content[0], idx) + err := sp.Build(context.Background(), nil, compNode.Content[0], idx) assert.NoError(t, err) lowproxy := low.NodeReference[*lowbase.SchemaProxy]{ diff --git a/datamodel/high/base/security_requirement_test.go b/datamodel/high/base/security_requirement_test.go index b2a4f4e..0152251 100644 --- a/datamodel/high/base/security_requirement_test.go +++ b/datamodel/high/base/security_requirement_test.go @@ -4,6 +4,7 @@ package base import ( + "context" lowmodel "github.com/pb33f/libopenapi/datamodel/low" lowbase "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/stretchr/testify/assert" @@ -28,7 +29,7 @@ cake: var lowExt lowbase.SecurityRequirement _ = lowmodel.BuildModel(cNode.Content[0], &lowExt) - _ = lowExt.Build(nil, cNode.Content[0], nil) + _ = lowExt.Build(context.Background(), nil, cNode.Content[0], nil) highExt := NewSecurityRequirement(&lowExt) diff --git a/datamodel/high/base/tag_test.go b/datamodel/high/base/tag_test.go index bf3b1b3..44ee50a 100644 --- a/datamodel/high/base/tag_test.go +++ b/datamodel/high/base/tag_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "fmt" "strings" "testing" @@ -28,7 +29,7 @@ x-hack: code` var lowTag lowbase.Tag _ = lowmodel.BuildModel(cNode.Content[0], &lowTag) - _ = lowTag.Build(nil, cNode.Content[0], nil) + _ = lowTag.Build(context.Background(), nil, cNode.Content[0], nil) highTag := NewTag(&lowTag) @@ -75,7 +76,7 @@ x-hack: code` // build out the low-level model var lowTag lowbase.Tag _ = lowmodel.BuildModel(node.Content[0], &lowTag) - _ = lowTag.Build(nil, node.Content[0], nil) + _ = lowTag.Build(context.Background(), nil, node.Content[0], nil) // build the high level tag highTag := NewTag(&lowTag) diff --git a/datamodel/high/v2/path_item_test.go b/datamodel/high/v2/path_item_test.go index 752d0b8..acb53c2 100644 --- a/datamodel/high/v2/path_item_test.go +++ b/datamodel/high/v2/path_item_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" v2 "github.com/pb33f/libopenapi/datamodel/low/v2" "github.com/pb33f/libopenapi/index" @@ -36,7 +37,7 @@ options: var n v2.PathItem _ = low.BuildModel(&idxNode, &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) r := NewPathItem(&n) diff --git a/datamodel/low/base/example_test.go b/datamodel/low/base/example_test.go index d19bee1..912172f 100644 --- a/datamodel/low/base/example_test.go +++ b/datamodel/low/base/example_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -26,7 +27,7 @@ x-cake: hot` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "hot", n.Summary.Value) assert.Equal(t, "cakes", n.Description.Value) @@ -52,7 +53,7 @@ x-cake: hot` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "hot", n.Summary.Value) assert.Equal(t, "cakes", n.Description.Value) @@ -79,7 +80,7 @@ value: err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "hot", n.Summary.Value) assert.Equal(t, "cakes", n.Description.Value) @@ -110,7 +111,7 @@ value: err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "hot", n.Summary.Value) assert.Equal(t, "cakes", n.Description.Value) @@ -142,7 +143,7 @@ func TestExample_Build_Success_MergeNode(t *testing.T) { err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "hot", n.Summary.Value) assert.Equal(t, "cakes", n.Description.Value) @@ -237,8 +238,8 @@ x-burger: nice` var rDoc Example _ = low.BuildModel(lNode.Content[0], &lDoc) _ = low.BuildModel(rNode.Content[0], &rDoc) - _ = lDoc.Build(nil, lNode.Content[0], nil) - _ = rDoc.Build(nil, rNode.Content[0], nil) + _ = lDoc.Build(context.Background(), nil, lNode.Content[0], nil) + _ = rDoc.Build(context.Background(), nil, rNode.Content[0], nil) assert.Equal(t, lDoc.Hash(), rDoc.Hash()) assert.Len(t, lDoc.GetExtensions(), 1) diff --git a/datamodel/low/base/external_doc_test.go b/datamodel/low/base/external_doc_test.go index fadd21a..1f48896 100644 --- a/datamodel/low/base/external_doc_test.go +++ b/datamodel/low/base/external_doc_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -23,7 +24,7 @@ func TestExternalDoc_FindExtension(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "cake", n.FindExtension("x-fish").Value) @@ -44,7 +45,7 @@ x-b33f: princess` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "https://pb33f.io", n.URL.Value) assert.Equal(t, "the ranch", n.Description.Value) @@ -73,8 +74,8 @@ description: the ranch` var rDoc ExternalDoc _ = low.BuildModel(lNode.Content[0], &lDoc) _ = low.BuildModel(rNode.Content[0], &rDoc) - _ = lDoc.Build(nil, lNode.Content[0], nil) - _ = rDoc.Build(nil, rNode.Content[0], nil) + _ = lDoc.Build(context.Background(), nil, lNode.Content[0], nil) + _ = rDoc.Build(context.Background(), nil, rNode.Content[0], nil) assert.Equal(t, lDoc.Hash(), rDoc.Hash()) assert.Len(t, lDoc.GetExtensions(), 1) diff --git a/datamodel/low/base/info_test.go b/datamodel/low/base/info_test.go index adc7378..c469a9f 100644 --- a/datamodel/low/base/info_test.go +++ b/datamodel/low/base/info_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "testing" "github.com/pb33f/libopenapi/datamodel/low" @@ -34,7 +35,7 @@ x-cli-name: pizza cli` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "pizza", n.Title.Value) @@ -61,13 +62,13 @@ x-cli-name: pizza cli` func TestContact_Build(t *testing.T) { n := &Contact{} - k := n.Build(nil, nil, nil) + k := n.Build(context.Background(), nil, nil, nil) assert.Nil(t, k) } func TestLicense_Build(t *testing.T) { n := &License{} - k := n.Build(nil, nil, nil) + k := n.Build(context.Background(), nil, nil, nil) assert.Nil(t, k) } @@ -107,8 +108,8 @@ x-b33f: princess` var rDoc Info _ = low.BuildModel(lNode.Content[0], &lDoc) _ = low.BuildModel(rNode.Content[0], &rDoc) - _ = lDoc.Build(nil, lNode.Content[0], nil) - _ = rDoc.Build(nil, rNode.Content[0], nil) + _ = lDoc.Build(context.Background(), nil, lNode.Content[0], nil) + _ = rDoc.Build(context.Background(), nil, rNode.Content[0], nil) assert.Equal(t, lDoc.Hash(), rDoc.Hash()) } diff --git a/datamodel/low/base/license_test.go b/datamodel/low/base/license_test.go index 9d29326..173825b 100644 --- a/datamodel/low/base/license_test.go +++ b/datamodel/low/base/license_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v3" @@ -70,7 +71,7 @@ description: the ranch` var lDoc License err := low.BuildModel(lNode.Content[0], &lDoc) - err = lDoc.Build(nil, lNode.Content[0], nil) + err = lDoc.Build(context.Background(), nil, lNode.Content[0], nil) assert.Error(t, err) assert.Equal(t, "license cannot have both a URL and an identifier, they are mutually exclusive", err.Error()) diff --git a/datamodel/low/base/schema_proxy_test.go b/datamodel/low/base/schema_proxy_test.go index 1f46046..964308e 100644 --- a/datamodel/low/base/schema_proxy_test.go +++ b/datamodel/low/base/schema_proxy_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v3" @@ -19,7 +20,7 @@ description: something` var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - err := sch.Build(&idxNode, idxNode.Content[0], nil) + err := sch.Build(context.Background(), &idxNode, idxNode.Content[0], nil) assert.NoError(t, err) assert.Equal(t, "db2a35dd6fb3d9481d0682571b9d687616bb2a34c1887f7863f0b2e769ca7b23", @@ -51,7 +52,7 @@ func TestSchemaProxy_Build_CheckRef(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - err := sch.Build(nil, idxNode.Content[0], nil) + err := sch.Build(context.Background(), nil, idxNode.Content[0], nil) assert.NoError(t, err) assert.True(t, sch.IsSchemaReference()) assert.Equal(t, "wat", sch.GetSchemaReference()) @@ -67,7 +68,7 @@ func TestSchemaProxy_Build_HashInline(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - err := sch.Build(nil, idxNode.Content[0], nil) + err := sch.Build(context.Background(), nil, idxNode.Content[0], nil) assert.NoError(t, err) assert.False(t, sch.IsSchemaReference()) assert.NotNil(t, sch.Schema()) @@ -89,7 +90,7 @@ x-common-definitions: var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - err := sch.Build(nil, idxNode.Content[0], nil) + err := sch.Build(context.Background(), nil, idxNode.Content[0], nil) assert.NoError(t, err) assert.Len(t, sch.Schema().Enum.Value, 3) assert.Equal(t, "The type of life cycle", sch.Schema().Description.Value) diff --git a/datamodel/low/base/schema_test.go b/datamodel/low/base/schema_test.go index 07fb966..cc971ae 100644 --- a/datamodel/low/base/schema_test.go +++ b/datamodel/low/base/schema_test.go @@ -1,13 +1,14 @@ package base import ( - "github.com/pb33f/libopenapi/datamodel" - "github.com/pb33f/libopenapi/datamodel/low" - "github.com/pb33f/libopenapi/index" - "github.com/pb33f/libopenapi/utils" - "github.com/stretchr/testify/assert" - "gopkg.in/yaml.v3" - "testing" + "context" + "github.com/pb33f/libopenapi/datamodel" + "github.com/pb33f/libopenapi/datamodel/low" + "github.com/pb33f/libopenapi/index" + "github.com/pb33f/libopenapi/utils" + "github.com/stretchr/testify/assert" + "gopkg.in/yaml.v3" + "testing" ) func test_get_schema_blob() string { @@ -165,7 +166,7 @@ func Test_Schema(t *testing.T) { mbErr := low.BuildModel(rootNode.Content[0], &sch) assert.NoError(t, mbErr) - schErr := sch.Build(rootNode.Content[0], nil) + schErr := sch.Build(context.Background(), rootNode.Content[0], nil) assert.NoError(t, schErr) assert.Equal(t, "something object", sch.Description.Value) assert.True(t, sch.AdditionalProperties.Value.B) @@ -341,7 +342,7 @@ func TestSchemaAllOfSequenceOrder(t *testing.T) { mbErr := low.BuildModel(rootNode.Content[0], &sch) assert.NoError(t, mbErr) - schErr := sch.Build(rootNode.Content[0], nil) + schErr := sch.Build(context.Background(), rootNode.Content[0], nil) assert.NoError(t, schErr) assert.Equal(t, "allOf sequence check", sch.Description.Value) @@ -361,13 +362,13 @@ func TestSchema_Hash(t *testing.T) { _ = yaml.Unmarshal([]byte(testSpec), &sc1n) sch1 := Schema{} _ = low.BuildModel(&sc1n, &sch1) - _ = sch1.Build(sc1n.Content[0], nil) + _ = sch1.Build(context.Background(), sc1n.Content[0], nil) var sc2n yaml.Node _ = yaml.Unmarshal([]byte(testSpec), &sc2n) sch2 := Schema{} _ = low.BuildModel(&sc2n, &sch2) - _ = sch2.Build(sc2n.Content[0], nil) + _ = sch2.Build(context.Background(), sc2n.Content[0], nil) assert.Equal(t, sch1.Hash(), sch2.Hash()) } @@ -379,13 +380,13 @@ func BenchmarkSchema_Hash(b *testing.B) { _ = yaml.Unmarshal([]byte(testSpec), &sc1n) sch1 := Schema{} _ = low.BuildModel(&sc1n, &sch1) - _ = sch1.Build(sc1n.Content[0], nil) + _ = sch1.Build(context.Background(), sc1n.Content[0], nil) var sc2n yaml.Node _ = yaml.Unmarshal([]byte(testSpec), &sc2n) sch2 := Schema{} _ = low.BuildModel(&sc2n, &sch2) - _ = sch2.Build(sc2n.Content[0], nil) + _ = sch2.Build(context.Background(), sc2n.Content[0], nil) for i := 0; i < b.N; i++ { assert.Equal(b, sch1.Hash(), sch2.Hash()) @@ -415,7 +416,7 @@ const: tasty` mbErr := low.BuildModel(rootNode.Content[0], &sch) assert.NoError(t, mbErr) - schErr := sch.Build(rootNode.Content[0], nil) + schErr := sch.Build(context.Background(), rootNode.Content[0], nil) assert.NoError(t, schErr) assert.Equal(t, "something object", sch.Description.Value) assert.Len(t, sch.Type.Value.B, 2) @@ -456,7 +457,7 @@ properties: _ = yaml.Unmarshal([]byte(yml), &idxNode) var n Schema - err := n.Build(idxNode.Content[0], idx) + err := n.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "this is something", n.FindProperty("aValue").Value.Schema().Description.Value) } @@ -482,7 +483,7 @@ properties: _ = yaml.Unmarshal([]byte(yml), &idxNode) var n Schema - err := n.Build(idxNode.Content[0], idx) + err := n.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -507,7 +508,7 @@ dependentSchemas: _ = yaml.Unmarshal([]byte(yml), &idxNode) var n Schema - err := n.Build(idxNode.Content[0], idx) + err := n.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -532,7 +533,7 @@ patternProperties: _ = yaml.Unmarshal([]byte(yml), &idxNode) var n Schema - err := n.Build(idxNode.Content[0], idx) + err := n.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -572,7 +573,7 @@ items: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, schErr) desc := "poly thing" @@ -619,7 +620,7 @@ items: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, schErr) } @@ -659,7 +660,7 @@ items: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, schErr) desc := "poly thing" @@ -706,7 +707,7 @@ items: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, schErr) } @@ -732,7 +733,7 @@ allOf: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, schErr) } @@ -758,7 +759,7 @@ allOf: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, schErr) } @@ -786,7 +787,7 @@ allOf: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, schErr) assert.Nil(t, sch.AllOf.Value[0].Value.Schema()) // child can't be resolved, so this will be nil. assert.Error(t, sch.AllOf.Value[0].Value.GetBuildError()) @@ -816,7 +817,7 @@ allOf: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, schErr) desc := "madness" @@ -847,7 +848,7 @@ allOf: err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - err = sch.Build(idxNode.Content[0], idx) + err = sch.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -875,7 +876,7 @@ func Test_Schema_Polymorphism_RefMadnessIllegal(t *testing.T) { err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, schErr) } @@ -907,7 +908,7 @@ func Test_Schema_RefMadnessIllegal_Circular(t *testing.T) { err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, schErr) } @@ -939,7 +940,7 @@ func Test_Schema_RefMadnessIllegal_Nonexist(t *testing.T) { err := low.BuildModel(&idxNode, &sch) assert.NoError(t, err) - schErr := sch.Build(idxNode.Content[0], idx) + schErr := sch.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, schErr) } @@ -964,7 +965,7 @@ func TestExtractSchema(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], idx) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.NotNil(t, res.Value) aValue := res.Value.Schema().FindProperty("aValue") @@ -980,7 +981,7 @@ schema: var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], nil) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], nil) assert.NoError(t, err) assert.NotNil(t, res.Value) sch := res.Value.Schema() @@ -996,7 +997,7 @@ schema: var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], nil) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], nil) assert.NoError(t, err) assert.NotNil(t, res.Value) sch := res.Value.Schema() @@ -1021,7 +1022,7 @@ func TestExtractSchema_Ref(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], idx) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.NotNil(t, res.Value) assert.Equal(t, "this is something", res.Value.Schema().Description.Value) @@ -1045,7 +1046,7 @@ func TestExtractSchema_Ref_Fail(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - _, err := ExtractSchema(idxNode.Content[0], idx) + _, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -1080,7 +1081,7 @@ func TestExtractSchema_CheckChildPropCircular(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], idx) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.NotNil(t, res.Value) @@ -1105,7 +1106,7 @@ func TestExtractSchema_RefRoot(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], idx) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.NotNil(t, res.Value) assert.Equal(t, "this is something", res.Value.Schema().Description.Value) @@ -1128,7 +1129,7 @@ func TestExtractSchema_RefRoot_Fail(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - _, err := ExtractSchema(idxNode.Content[0], idx) + _, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -1148,7 +1149,7 @@ func TestExtractSchema_RefRoot_Child_Fail(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - _, err := ExtractSchema(idxNode.Content[0], idx) + _, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -1169,7 +1170,7 @@ func TestExtractSchema_AdditionalPropertiesAsSchema(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], idx) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.NotNil(t, res.Value.Schema().AdditionalProperties.Value.A.Schema()) assert.Nil(t, err) @@ -1191,7 +1192,7 @@ func TestExtractSchema_DoNothing(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], idx) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.Nil(t, res) assert.Nil(t, err) } @@ -1219,7 +1220,7 @@ func TestExtractSchema_AdditionalProperties_Ref(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], idx) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.NotNil(t, res.Value.Schema().AdditionalProperties.Value.A.Schema()) assert.Nil(t, err) } @@ -1333,7 +1334,7 @@ func TestExtractSchema_OneOfRef(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, err := ExtractSchema(idxNode.Content[0], idx) + res, err := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "a frosty cold beverage can be coke or sprite", res.Value.Schema().OneOf.Value[0].Value.Schema().Description.Value) @@ -1426,8 +1427,8 @@ func TestSchema_Hash_Equal(t *testing.T) { _ = yaml.Unmarshal([]byte(left), &lNode) _ = yaml.Unmarshal([]byte(right), &rNode) - lDoc, _ := ExtractSchema(lNode.Content[0], nil) - rDoc, _ := ExtractSchema(rNode.Content[0], nil) + lDoc, _ := ExtractSchema(context.Background(), lNode.Content[0], nil) + rDoc, _ := ExtractSchema(context.Background(), rNode.Content[0], nil) assert.NotNil(t, lDoc) assert.NotNil(t, rDoc) @@ -1451,8 +1452,8 @@ func TestSchema_Hash_AdditionalPropsSlice(t *testing.T) { _ = yaml.Unmarshal([]byte(left), &lNode) _ = yaml.Unmarshal([]byte(right), &rNode) - lDoc, _ := ExtractSchema(lNode.Content[0], nil) - rDoc, _ := ExtractSchema(rNode.Content[0], nil) + lDoc, _ := ExtractSchema(context.Background(), lNode.Content[0], nil) + rDoc, _ := ExtractSchema(context.Background(), rNode.Content[0], nil) assert.NotNil(t, lDoc) assert.NotNil(t, rDoc) @@ -1476,8 +1477,8 @@ func TestSchema_Hash_AdditionalPropsSliceNoMap(t *testing.T) { _ = yaml.Unmarshal([]byte(left), &lNode) _ = yaml.Unmarshal([]byte(right), &rNode) - lDoc, _ := ExtractSchema(lNode.Content[0], nil) - rDoc, _ := ExtractSchema(rNode.Content[0], nil) + lDoc, _ := ExtractSchema(context.Background(), lNode.Content[0], nil) + rDoc, _ := ExtractSchema(context.Background(), rNode.Content[0], nil) assert.NotNil(t, lDoc) assert.NotNil(t, rDoc) @@ -1513,8 +1514,8 @@ func TestSchema_Hash_NotEqual(t *testing.T) { _ = yaml.Unmarshal([]byte(left), &lNode) _ = yaml.Unmarshal([]byte(right), &rNode) - lDoc, _ := ExtractSchema(lNode.Content[0], nil) - rDoc, _ := ExtractSchema(rNode.Content[0], nil) + lDoc, _ := ExtractSchema(context.Background(), lNode.Content[0], nil) + rDoc, _ := ExtractSchema(context.Background(), rNode.Content[0], nil) assert.False(t, low.AreEqual(lDoc.Value.Schema(), rDoc.Value.Schema())) } @@ -1550,8 +1551,8 @@ func TestSchema_Hash_EqualJumbled(t *testing.T) { _ = yaml.Unmarshal([]byte(left), &lNode) _ = yaml.Unmarshal([]byte(right), &rNode) - lDoc, _ := ExtractSchema(lNode.Content[0], nil) - rDoc, _ := ExtractSchema(rNode.Content[0], nil) + lDoc, _ := ExtractSchema(context.Background(), lNode.Content[0], nil) + rDoc, _ := ExtractSchema(context.Background(), rNode.Content[0], nil) assert.True(t, low.AreEqual(lDoc.Value.Schema(), rDoc.Value.Schema())) } @@ -1584,7 +1585,7 @@ func TestSchema_UnevaluatedPropertiesAsBool_DefinedAsTrue(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, _ := ExtractSchema(idxNode.Content[0], idx) + res, _ := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.True(t, res.Value.Schema().UnevaluatedProperties.Value.IsB()) assert.True(t, res.Value.Schema().UnevaluatedProperties.Value.B) @@ -1609,7 +1610,7 @@ func TestSchema_UnevaluatedPropertiesAsBool_DefinedAsFalse(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, _ := ExtractSchema(idxNode.Content[0], idx) + res, _ := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.True(t, res.Value.Schema().UnevaluatedProperties.Value.IsB()) assert.False(t, res.Value.Schema().UnevaluatedProperties.Value.B) @@ -1631,7 +1632,7 @@ func TestSchema_UnevaluatedPropertiesAsBool_Undefined(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, _ := ExtractSchema(idxNode.Content[0], idx) + res, _ := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.Nil(t, res.Value.Schema().UnevaluatedProperties.Value) } @@ -1661,7 +1662,7 @@ components: var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, _ := ExtractSchema(idxNode.Content[0], idx) + res, _ := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.True(t, res.Value.Schema().ExclusiveMinimum.Value.A) } @@ -1691,7 +1692,7 @@ components: var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, _ := ExtractSchema(idxNode.Content[0], idx) + res, _ := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.Equal(t, 3.0, res.Value.Schema().ExclusiveMinimum.Value.B) } @@ -1721,7 +1722,7 @@ components: var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, _ := ExtractSchema(idxNode.Content[0], idx) + res, _ := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.True(t, res.Value.Schema().ExclusiveMaximum.Value.A) } @@ -1751,7 +1752,7 @@ components: var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - res, _ := ExtractSchema(idxNode.Content[0], idx) + res, _ := ExtractSchema(context.Background(), idxNode.Content[0], idx) assert.Equal(t, 3.0, res.Value.Schema().ExclusiveMaximum.Value.B) } diff --git a/datamodel/low/base/security_requirement_test.go b/datamodel/low/base/security_requirement_test.go index 05bee6e..406473a 100644 --- a/datamodel/low/base/security_requirement_test.go +++ b/datamodel/low/base/security_requirement_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v3" "testing" @@ -33,8 +34,8 @@ one: var idxNode2 yaml.Node _ = yaml.Unmarshal([]byte(yml2), &idxNode2) - _ = sr.Build(nil, idxNode.Content[0], nil) - _ = sr2.Build(nil, idxNode2.Content[0], nil) + _ = sr.Build(context.Background(), nil, idxNode.Content[0], nil) + _ = sr2.Build(context.Background(), nil, idxNode2.Content[0], nil) assert.Len(t, sr.Requirements.Value, 2) assert.Len(t, sr.GetKeys(), 2) diff --git a/datamodel/low/base/tag_test.go b/datamodel/low/base/tag_test.go index f765f00..a53b628 100644 --- a/datamodel/low/base/tag_test.go +++ b/datamodel/low/base/tag_test.go @@ -4,6 +4,7 @@ package base import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -27,7 +28,7 @@ x-coffee: tasty` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "a tag", n.Name.Value) assert.Equal(t, "a description", n.Description.Value) @@ -52,7 +53,7 @@ externalDocs: err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -79,8 +80,8 @@ x-b33f: princess` var rDoc Tag _ = low.BuildModel(lNode.Content[0], &lDoc) _ = low.BuildModel(rNode.Content[0], &rDoc) - _ = lDoc.Build(nil, lNode.Content[0], nil) - _ = rDoc.Build(nil, rNode.Content[0], nil) + _ = lDoc.Build(context.Background(), nil, lNode.Content[0], nil) + _ = rDoc.Build(context.Background(), nil, rNode.Content[0], nil) assert.Equal(t, lDoc.Hash(), rDoc.Hash()) diff --git a/datamodel/low/extraction_functions.go b/datamodel/low/extraction_functions.go index 99fd00e..e66741f 100644 --- a/datamodel/low/extraction_functions.go +++ b/datamodel/low/extraction_functions.go @@ -4,470 +4,470 @@ package low import ( - "context" - "crypto/sha256" - "fmt" - "github.com/pb33f/libopenapi/index" - "github.com/pb33f/libopenapi/utils" - "github.com/vmware-labs/yaml-jsonpath/pkg/yamlpath" - "gopkg.in/yaml.v3" - "net/url" - "path/filepath" - "reflect" - "strconv" - "strings" + "context" + "crypto/sha256" + "fmt" + "github.com/pb33f/libopenapi/index" + "github.com/pb33f/libopenapi/utils" + "github.com/vmware-labs/yaml-jsonpath/pkg/yamlpath" + "gopkg.in/yaml.v3" + "net/url" + "path/filepath" + "reflect" + "strconv" + "strings" ) // FindItemInMap accepts a string key and a collection of KeyReference[string] and ValueReference[T]. Every // KeyReference will have its value checked against the string key and if there is a match, it will be returned. func FindItemInMap[T any](item string, collection map[KeyReference[string]]ValueReference[T]) *ValueReference[T] { - for n, o := range collection { - if n.Value == item { - return &o - } - if strings.EqualFold(item, n.Value) { - return &o - } - } - return nil + for n, o := range collection { + if n.Value == item { + return &o + } + if strings.EqualFold(item, n.Value) { + return &o + } + } + return nil } // helper function to generate a list of all the things an index should be searched for. func generateIndexCollection(idx *index.SpecIndex) []func() map[string]*index.Reference { - return []func() map[string]*index.Reference{ - idx.GetAllComponentSchemas, - idx.GetMappedReferences, - idx.GetAllExternalDocuments, - idx.GetAllParameters, - idx.GetAllHeaders, - idx.GetAllCallbacks, - idx.GetAllLinks, - idx.GetAllExamples, - idx.GetAllRequestBodies, - idx.GetAllResponses, - idx.GetAllSecuritySchemes, - } + return []func() map[string]*index.Reference{ + idx.GetAllComponentSchemas, + idx.GetMappedReferences, + idx.GetAllExternalDocuments, + idx.GetAllParameters, + idx.GetAllHeaders, + idx.GetAllCallbacks, + idx.GetAllLinks, + idx.GetAllExamples, + idx.GetAllRequestBodies, + idx.GetAllResponses, + idx.GetAllSecuritySchemes, + } } func LocateRefNodeWithContext(ctx context.Context, root *yaml.Node, idx *index.SpecIndex) (*yaml.Node, *index.SpecIndex, error, context.Context) { - if rf, _, rv := utils.IsNodeRefValue(root); rf { + if rf, _, rv := utils.IsNodeRefValue(root); rf { - if rv == "" { - return nil, nil, fmt.Errorf("reference at line %d, column %d is empty, it cannot be resolved", - root.Line, root.Column), ctx - } + if rv == "" { + return nil, nil, fmt.Errorf("reference at line %d, column %d is empty, it cannot be resolved", + root.Line, root.Column), ctx + } - // run through everything and return as soon as we find a match. - // this operates as fast as possible as ever - collections := generateIndexCollection(idx) + // run through everything and return as soon as we find a match. + // this operates as fast as possible as ever + collections := generateIndexCollection(idx) - // if there are any external indexes being used by remote - // documents, then we need to search through them also. - //externalIndexes := idx.GetAllExternalIndexes() - //if len(externalIndexes) > 0 { - // var extCollection []func() map[string]*index.Reference - // for _, extIndex := range externalIndexes { - // extCollection = generateIndexCollection(extIndex) - // collections = append(collections, extCollection...) - // } - //} + // if there are any external indexes being used by remote + // documents, then we need to search through them also. + //externalIndexes := idx.GetAllExternalIndexes() + //if len(externalIndexes) > 0 { + // var extCollection []func() map[string]*index.Reference + // for _, extIndex := range externalIndexes { + // extCollection = generateIndexCollection(extIndex) + // collections = append(collections, extCollection...) + // } + //} - var found map[string]*index.Reference - for _, collection := range collections { - found = collection() - if found != nil && found[rv] != nil { + var found map[string]*index.Reference + for _, collection := range collections { + found = collection() + if found != nil && found[rv] != nil { - // if this is a ref node, we need to keep diving - // until we hit something that isn't a ref. - if jh, _, _ := utils.IsNodeRefValue(found[rv].Node); jh { - // if this node is circular, stop drop and roll. - if !IsCircular(found[rv].Node, idx) { - return LocateRefNodeWithContext(ctx, found[rv].Node, idx) - } else { - return found[rv].Node, idx, fmt.Errorf("circular reference '%s' found during lookup at line "+ - "%d, column %d, It cannot be resolved", - GetCircularReferenceResult(found[rv].Node, idx).GenerateJourneyPath(), - found[rv].Node.Line, - found[rv].Node.Column), ctx - } - } - return utils.NodeAlias(found[rv].Node), idx, nil, ctx - } - } + // if this is a ref node, we need to keep diving + // until we hit something that isn't a ref. + if jh, _, _ := utils.IsNodeRefValue(found[rv].Node); jh { + // if this node is circular, stop drop and roll. + if !IsCircular(found[rv].Node, idx) { + return LocateRefNodeWithContext(ctx, found[rv].Node, idx) + } else { + return found[rv].Node, idx, fmt.Errorf("circular reference '%s' found during lookup at line "+ + "%d, column %d, It cannot be resolved", + GetCircularReferenceResult(found[rv].Node, idx).GenerateJourneyPath(), + found[rv].Node.Line, + found[rv].Node.Column), ctx + } + } + return utils.NodeAlias(found[rv].Node), idx, nil, ctx + } + } - // perform a search for the reference in the index - // extract the correct root + // perform a search for the reference in the index + // extract the correct root - specPath := idx.GetSpecAbsolutePath() - if ctx.Value("currentPath") != nil { - specPath = ctx.Value("currentPath").(string) - } + specPath := idx.GetSpecAbsolutePath() + if ctx.Value(index.CurrentPathKey) != nil { + specPath = ctx.Value(index.CurrentPathKey).(string) + } - explodedRefValue := strings.Split(rv, "#") - if len(explodedRefValue) == 2 { - if !strings.HasPrefix(explodedRefValue[0], "http") { + explodedRefValue := strings.Split(rv, "#") + if len(explodedRefValue) == 2 { + if !strings.HasPrefix(explodedRefValue[0], "http") { - if !filepath.IsAbs(explodedRefValue[0]) { + if !filepath.IsAbs(explodedRefValue[0]) { - if strings.HasPrefix(specPath, "http") { - u, _ := url.Parse(specPath) - p := filepath.Dir(u.Path) - abs, _ := filepath.Abs(filepath.Join(p, explodedRefValue[0])) - u.Path = abs - rv = fmt.Sprintf("%s#%s", u.String(), explodedRefValue[1]) + if strings.HasPrefix(specPath, "http") { + u, _ := url.Parse(specPath) + p := filepath.Dir(u.Path) + abs, _ := filepath.Abs(filepath.Join(p, explodedRefValue[0])) + u.Path = abs + rv = fmt.Sprintf("%s#%s", u.String(), explodedRefValue[1]) - } else { - if specPath != "" { + } else { + if specPath != "" { - abs, _ := filepath.Abs(filepath.Join(filepath.Dir(specPath), explodedRefValue[0])) - rv = fmt.Sprintf("%s#%s", abs, explodedRefValue[1]) + abs, _ := filepath.Abs(filepath.Join(filepath.Dir(specPath), explodedRefValue[0])) + rv = fmt.Sprintf("%s#%s", abs, explodedRefValue[1]) - } else { + } else { - // check for a config baseURL and use that if it exists. - if idx.GetConfig().BaseURL != nil { + // check for a config baseURL and use that if it exists. + if idx.GetConfig().BaseURL != nil { - u := *idx.GetConfig().BaseURL + u := *idx.GetConfig().BaseURL - abs, _ := filepath.Abs(filepath.Join(u.Path, rv)) - u.Path = abs - rv = fmt.Sprintf("%s#%s", u.String(), explodedRefValue[1]) - } + abs, _ := filepath.Abs(filepath.Join(u.Path, rv)) + u.Path = abs + rv = fmt.Sprintf("%s#%s", u.String(), explodedRefValue[1]) + } - } - } + } + } - } - } - } else { + } + } + } else { - if !strings.HasPrefix(explodedRefValue[0], "http") { + if !strings.HasPrefix(explodedRefValue[0], "http") { - if !filepath.IsAbs(explodedRefValue[0]) { + if !filepath.IsAbs(explodedRefValue[0]) { - if strings.HasPrefix(specPath, "http") { - u, _ := url.Parse(specPath) - p := filepath.Dir(u.Path) - abs, _ := filepath.Abs(filepath.Join(p, rv)) - u.Path = abs - rv = u.String() + if strings.HasPrefix(specPath, "http") { + u, _ := url.Parse(specPath) + p := filepath.Dir(u.Path) + abs, _ := filepath.Abs(filepath.Join(p, rv)) + u.Path = abs + rv = u.String() - } else { - if specPath != "" { + } else { + if specPath != "" { - abs, _ := filepath.Abs(filepath.Join(filepath.Dir(specPath), rv)) - rv = abs + abs, _ := filepath.Abs(filepath.Join(filepath.Dir(specPath), rv)) + rv = abs - } else { + } else { - // check for a config baseURL and use that if it exists. - if idx.GetConfig().BaseURL != nil { - u := *idx.GetConfig().BaseURL + // check for a config baseURL and use that if it exists. + if idx.GetConfig().BaseURL != nil { + u := *idx.GetConfig().BaseURL - abs, _ := filepath.Abs(filepath.Join(u.Path, rv)) - u.Path = abs - rv = u.String() - } + abs, _ := filepath.Abs(filepath.Join(u.Path, rv)) + u.Path = abs + rv = u.String() + } - } - } + } + } - } - } + } + } - } + } - foundRef, fIdx, newCtx := idx.SearchIndexForReferenceWithContext(ctx, rv) - if foundRef != nil { - return utils.NodeAlias(foundRef.Node), fIdx, nil, newCtx - } + foundRef, fIdx, newCtx := idx.SearchIndexForReferenceWithContext(ctx, rv) + if foundRef != nil { + return utils.NodeAlias(foundRef.Node), fIdx, nil, newCtx + } - // let's try something else to find our references. + // let's try something else to find our references. - // cant be found? last resort is to try a path lookup - _, friendly := utils.ConvertComponentIdIntoFriendlyPathSearch(rv) - if friendly != "" { - path, err := yamlpath.NewPath(friendly) - if err == nil { - nodes, fErr := path.Find(idx.GetRootNode()) - if fErr == nil { - if len(nodes) > 0 { - return utils.NodeAlias(nodes[0]), idx, nil, ctx - } - } - } - } - return nil, idx, fmt.Errorf("reference '%s' at line %d, column %d was not found", - rv, root.Line, root.Column), ctx - } - return nil, idx, nil, ctx + // cant be found? last resort is to try a path lookup + _, friendly := utils.ConvertComponentIdIntoFriendlyPathSearch(rv) + if friendly != "" { + path, err := yamlpath.NewPath(friendly) + if err == nil { + nodes, fErr := path.Find(idx.GetRootNode()) + if fErr == nil { + if len(nodes) > 0 { + return utils.NodeAlias(nodes[0]), idx, nil, ctx + } + } + } + } + return nil, idx, fmt.Errorf("reference '%s' at line %d, column %d was not found", + rv, root.Line, root.Column), ctx + } + return nil, idx, nil, ctx } // LocateRefNode will perform a complete lookup for a $ref node. This function searches the entire index for // the reference being supplied. If there is a match found, the reference *yaml.Node is returned. func LocateRefNode(root *yaml.Node, idx *index.SpecIndex) (*yaml.Node, *index.SpecIndex, error) { - r, i, e, _ := LocateRefNodeWithContext(context.Background(), root, idx) - return r, i, e + r, i, e, _ := LocateRefNodeWithContext(context.Background(), root, idx) + return r, i, e } // ExtractObjectRaw will extract a typed Buildable[N] object from a root yaml.Node. The 'raw' aspect is // that there is no NodeReference wrapper around the result returned, just the raw object. func ExtractObjectRaw[T Buildable[N], N any](ctx context.Context, key, root *yaml.Node, idx *index.SpecIndex) (T, error, bool, string) { - var circError error - var isReference bool - var referenceValue string - root = utils.NodeAlias(root) - if h, _, rv := utils.IsNodeRefValue(root); h { - ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, root, idx) - if ref != nil { - root = ref - isReference = true - referenceValue = rv - idx = fIdx - ctx = nCtx - if err != nil { - circError = err - } - } else { - if err != nil { - return nil, fmt.Errorf("object extraction failed: %s", err.Error()), isReference, referenceValue - } - } - } - var n T = new(N) - err := BuildModel(root, n) - if err != nil { - return n, err, isReference, referenceValue - } - err = n.Build(ctx, key, root, idx) - if err != nil { - return n, err, isReference, referenceValue - } + var circError error + var isReference bool + var referenceValue string + root = utils.NodeAlias(root) + if h, _, rv := utils.IsNodeRefValue(root); h { + ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, root, idx) + if ref != nil { + root = ref + isReference = true + referenceValue = rv + idx = fIdx + ctx = nCtx + if err != nil { + circError = err + } + } else { + if err != nil { + return nil, fmt.Errorf("object extraction failed: %s", err.Error()), isReference, referenceValue + } + } + } + var n T = new(N) + err := BuildModel(root, n) + if err != nil { + return n, err, isReference, referenceValue + } + err = n.Build(ctx, key, root, idx) + if err != nil { + return n, err, isReference, referenceValue + } - // if this is a reference, keep track of the reference in the value - if isReference { - SetReference(n, referenceValue) - } + // if this is a reference, keep track of the reference in the value + if isReference { + SetReference(n, referenceValue) + } - // do we want to throw an error as well if circular error reporting is on? - if circError != nil && !idx.AllowCircularReferenceResolving() { - return n, circError, isReference, referenceValue - } - return n, nil, isReference, referenceValue + // do we want to throw an error as well if circular error reporting is on? + if circError != nil && !idx.AllowCircularReferenceResolving() { + return n, circError, isReference, referenceValue + } + return n, nil, isReference, referenceValue } // ExtractObject will extract a typed Buildable[N] object from a root yaml.Node. The result is wrapped in a // NodeReference[T] that contains the key node found and value node found when looking up the reference. func ExtractObject[T Buildable[N], N any](ctx context.Context, label string, root *yaml.Node, idx *index.SpecIndex) (NodeReference[T], error) { - var ln, vn *yaml.Node - var circError error - var isReference bool - var referenceValue string - root = utils.NodeAlias(root) - if rf, rl, refVal := utils.IsNodeRefValue(root); rf { - ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, root, idx) - if ref != nil { - vn = ref - ln = rl - isReference = true - referenceValue = refVal - idx = fIdx - ctx = nCtx - if err != nil { - circError = err - } - } else { - if err != nil { - return NodeReference[T]{}, fmt.Errorf("object extraction failed: %s", err.Error()) - } - } - } else { - _, ln, vn = utils.FindKeyNodeFull(label, root.Content) - if vn != nil { - if h, _, rVal := utils.IsNodeRefValue(vn); h { - ref, fIdx, lerr, nCtx := LocateRefNodeWithContext(ctx, vn, idx) - if ref != nil { - vn = ref - if fIdx != nil { - idx = fIdx - } - ctx = nCtx - isReference = true - referenceValue = rVal - if lerr != nil { - circError = lerr - } - } else { - if lerr != nil { - return NodeReference[T]{}, fmt.Errorf("object extraction failed: %s", lerr.Error()) - } - } - } - } - } - var n T = new(N) - err := BuildModel(vn, n) - if err != nil { - return NodeReference[T]{}, err - } - if ln == nil { - return NodeReference[T]{}, nil - } - err = n.Build(ctx, ln, vn, idx) - if err != nil { - return NodeReference[T]{}, err - } + var ln, vn *yaml.Node + var circError error + var isReference bool + var referenceValue string + root = utils.NodeAlias(root) + if rf, rl, refVal := utils.IsNodeRefValue(root); rf { + ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, root, idx) + if ref != nil { + vn = ref + ln = rl + isReference = true + referenceValue = refVal + idx = fIdx + ctx = nCtx + if err != nil { + circError = err + } + } else { + if err != nil { + return NodeReference[T]{}, fmt.Errorf("object extraction failed: %s", err.Error()) + } + } + } else { + _, ln, vn = utils.FindKeyNodeFull(label, root.Content) + if vn != nil { + if h, _, rVal := utils.IsNodeRefValue(vn); h { + ref, fIdx, lerr, nCtx := LocateRefNodeWithContext(ctx, vn, idx) + if ref != nil { + vn = ref + if fIdx != nil { + idx = fIdx + } + ctx = nCtx + isReference = true + referenceValue = rVal + if lerr != nil { + circError = lerr + } + } else { + if lerr != nil { + return NodeReference[T]{}, fmt.Errorf("object extraction failed: %s", lerr.Error()) + } + } + } + } + } + var n T = new(N) + err := BuildModel(vn, n) + if err != nil { + return NodeReference[T]{}, err + } + if ln == nil { + return NodeReference[T]{}, nil + } + err = n.Build(ctx, ln, vn, idx) + if err != nil { + return NodeReference[T]{}, err + } - // if this is a reference, keep track of the reference in the value - if isReference { - SetReference(n, referenceValue) - } + // if this is a reference, keep track of the reference in the value + if isReference { + SetReference(n, referenceValue) + } - res := NodeReference[T]{ - Value: n, - KeyNode: ln, - ValueNode: vn, - ReferenceNode: isReference, - Reference: referenceValue, - } + res := NodeReference[T]{ + Value: n, + KeyNode: ln, + ValueNode: vn, + ReferenceNode: isReference, + Reference: referenceValue, + } - // do we want to throw an error as well if circular error reporting is on? - if circError != nil && !idx.AllowCircularReferenceResolving() { - return res, circError - } - return res, nil + // do we want to throw an error as well if circular error reporting is on? + if circError != nil && !idx.AllowCircularReferenceResolving() { + return res, circError + } + return res, nil } func SetReference(obj any, ref string) { - if obj == nil { - return - } - if r, ok := obj.(IsReferenced); ok { - r.SetReference(ref) - } + if obj == nil { + return + } + if r, ok := obj.(IsReferenced); ok { + r.SetReference(ref) + } } // ExtractArray will extract a slice of []ValueReference[T] from a root yaml.Node that is defined as a sequence. // Used when the value being extracted is an array. func ExtractArray[T Buildable[N], N any](ctx context.Context, label string, root *yaml.Node, idx *index.SpecIndex) ([]ValueReference[T], - *yaml.Node, *yaml.Node, error, + *yaml.Node, *yaml.Node, error, ) { - var ln, vn *yaml.Node - var circError error - root = utils.NodeAlias(root) - if rf, rl, _ := utils.IsNodeRefValue(root); rf { - ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, root, idx) - if ref != nil { - vn = ref - ln = rl - fIdx = fIdx - ctx = nCtx - if err != nil { - circError = err - } - } else { - return []ValueReference[T]{}, nil, nil, fmt.Errorf("array build failed: reference cannot be found: %s", - root.Content[1].Value) - } - } else { - _, ln, vn = utils.FindKeyNodeFullTop(label, root.Content) - if vn != nil { - if h, _, _ := utils.IsNodeRefValue(vn); h { - ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, vn, idx) - if ref != nil { - vn = ref - idx = fIdx - ctx = nCtx - //referenceValue = rVal - if err != nil { - circError = err - } - } else { - if err != nil { - return []ValueReference[T]{}, nil, nil, fmt.Errorf("array build failed: reference cannot be found: %s", - err.Error()) - } - } - } - } - } + var ln, vn *yaml.Node + var circError error + root = utils.NodeAlias(root) + if rf, rl, _ := utils.IsNodeRefValue(root); rf { + ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, root, idx) + if ref != nil { + vn = ref + ln = rl + fIdx = fIdx + ctx = nCtx + if err != nil { + circError = err + } + } else { + return []ValueReference[T]{}, nil, nil, fmt.Errorf("array build failed: reference cannot be found: %s", + root.Content[1].Value) + } + } else { + _, ln, vn = utils.FindKeyNodeFullTop(label, root.Content) + if vn != nil { + if h, _, _ := utils.IsNodeRefValue(vn); h { + ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, vn, idx) + if ref != nil { + vn = ref + idx = fIdx + ctx = nCtx + //referenceValue = rVal + if err != nil { + circError = err + } + } else { + if err != nil { + return []ValueReference[T]{}, nil, nil, fmt.Errorf("array build failed: reference cannot be found: %s", + err.Error()) + } + } + } + } + } - var items []ValueReference[T] - if vn != nil && ln != nil { - if !utils.IsNodeArray(vn) { - return []ValueReference[T]{}, nil, nil, fmt.Errorf("array build failed, input is not an array, line %d, column %d", vn.Line, vn.Column) - } - for _, node := range vn.Content { - localReferenceValue := "" - //localIsReference := false + var items []ValueReference[T] + if vn != nil && ln != nil { + if !utils.IsNodeArray(vn) { + return []ValueReference[T]{}, nil, nil, fmt.Errorf("array build failed, input is not an array, line %d, column %d", vn.Line, vn.Column) + } + for _, node := range vn.Content { + localReferenceValue := "" + //localIsReference := false - foundCtx := ctx - foundIndex := idx + foundCtx := ctx + foundIndex := idx - if rf, _, rv := utils.IsNodeRefValue(node); rf { - refg, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, node, idx) - if refg != nil { - node = refg - //localIsReference = true - localReferenceValue = rv - foundIndex = fIdx - foundCtx = nCtx - if err != nil { - circError = err - } - } else { - if err != nil { - return []ValueReference[T]{}, nil, nil, fmt.Errorf("array build failed: reference cannot be found: %s", - err.Error()) - } - } - } - var n T = new(N) - err := BuildModel(node, n) - if err != nil { - return []ValueReference[T]{}, ln, vn, err - } - berr := n.Build(foundCtx, ln, node, foundIndex) - if berr != nil { - return nil, ln, vn, berr - } + if rf, _, rv := utils.IsNodeRefValue(node); rf { + refg, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, node, idx) + if refg != nil { + node = refg + //localIsReference = true + localReferenceValue = rv + foundIndex = fIdx + foundCtx = nCtx + if err != nil { + circError = err + } + } else { + if err != nil { + return []ValueReference[T]{}, nil, nil, fmt.Errorf("array build failed: reference cannot be found: %s", + err.Error()) + } + } + } + var n T = new(N) + err := BuildModel(node, n) + if err != nil { + return []ValueReference[T]{}, ln, vn, err + } + berr := n.Build(foundCtx, ln, node, foundIndex) + if berr != nil { + return nil, ln, vn, berr + } - if localReferenceValue != "" { - SetReference(n, localReferenceValue) - } + if localReferenceValue != "" { + SetReference(n, localReferenceValue) + } - items = append(items, ValueReference[T]{ - Value: n, - ValueNode: node, - ReferenceNode: localReferenceValue != "", - Reference: localReferenceValue, - }) - } - } - // include circular errors? - if circError != nil && !idx.AllowCircularReferenceResolving() { - return items, ln, vn, circError - } - return items, ln, vn, nil + items = append(items, ValueReference[T]{ + Value: n, + ValueNode: node, + ReferenceNode: localReferenceValue != "", + Reference: localReferenceValue, + }) + } + } + // include circular errors? + if circError != nil && !idx.AllowCircularReferenceResolving() { + return items, ln, vn, circError + } + return items, ln, vn, nil } // ExtractExample will extract a value supplied as an example into a NodeReference. Value can be anything. // the node value is untyped, so casting will be required when trying to use it. func ExtractExample(expNode, expLabel *yaml.Node) NodeReference[any] { - ref := NodeReference[any]{Value: expNode.Value, KeyNode: expLabel, ValueNode: expNode} - if utils.IsNodeMap(expNode) { - var decoded map[string]interface{} - _ = expNode.Decode(&decoded) - ref.Value = decoded - } - if utils.IsNodeArray(expNode) { - var decoded []interface{} - _ = expNode.Decode(&decoded) - ref.Value = decoded - } - return ref + ref := NodeReference[any]{Value: expNode.Value, KeyNode: expLabel, ValueNode: expNode} + if utils.IsNodeMap(expNode) { + var decoded map[string]interface{} + _ = expNode.Decode(&decoded) + ref.Value = decoded + } + if utils.IsNodeArray(expNode) { + var decoded []interface{} + _ = expNode.Decode(&decoded) + ref.Value = decoded + } + return ref } // ExtractMapNoLookupExtensions will extract a map of KeyReference and ValueReference from a root yaml.Node. The 'NoLookup' part @@ -476,101 +476,101 @@ func ExtractExample(expNode, expLabel *yaml.Node) NodeReference[any] { // // This is useful when the node to be extracted, is already known and does not require a search. func ExtractMapNoLookupExtensions[PT Buildable[N], N any]( - ctx context.Context, - root *yaml.Node, - idx *index.SpecIndex, - includeExtensions bool, + ctx context.Context, + root *yaml.Node, + idx *index.SpecIndex, + includeExtensions bool, ) (map[KeyReference[string]]ValueReference[PT], error) { - valueMap := make(map[KeyReference[string]]ValueReference[PT]) - var circError error - if utils.IsNodeMap(root) { - var currentKey *yaml.Node - skip := false - rlen := len(root.Content) + valueMap := make(map[KeyReference[string]]ValueReference[PT]) + var circError error + if utils.IsNodeMap(root) { + var currentKey *yaml.Node + skip := false + rlen := len(root.Content) - for i := 0; i < rlen; i++ { - node := root.Content[i] - if !includeExtensions { - if strings.HasPrefix(strings.ToLower(node.Value), "x-") { - skip = true - continue - } - } - if skip { - skip = false - continue - } - if i%2 == 0 { - currentKey = node - continue - } + for i := 0; i < rlen; i++ { + node := root.Content[i] + if !includeExtensions { + if strings.HasPrefix(strings.ToLower(node.Value), "x-") { + skip = true + continue + } + } + if skip { + skip = false + continue + } + if i%2 == 0 { + currentKey = node + continue + } - if currentKey.Tag == "!!merge" && currentKey.Value == "<<" { - root.Content = append(root.Content, utils.NodeAlias(node).Content...) - rlen = len(root.Content) - currentKey = nil - continue - } - node = utils.NodeAlias(node) + if currentKey.Tag == "!!merge" && currentKey.Value == "<<" { + root.Content = append(root.Content, utils.NodeAlias(node).Content...) + rlen = len(root.Content) + currentKey = nil + continue + } + node = utils.NodeAlias(node) - foundIndex := idx - foundContext := ctx + foundIndex := idx + foundContext := ctx - var isReference bool - var referenceValue string - // if value is a reference, we have to look it up in the index! - if h, _, rv := utils.IsNodeRefValue(node); h { - ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, node, idx) - if ref != nil { - node = ref - isReference = true - referenceValue = rv - if fIdx != nil { - foundIndex = fIdx - } - foundContext = nCtx - if err != nil { - circError = err - } - } else { - if err != nil { - return nil, fmt.Errorf("map build failed: reference cannot be found: %s", err.Error()) - } - } - } - if foundIndex == nil { - foundIndex = idx - } + var isReference bool + var referenceValue string + // if value is a reference, we have to look it up in the index! + if h, _, rv := utils.IsNodeRefValue(node); h { + ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, node, idx) + if ref != nil { + node = ref + isReference = true + referenceValue = rv + if fIdx != nil { + foundIndex = fIdx + } + foundContext = nCtx + if err != nil { + circError = err + } + } else { + if err != nil { + return nil, fmt.Errorf("map build failed: reference cannot be found: %s", err.Error()) + } + } + } + if foundIndex == nil { + foundIndex = idx + } - var n PT = new(N) - err := BuildModel(node, n) - if err != nil { - return nil, err - } - berr := n.Build(foundContext, currentKey, node, foundIndex) - if berr != nil { - return nil, berr - } - if isReference { - SetReference(n, referenceValue) - } - if currentKey != nil { - valueMap[KeyReference[string]{ - Value: currentKey.Value, - KeyNode: currentKey, - }] = ValueReference[PT]{ - Value: n, - ValueNode: node, - //IsReference: isReference, - Reference: referenceValue, - } - } - } - } - if circError != nil && !idx.AllowCircularReferenceResolving() { - return valueMap, circError - } - return valueMap, nil + var n PT = new(N) + err := BuildModel(node, n) + if err != nil { + return nil, err + } + berr := n.Build(foundContext, currentKey, node, foundIndex) + if berr != nil { + return nil, berr + } + if isReference { + SetReference(n, referenceValue) + } + if currentKey != nil { + valueMap[KeyReference[string]{ + Value: currentKey.Value, + KeyNode: currentKey, + }] = ValueReference[PT]{ + Value: n, + ValueNode: node, + //IsReference: isReference, + Reference: referenceValue, + } + } + } + } + if circError != nil && !idx.AllowCircularReferenceResolving() { + return valueMap, circError + } + return valueMap, nil } @@ -580,16 +580,16 @@ func ExtractMapNoLookupExtensions[PT Buildable[N], N any]( // // This is useful when the node to be extracted, is already known and does not require a search. func ExtractMapNoLookup[PT Buildable[N], N any]( - ctx context.Context, - root *yaml.Node, - idx *index.SpecIndex, + ctx context.Context, + root *yaml.Node, + idx *index.SpecIndex, ) (map[KeyReference[string]]ValueReference[PT], error) { - return ExtractMapNoLookupExtensions[PT, N](ctx, root, idx, false) + return ExtractMapNoLookupExtensions[PT, N](ctx, root, idx, false) } type mappingResult[T any] struct { - k KeyReference[string] - v ValueReference[T] + k KeyReference[string] + v ValueReference[T] } // ExtractMapExtensions will extract a map of KeyReference and ValueReference from a root yaml.Node. The 'label' is @@ -599,151 +599,151 @@ type mappingResult[T any] struct { // The second return value is the yaml.Node found for the 'label' and the third return value is the yaml.Node // found for the value extracted from the label node. func ExtractMapExtensions[PT Buildable[N], N any]( - ctx context.Context, - label string, - root *yaml.Node, - idx *index.SpecIndex, - extensions bool, + ctx context.Context, + label string, + root *yaml.Node, + idx *index.SpecIndex, + extensions bool, ) (map[KeyReference[string]]ValueReference[PT], *yaml.Node, *yaml.Node, error) { - //var isReference bool - var referenceValue string - var labelNode, valueNode *yaml.Node - var circError error - root = utils.NodeAlias(root) - if rf, rl, rv := utils.IsNodeRefValue(root); rf { - // locate reference in index. - ref, _, err := LocateRefNode(root, idx) - if ref != nil { - valueNode = ref - labelNode = rl - //isReference = true - referenceValue = rv - if err != nil { - circError = err - } - } else { - return nil, labelNode, valueNode, fmt.Errorf("map build failed: reference cannot be found: %s", - root.Content[1].Value) - } - } else { - _, labelNode, valueNode = utils.FindKeyNodeFull(label, root.Content) - valueNode = utils.NodeAlias(valueNode) - if valueNode != nil { - if h, _, rvt := utils.IsNodeRefValue(valueNode); h { - ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, valueNode, idx) - if ref != nil { - valueNode = ref - //isReference = true - referenceValue = rvt - idx = fIdx - ctx = nCtx - if err != nil { - circError = err - } - } else { - if err != nil { - return nil, labelNode, valueNode, fmt.Errorf("map build failed: reference cannot be found: %s", - err.Error()) - } - } - } - } - } - if valueNode != nil { - var currentLabelNode *yaml.Node - valueMap := make(map[KeyReference[string]]ValueReference[PT]) + //var isReference bool + var referenceValue string + var labelNode, valueNode *yaml.Node + var circError error + root = utils.NodeAlias(root) + if rf, rl, rv := utils.IsNodeRefValue(root); rf { + // locate reference in index. + ref, _, err := LocateRefNode(root, idx) + if ref != nil { + valueNode = ref + labelNode = rl + //isReference = true + referenceValue = rv + if err != nil { + circError = err + } + } else { + return nil, labelNode, valueNode, fmt.Errorf("map build failed: reference cannot be found: %s", + root.Content[1].Value) + } + } else { + _, labelNode, valueNode = utils.FindKeyNodeFull(label, root.Content) + valueNode = utils.NodeAlias(valueNode) + if valueNode != nil { + if h, _, rvt := utils.IsNodeRefValue(valueNode); h { + ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, valueNode, idx) + if ref != nil { + valueNode = ref + //isReference = true + referenceValue = rvt + idx = fIdx + ctx = nCtx + if err != nil { + circError = err + } + } else { + if err != nil { + return nil, labelNode, valueNode, fmt.Errorf("map build failed: reference cannot be found: %s", + err.Error()) + } + } + } + } + } + if valueNode != nil { + var currentLabelNode *yaml.Node + valueMap := make(map[KeyReference[string]]ValueReference[PT]) - bChan := make(chan mappingResult[PT]) - eChan := make(chan error) + bChan := make(chan mappingResult[PT]) + eChan := make(chan error) - buildMap := func(nctx context.Context, label *yaml.Node, value *yaml.Node, c chan mappingResult[PT], ec chan<- error, ref string, fIdx *index.SpecIndex) { - var n PT = new(N) - value = utils.NodeAlias(value) - _ = BuildModel(value, n) - err := n.Build(nctx, label, value, fIdx) - if err != nil { - ec <- err - return - } + buildMap := func(nctx context.Context, label *yaml.Node, value *yaml.Node, c chan mappingResult[PT], ec chan<- error, ref string, fIdx *index.SpecIndex) { + var n PT = new(N) + value = utils.NodeAlias(value) + _ = BuildModel(value, n) + err := n.Build(nctx, label, value, fIdx) + if err != nil { + ec <- err + return + } - //isRef := false - if ref != "" { - //isRef = true - SetReference(n, ref) - } + //isRef := false + if ref != "" { + //isRef = true + SetReference(n, ref) + } - c <- mappingResult[PT]{ - k: KeyReference[string]{ - KeyNode: label, - Value: label.Value, - }, - v: ValueReference[PT]{ - Value: n, - ValueNode: value, - //IsReference: isRef, - Reference: ref, - }, - } - } + c <- mappingResult[PT]{ + k: KeyReference[string]{ + KeyNode: label, + Value: label.Value, + }, + v: ValueReference[PT]{ + Value: n, + ValueNode: value, + //IsReference: isRef, + Reference: ref, + }, + } + } - totalKeys := 0 - for i, en := range valueNode.Content { - en = utils.NodeAlias(en) - referenceValue = "" - if i%2 == 0 { - currentLabelNode = en - continue - } + totalKeys := 0 + for i, en := range valueNode.Content { + en = utils.NodeAlias(en) + referenceValue = "" + if i%2 == 0 { + currentLabelNode = en + continue + } - foundIndex := idx - foundContext := ctx + foundIndex := idx + foundContext := ctx - // check our valueNode isn't a reference still. - if h, _, refVal := utils.IsNodeRefValue(en); h { - ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, en, idx) - if ref != nil { - en = ref - referenceValue = refVal - if fIdx != nil { - foundIndex = fIdx - } - foundContext = nCtx - if err != nil { - circError = err - } - } else { - if err != nil { - return nil, labelNode, valueNode, fmt.Errorf("flat map build failed: reference cannot be found: %s", - err.Error()) - } - } - } + // check our valueNode isn't a reference still. + if h, _, refVal := utils.IsNodeRefValue(en); h { + ref, fIdx, err, nCtx := LocateRefNodeWithContext(ctx, en, idx) + if ref != nil { + en = ref + referenceValue = refVal + if fIdx != nil { + foundIndex = fIdx + } + foundContext = nCtx + if err != nil { + circError = err + } + } else { + if err != nil { + return nil, labelNode, valueNode, fmt.Errorf("flat map build failed: reference cannot be found: %s", + err.Error()) + } + } + } - if !extensions { - if strings.HasPrefix(currentLabelNode.Value, "x-") { - continue // yo, don't pay any attention to extensions, not here anyway. - } - } - totalKeys++ - go buildMap(foundContext, currentLabelNode, en, bChan, eChan, referenceValue, foundIndex) - } + if !extensions { + if strings.HasPrefix(currentLabelNode.Value, "x-") { + continue // yo, don't pay any attention to extensions, not here anyway. + } + } + totalKeys++ + go buildMap(foundContext, currentLabelNode, en, bChan, eChan, referenceValue, foundIndex) + } - completedKeys := 0 - for completedKeys < totalKeys { - select { - case err := <-eChan: - return valueMap, labelNode, valueNode, err - case res := <-bChan: - completedKeys++ - valueMap[res.k] = res.v - } - } - if circError != nil && !idx.AllowCircularReferenceResolving() { - return valueMap, labelNode, valueNode, circError - } - return valueMap, labelNode, valueNode, nil - } - return nil, labelNode, valueNode, nil + completedKeys := 0 + for completedKeys < totalKeys { + select { + case err := <-eChan: + return valueMap, labelNode, valueNode, err + case res := <-bChan: + completedKeys++ + valueMap[res.k] = res.v + } + } + if circError != nil && !idx.AllowCircularReferenceResolving() { + return valueMap, labelNode, valueNode, circError + } + return valueMap, labelNode, valueNode, nil + } + return nil, labelNode, valueNode, nil } // ExtractMap will extract a map of KeyReference and ValueReference from a root yaml.Node. The 'label' is @@ -752,12 +752,12 @@ func ExtractMapExtensions[PT Buildable[N], N any]( // The second return value is the yaml.Node found for the 'label' and the third return value is the yaml.Node // found for the value extracted from the label node. func ExtractMap[PT Buildable[N], N any]( - ctx context.Context, - label string, - root *yaml.Node, - idx *index.SpecIndex, + ctx context.Context, + label string, + root *yaml.Node, + idx *index.SpecIndex, ) (map[KeyReference[string]]ValueReference[PT], *yaml.Node, *yaml.Node, error) { - return ExtractMapExtensions[PT, N](ctx, label, root, idx, false) + return ExtractMapExtensions[PT, N](ctx, label, root, idx, false) } // ExtractExtensions will extract any 'x-' prefixed key nodes from a root node into a map. Requirements have been pre-cast: @@ -774,79 +774,79 @@ func ExtractMap[PT Buildable[N], N any]( // // int64, float64, bool, string func ExtractExtensions(root *yaml.Node) map[KeyReference[string]]ValueReference[any] { - root = utils.NodeAlias(root) - extensions := utils.FindExtensionNodes(root.Content) - extensionMap := make(map[KeyReference[string]]ValueReference[any]) - for _, ext := range extensions { - if utils.IsNodeMap(ext.Value) { - var v interface{} - _ = ext.Value.Decode(&v) - extensionMap[KeyReference[string]{ - Value: ext.Key.Value, - KeyNode: ext.Key, - }] = ValueReference[any]{Value: v, ValueNode: ext.Value} - } - if utils.IsNodeStringValue(ext.Value) { - extensionMap[KeyReference[string]{ - Value: ext.Key.Value, - KeyNode: ext.Key, - }] = ValueReference[any]{Value: ext.Value.Value, ValueNode: ext.Value} - } - if utils.IsNodeFloatValue(ext.Value) { - fv, _ := strconv.ParseFloat(ext.Value.Value, 64) - extensionMap[KeyReference[string]{ - Value: ext.Key.Value, - KeyNode: ext.Key, - }] = ValueReference[any]{Value: fv, ValueNode: ext.Value} - } - if utils.IsNodeIntValue(ext.Value) { - iv, _ := strconv.ParseInt(ext.Value.Value, 10, 64) - extensionMap[KeyReference[string]{ - Value: ext.Key.Value, - KeyNode: ext.Key, - }] = ValueReference[any]{Value: iv, ValueNode: ext.Value} - } - if utils.IsNodeBoolValue(ext.Value) { - bv, _ := strconv.ParseBool(ext.Value.Value) - extensionMap[KeyReference[string]{ - Value: ext.Key.Value, - KeyNode: ext.Key, - }] = ValueReference[any]{Value: bv, ValueNode: ext.Value} - } - if utils.IsNodeArray(ext.Value) { - var v []interface{} - _ = ext.Value.Decode(&v) - extensionMap[KeyReference[string]{ - Value: ext.Key.Value, - KeyNode: ext.Key, - }] = ValueReference[any]{Value: v, ValueNode: ext.Value} - } - } - return extensionMap + root = utils.NodeAlias(root) + extensions := utils.FindExtensionNodes(root.Content) + extensionMap := make(map[KeyReference[string]]ValueReference[any]) + for _, ext := range extensions { + if utils.IsNodeMap(ext.Value) { + var v interface{} + _ = ext.Value.Decode(&v) + extensionMap[KeyReference[string]{ + Value: ext.Key.Value, + KeyNode: ext.Key, + }] = ValueReference[any]{Value: v, ValueNode: ext.Value} + } + if utils.IsNodeStringValue(ext.Value) { + extensionMap[KeyReference[string]{ + Value: ext.Key.Value, + KeyNode: ext.Key, + }] = ValueReference[any]{Value: ext.Value.Value, ValueNode: ext.Value} + } + if utils.IsNodeFloatValue(ext.Value) { + fv, _ := strconv.ParseFloat(ext.Value.Value, 64) + extensionMap[KeyReference[string]{ + Value: ext.Key.Value, + KeyNode: ext.Key, + }] = ValueReference[any]{Value: fv, ValueNode: ext.Value} + } + if utils.IsNodeIntValue(ext.Value) { + iv, _ := strconv.ParseInt(ext.Value.Value, 10, 64) + extensionMap[KeyReference[string]{ + Value: ext.Key.Value, + KeyNode: ext.Key, + }] = ValueReference[any]{Value: iv, ValueNode: ext.Value} + } + if utils.IsNodeBoolValue(ext.Value) { + bv, _ := strconv.ParseBool(ext.Value.Value) + extensionMap[KeyReference[string]{ + Value: ext.Key.Value, + KeyNode: ext.Key, + }] = ValueReference[any]{Value: bv, ValueNode: ext.Value} + } + if utils.IsNodeArray(ext.Value) { + var v []interface{} + _ = ext.Value.Decode(&v) + extensionMap[KeyReference[string]{ + Value: ext.Key.Value, + KeyNode: ext.Key, + }] = ValueReference[any]{Value: v, ValueNode: ext.Value} + } + } + return extensionMap } // AreEqual returns true if two Hashable objects are equal or not. func AreEqual(l, r Hashable) bool { - if l == nil || r == nil { - return false - } - return l.Hash() == r.Hash() + if l == nil || r == nil { + return false + } + return l.Hash() == r.Hash() } // GenerateHashString will generate a SHA36 hash of any object passed in. If the object is Hashable // then the underlying Hash() method will be called. func GenerateHashString(v any) string { - if v == nil { - return "" - } - if h, ok := v.(Hashable); ok { - if h != nil { - return fmt.Sprintf(HASH, h.Hash()) - } - } - // if we get here, we're a primitive, check if we're a pointer and de-point - if reflect.TypeOf(v).Kind() == reflect.Ptr { - v = reflect.ValueOf(v).Elem().Interface() - } - return fmt.Sprintf(HASH, sha256.Sum256([]byte(fmt.Sprint(v)))) + if v == nil { + return "" + } + if h, ok := v.(Hashable); ok { + if h != nil { + return fmt.Sprintf(HASH, h.Hash()) + } + } + // if we get here, we're a primitive, check if we're a pointer and de-point + if reflect.TypeOf(v).Kind() == reflect.Ptr { + v = reflect.ValueOf(v).Elem().Interface() + } + return fmt.Sprintf(HASH, sha256.Sum256([]byte(fmt.Sprint(v)))) } diff --git a/datamodel/low/extraction_functions_test.go b/datamodel/low/extraction_functions_test.go index f87c6cf..27525a2 100644 --- a/datamodel/low/extraction_functions_test.go +++ b/datamodel/low/extraction_functions_test.go @@ -4,6 +4,7 @@ package low import ( + "context" "crypto/sha256" "fmt" "strings" @@ -61,7 +62,7 @@ func TestLocateRefNode(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - located, _ := LocateRefNode(cNode.Content[0], idx) + located, _, _ := LocateRefNode(cNode.Content[0], idx) assert.NotNil(t, located) } @@ -83,7 +84,7 @@ func TestLocateRefNode_BadNode(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - located, err := LocateRefNode(cNode.Content[0], idx) + located, _, err := LocateRefNode(cNode.Content[0], idx) // should both be empty. assert.Nil(t, located) @@ -107,7 +108,7 @@ func TestLocateRefNode_Path(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - located, _ := LocateRefNode(cNode.Content[0], idx) + located, _, _ := LocateRefNode(cNode.Content[0], idx) assert.NotNil(t, located) } @@ -128,7 +129,7 @@ func TestLocateRefNode_Path_NotFound(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - located, err := LocateRefNode(cNode.Content[0], idx) + located, _, err := LocateRefNode(cNode.Content[0], idx) assert.Nil(t, located) assert.Error(t, err) @@ -138,7 +139,7 @@ type pizza struct { Description NodeReference[string] } -func (p *pizza) Build(_, _ *yaml.Node, _ *index.SpecIndex) error { +func (p *pizza) Build(_ context.Context, _, _ *yaml.Node, _ *index.SpecIndex) error { return nil } @@ -160,7 +161,7 @@ func TestExtractObject(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - tag, err := ExtractObject[*pizza]("tags", &cNode, idx) + tag, err := ExtractObject[*pizza](context.Background(), "tags", &cNode, idx) assert.NoError(t, err) assert.NotNil(t, tag) assert.Equal(t, "hello pizza", tag.Value.Description.Value) @@ -184,7 +185,7 @@ func TestExtractObject_Ref(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - tag, err := ExtractObject[*pizza]("tags", &cNode, idx) + tag, err := ExtractObject[*pizza](context.Background(), "tags", &cNode, idx) assert.NoError(t, err) assert.NotNil(t, tag) assert.Equal(t, "hello pizza", tag.Value.Description.Value) @@ -210,7 +211,7 @@ func TestExtractObject_DoubleRef(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - tag, err := ExtractObject[*pizza]("tags", &cNode, idx) + tag, err := ExtractObject[*pizza](context.Background(), "tags", &cNode, idx) assert.NoError(t, err) assert.NotNil(t, tag) assert.Equal(t, "cake time!", tag.Value.Description.Value) @@ -241,7 +242,7 @@ func TestExtractObject_DoubleRef_Circular(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - _, err := ExtractObject[*pizza]("tags", &cNode, idx) + _, err := ExtractObject[*pizza](context.Background(), "tags", &cNode, idx) assert.Error(t, err) assert.Equal(t, "cake -> loopy -> cake", idx.GetCircularReferences()[0].GenerateJourneyPath()) } @@ -271,7 +272,7 @@ func TestExtractObject_DoubleRef_Circular_Fail(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - _, err := ExtractObject[*pizza]("tags", &cNode, idx) + _, err := ExtractObject[*pizza](context.Background(), "tags", &cNode, idx) assert.Error(t, err) } @@ -300,7 +301,7 @@ func TestExtractObject_DoubleRef_Circular_Direct(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - _, err := ExtractObject[*pizza]("tags", cNode.Content[0], idx) + _, err := ExtractObject[*pizza](context.Background(), "tags", cNode.Content[0], idx) assert.Error(t, err) assert.Equal(t, "cake -> loopy -> cake", idx.GetCircularReferences()[0].GenerateJourneyPath()) } @@ -330,7 +331,7 @@ func TestExtractObject_DoubleRef_Circular_Direct_Fail(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - _, err := ExtractObject[*pizza]("tags", cNode.Content[0], idx) + _, err := ExtractObject[*pizza](context.Background(), "tags", cNode.Content[0], idx) assert.Error(t, err) } @@ -339,7 +340,7 @@ type test_borked struct { DontWork int } -func (t test_borked) Build(_, root *yaml.Node, idx *index.SpecIndex) error { +func (t test_borked) Build(_ context.Context, _, root *yaml.Node, idx *index.SpecIndex) error { return fmt.Errorf("I am always going to fail, every thing") } @@ -347,7 +348,7 @@ type test_noGood struct { DontWork int } -func (t *test_noGood) Build(_, root *yaml.Node, idx *index.SpecIndex) error { +func (t *test_noGood) Build(_ context.Context, _, root *yaml.Node, idx *index.SpecIndex) error { return fmt.Errorf("I am always going to fail a core build") } @@ -355,7 +356,7 @@ type test_almostGood struct { AlmostWork NodeReference[int] } -func (t *test_almostGood) Build(_, root *yaml.Node, idx *index.SpecIndex) error { +func (t *test_almostGood) Build(_ context.Context, _, root *yaml.Node, idx *index.SpecIndex) error { return fmt.Errorf("I am always going to fail a build out") } @@ -363,7 +364,7 @@ type test_Good struct { AlmostWork NodeReference[int] } -func (t *test_Good) Build(_, root *yaml.Node, idx *index.SpecIndex) error { +func (t *test_Good) Build(_ context.Context, _, root *yaml.Node, idx *index.SpecIndex) error { return nil } @@ -383,7 +384,7 @@ func TestExtractObject_BadLowLevelModel(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - _, err := ExtractObject[*test_noGood]("thing", &cNode, idx) + _, err := ExtractObject[*test_noGood](context.Background(), "thing", &cNode, idx) assert.Error(t, err) } @@ -404,7 +405,7 @@ func TestExtractObject_BadBuild(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - _, err := ExtractObject[*test_almostGood]("thing", &cNode, idx) + _, err := ExtractObject[*test_almostGood](context.Background(), "thing", &cNode, idx) assert.Error(t, err) } @@ -425,7 +426,7 @@ func TestExtractObject_BadLabel(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - res, err := ExtractObject[*test_almostGood]("ding", &cNode, idx) + res, err := ExtractObject[*test_almostGood](context.Background(), "ding", &cNode, idx) assert.Nil(t, res.Value) assert.NoError(t, err) @@ -458,7 +459,7 @@ func TestExtractObject_PathIsCircular(t *testing.T) { mErr = yaml.Unmarshal([]byte(yml), &rootNode) assert.NoError(t, mErr) - res, err := ExtractObject[*test_Good]("thing", &rootNode, idx) + res, err := ExtractObject[*test_Good](context.Background(), "thing", &rootNode, idx) assert.NotNil(t, res.Value) assert.Error(t, err) // circular error would have been thrown. @@ -494,7 +495,7 @@ func TestExtractObject_PathIsCircular_IgnoreErrors(t *testing.T) { mErr = yaml.Unmarshal([]byte(yml), &rootNode) assert.NoError(t, mErr) - res, err := ExtractObject[*test_Good]("thing", &rootNode, idx) + res, err := ExtractObject[*test_Good](context.Background(), "thing", &rootNode, idx) assert.NotNil(t, res.Value) assert.NoError(t, err) // circular error would have been thrown, but we're ignoring them. @@ -517,7 +518,7 @@ func TestExtractObjectRaw(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - tag, err, _, _ := ExtractObjectRaw[*pizza](nil, cNode.Content[0], idx) + tag, err, _, _ := ExtractObjectRaw[*pizza](context.Background(), nil, cNode.Content[0], idx) assert.NoError(t, err) assert.NotNil(t, tag) assert.Equal(t, "hello pizza", tag.Description.Value) @@ -540,7 +541,7 @@ func TestExtractObjectRaw_With_Ref(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - tag, err, isRef, rv := ExtractObjectRaw[*pizza](nil, cNode.Content[0], idx) + tag, err, isRef, rv := ExtractObjectRaw[*pizza](context.Background(), nil, cNode.Content[0], idx) assert.NoError(t, err) assert.NotNil(t, tag) assert.Equal(t, "hello", tag.Description.Value) @@ -570,7 +571,7 @@ func TestExtractObjectRaw_Ref_Circular(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - tag, err, _, _ := ExtractObjectRaw[*pizza](nil, cNode.Content[0], idx) + tag, err, _, _ := ExtractObjectRaw[*pizza](context.Background(), nil, cNode.Content[0], idx) assert.Error(t, err) assert.NotNil(t, tag) @@ -592,7 +593,7 @@ func TestExtractObjectRaw_RefBroken(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - tag, err, _, _ := ExtractObjectRaw[*pizza](nil, cNode.Content[0], idx) + tag, err, _, _ := ExtractObjectRaw[*pizza](context.Background(), nil, cNode.Content[0], idx) assert.Error(t, err) assert.Nil(t, tag) @@ -614,7 +615,7 @@ func TestExtractObjectRaw_Ref_NonBuildable(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - _, err, _, _ := ExtractObjectRaw[*test_noGood](nil, cNode.Content[0], idx) + _, err, _, _ := ExtractObjectRaw[*test_noGood](context.Background(), nil, cNode.Content[0], idx) assert.Error(t, err) } @@ -635,7 +636,7 @@ func TestExtractObjectRaw_Ref_AlmostBuildable(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - _, err, _, _ := ExtractObjectRaw[*test_almostGood](nil, cNode.Content[0], idx) + _, err, _, _ := ExtractObjectRaw[*test_almostGood](context.Background(), nil, cNode.Content[0], idx) assert.Error(t, err) } @@ -660,7 +661,7 @@ func TestExtractArray(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - things, _, _, err := ExtractArray[*pizza]("things", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*pizza](context.Background(), "things", cNode.Content[0], idx) assert.NoError(t, err) assert.NotNil(t, things) assert.Equal(t, "one", things[0].Value.Description.Value) @@ -687,7 +688,7 @@ func TestExtractArray_Ref(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - things, _, _, err := ExtractArray[*pizza]("things", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*pizza](context.Background(), "things", cNode.Content[0], idx) assert.NoError(t, err) assert.NotNil(t, things) assert.Equal(t, "one", things[0].Value.Description.Value) @@ -714,7 +715,7 @@ func TestExtractArray_Ref_Unbuildable(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - things, _, _, err := ExtractArray[*test_noGood]("", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*test_noGood](context.Background(), "", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } @@ -742,7 +743,7 @@ func TestExtractArray_Ref_Circular(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - things, _, _, err := ExtractArray[*test_Good]("", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*test_Good](context.Background(), "", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } @@ -770,7 +771,7 @@ func TestExtractArray_Ref_Bad(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - things, _, _, err := ExtractArray[*test_Good]("", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*test_Good](context.Background(), "", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } @@ -799,7 +800,7 @@ func TestExtractArray_Ref_Nested(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - things, _, _, err := ExtractArray[*test_Good]("limes", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*test_Good](context.Background(), "limes", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } @@ -828,7 +829,7 @@ func TestExtractArray_Ref_Nested_Circular(t *testing.T) { var cNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &cNode) - things, _, _, err := ExtractArray[*test_Good]("limes", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*test_Good](context.Background(), "limes", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 1) } @@ -855,7 +856,7 @@ func TestExtractArray_Ref_Nested_BadRef(t *testing.T) { var cNode yaml.Node e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractArray[*test_Good]("limes", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*test_Good](context.Background(), "limes", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } @@ -884,7 +885,7 @@ func TestExtractArray_Ref_Nested_CircularFlat(t *testing.T) { var cNode yaml.Node e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractArray[*test_Good]("limes", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*test_Good](context.Background(), "limes", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } @@ -906,7 +907,7 @@ func TestExtractArray_BadBuild(t *testing.T) { var cNode yaml.Node e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractArray[*test_noGood]("limes", cNode.Content[0], idx) + things, _, _, err := ExtractArray[*test_noGood](context.Background(), "limes", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } @@ -965,7 +966,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookup[*test_Good](cNode.Content[0], idx) + things, err := ExtractMapNoLookup[*test_Good](context.Background(), cNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, things, 1) @@ -988,7 +989,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookupExtensions[*test_Good](cNode.Content[0], idx, true) + things, err := ExtractMapNoLookupExtensions[*test_Good](context.Background(), cNode.Content[0], idx, true) assert.NoError(t, err) assert.Len(t, things, 2) @@ -1021,7 +1022,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookupExtensions[*test_Good](cNode.Content[0], idx, true) + things, err := ExtractMapNoLookupExtensions[*test_Good](context.Background(), cNode.Content[0], idx, true) assert.NoError(t, err) assert.Len(t, things, 4) @@ -1044,7 +1045,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookupExtensions[*test_Good](cNode.Content[0], idx, false) + things, err := ExtractMapNoLookupExtensions[*test_Good](context.Background(), cNode.Content[0], idx, false) assert.NoError(t, err) assert.Len(t, things, 1) @@ -1070,7 +1071,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMapExtensions[*test_Good]("one", cNode.Content[0], idx, true) + things, _, _, err := ExtractMapExtensions[*test_Good](context.Background(), "one", cNode.Content[0], idx, true) assert.NoError(t, err) assert.Len(t, things, 1) } @@ -1092,7 +1093,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMapExtensions[*test_Good]("one", cNode.Content[0], idx, false) + things, _, _, err := ExtractMapExtensions[*test_Good](context.Background(), "one", cNode.Content[0], idx, false) assert.NoError(t, err) assert.Len(t, things, 0) } @@ -1117,7 +1118,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookup[*test_Good](cNode.Content[0], idx) + things, err := ExtractMapNoLookup[*test_Good](context.Background(), cNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, things, 1) @@ -1143,7 +1144,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookup[*test_Good](cNode.Content[0], idx) + things, err := ExtractMapNoLookup[*test_Good](context.Background(), cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) @@ -1175,7 +1176,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookup[*test_Good](cNode.Content[0], idx) + things, err := ExtractMapNoLookup[*test_Good](context.Background(), cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 1) @@ -1201,7 +1202,7 @@ hello: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookup[*test_noGood](cNode.Content[0], idx) + things, err := ExtractMapNoLookup[*test_noGood](context.Background(), cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) @@ -1227,7 +1228,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, err := ExtractMapNoLookup[*test_almostGood](cNode.Content[0], idx) + things, err := ExtractMapNoLookup[*test_almostGood](context.Background(), cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) @@ -1250,7 +1251,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "one", cNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, things, 1) @@ -1277,7 +1278,7 @@ one: e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "one", cNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, things, 1) @@ -1307,7 +1308,7 @@ func TestExtractMapFlat_DoubleRef(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "one", cNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, things, 1) @@ -1337,7 +1338,7 @@ func TestExtractMapFlat_DoubleRef_Error(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_almostGood]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_almostGood](context.Background(), "one", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) @@ -1364,7 +1365,7 @@ func TestExtractMapFlat_DoubleRef_Error_NotFound(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_almostGood]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_almostGood](context.Background(), "one", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) @@ -1396,7 +1397,7 @@ func TestExtractMapFlat_DoubleRef_Circles(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "one", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 1) @@ -1423,7 +1424,7 @@ func TestExtractMapFlat_Ref_Error(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_almostGood]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_almostGood](context.Background(), "one", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) @@ -1453,7 +1454,7 @@ func TestExtractMapFlat_Ref_Circ_Error(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "one", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 1) } @@ -1483,7 +1484,7 @@ func TestExtractMapFlat_Ref_Nested_Circ_Error(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "one", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 1) } @@ -1509,7 +1510,7 @@ func TestExtractMapFlat_Ref_Nested_Error(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "one", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } @@ -1535,7 +1536,7 @@ func TestExtractMapFlat_BadKey_Ref_Nested_Error(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("not-even-there", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "not-even-there", cNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, things, 0) } @@ -1564,7 +1565,7 @@ func TestExtractMapFlat_Ref_Bad(t *testing.T) { e := yaml.Unmarshal([]byte(yml), &cNode) assert.NoError(t, e) - things, _, _, err := ExtractMap[*test_Good]("one", cNode.Content[0], idx) + things, _, _, err := ExtractMap[*test_Good](context.Background(), "one", cNode.Content[0], idx) assert.Error(t, err) assert.Len(t, things, 0) } diff --git a/datamodel/low/reference_test.go b/datamodel/low/reference_test.go index 8ef9861..c1129c7 100644 --- a/datamodel/low/reference_test.go +++ b/datamodel/low/reference_test.go @@ -4,15 +4,15 @@ package low import ( - "crypto/sha256" - "fmt" - "github.com/pb33f/libopenapi/utils" - "strings" - "testing" + "crypto/sha256" + "fmt" + "github.com/pb33f/libopenapi/utils" + "strings" + "testing" - "github.com/pb33f/libopenapi/index" - "github.com/stretchr/testify/assert" - "gopkg.in/yaml.v3" + "github.com/pb33f/libopenapi/index" + "github.com/stretchr/testify/assert" + "gopkg.in/yaml.v3" ) func TestNodeReference_IsEmpty(t *testing.T) { @@ -130,7 +130,7 @@ func TestIsCircular_LookupFromJourney(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - ref, err := LocateRefNode(idxNode.Content[0], idx) + ref, _, err := LocateRefNode(idxNode.Content[0], idx) assert.NoError(t, err) assert.True(t, IsCircular(ref, idx)) } @@ -163,7 +163,7 @@ func TestIsCircular_LookupFromJourney_Optional(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - ref, err := LocateRefNode(idxNode.Content[0], idx) + ref, _, err := LocateRefNode(idxNode.Content[0], idx) assert.NoError(t, err) assert.True(t, IsCircular(ref, idx)) } @@ -199,7 +199,7 @@ func TestIsCircular_LookupFromLoopPoint(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - ref, err := LocateRefNode(idxNode.Content[0], idx) + ref, _, err := LocateRefNode(idxNode.Content[0], idx) assert.NoError(t, err) assert.True(t, IsCircular(ref, idx)) } @@ -231,7 +231,7 @@ func TestIsCircular_LookupFromLoopPoint_Optional(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - ref, err := LocateRefNode(idxNode.Content[0], idx) + ref, _, err := LocateRefNode(idxNode.Content[0], idx) assert.NoError(t, err) assert.True(t, IsCircular(ref, idx)) } @@ -352,7 +352,7 @@ func TestGetCircularReferenceResult_FromJourney(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - ref, err := LocateRefNode(idxNode.Content[0], idx) + ref, _, err := LocateRefNode(idxNode.Content[0], idx) assert.NoError(t, err) circ := GetCircularReferenceResult(ref, idx) assert.NotNil(t, circ) @@ -386,7 +386,7 @@ func TestGetCircularReferenceResult_FromJourney_Optional(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - ref, err := LocateRefNode(idxNode.Content[0], idx) + ref, _, err := LocateRefNode(idxNode.Content[0], idx) assert.NoError(t, err) circ := GetCircularReferenceResult(ref, idx) assert.NotNil(t, circ) @@ -424,7 +424,7 @@ func TestGetCircularReferenceResult_FromLoopPoint(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - ref, err := LocateRefNode(idxNode.Content[0], idx) + ref, _, err := LocateRefNode(idxNode.Content[0], idx) assert.NoError(t, err) circ := GetCircularReferenceResult(ref, idx) assert.NotNil(t, circ) @@ -458,7 +458,7 @@ func TestGetCircularReferenceResult_FromLoopPoint_Optional(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - ref, err := LocateRefNode(idxNode.Content[0], idx) + ref, _, err := LocateRefNode(idxNode.Content[0], idx) assert.NoError(t, err) circ := GetCircularReferenceResult(ref, idx) assert.NotNil(t, circ) diff --git a/datamodel/low/v2/definitions_test.go b/datamodel/low/v2/definitions_test.go index dedec28..c648c85 100644 --- a/datamodel/low/v2/definitions_test.go +++ b/datamodel/low/v2/definitions_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -25,7 +26,7 @@ func TestDefinitions_Schemas_Build_Error(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -44,7 +45,7 @@ func TestDefinitions_Parameters_Build_Error(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -63,7 +64,7 @@ func TestDefinitions_Hash(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Equal(t, "26d23786e6873e1a337f8e9be85f7de1490e4ff6cd303c3b15e593a25a6a149d", low.GenerateHashString(&n)) @@ -83,7 +84,7 @@ func TestDefinitions_Responses_Build_Error(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -102,7 +103,7 @@ func TestDefinitions_Security_Build_Error(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } diff --git a/datamodel/low/v2/examples_test.go b/datamodel/low/v2/examples_test.go index 28eb350..9591ea9 100644 --- a/datamodel/low/v2/examples_test.go +++ b/datamodel/low/v2/examples_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -27,7 +28,7 @@ nothing: int` var n Examples _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `anything: cake: burger @@ -43,7 +44,7 @@ yes: var n2 Examples _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/header_test.go b/datamodel/low/v2/header_test.go index 3677020..9e3f59d 100644 --- a/datamodel/low/v2/header_test.go +++ b/datamodel/low/v2/header_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -25,7 +26,7 @@ func TestHeader_Build(t *testing.T) { err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -44,7 +45,7 @@ default: var n Header _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NotNil(t, n.Default.Value) assert.Len(t, n.Default.Value, 3) @@ -65,7 +66,7 @@ func TestHeader_DefaultAsObject(t *testing.T) { var n Header _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NotNil(t, n.Default.Value) } @@ -80,7 +81,7 @@ func TestHeader_NoDefault(t *testing.T) { var n Header _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Equal(t, 12, n.Minimum.Value) } @@ -116,7 +117,7 @@ multipleOf: 12` var n Header _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `description: head items: @@ -148,7 +149,7 @@ pattern: wow var n2 Header _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/items_test.go b/datamodel/low/v2/items_test.go index c34ed4d..a5bf4b3 100644 --- a/datamodel/low/v2/items_test.go +++ b/datamodel/low/v2/items_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -25,7 +26,7 @@ func TestItems_Build(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -42,7 +43,7 @@ default: var n Items _ = low.BuildModel(&idxNode, &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Len(t, n.Default.Value, 2) assert.Len(t, n.GetExtensions(), 1) @@ -60,7 +61,7 @@ func TestItems_DefaultAsMap(t *testing.T) { var n Items _ = low.BuildModel(&idxNode, &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Len(t, n.Default.Value, 2) @@ -96,7 +97,7 @@ multipleOf: 12` var n Items _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `items: type: int @@ -127,7 +128,7 @@ pattern: wow var n2 Items _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/operation_test.go b/datamodel/low/v2/operation_test.go index f658358..2e13b19 100644 --- a/datamodel/low/v2/operation_test.go +++ b/datamodel/low/v2/operation_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/pb33f/libopenapi/index" @@ -26,7 +27,7 @@ func TestOperation_Build_ExternalDocs(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -45,7 +46,7 @@ func TestOperation_Build_Params(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -64,7 +65,7 @@ func TestOperation_Build_Responses(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -83,7 +84,7 @@ func TestOperation_Build_Security(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -126,7 +127,7 @@ x-smoke: not for a while` var n Operation _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `summary: a nice day tags: @@ -164,7 +165,7 @@ security: var n2 Operation _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/parameter_test.go b/datamodel/low/v2/parameter_test.go index 48b9575..ae2cedd 100644 --- a/datamodel/low/v2/parameter_test.go +++ b/datamodel/low/v2/parameter_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/pb33f/libopenapi/index" @@ -25,7 +26,7 @@ func TestParameter_Build(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -44,7 +45,7 @@ func TestParameter_Build_Items(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -63,7 +64,7 @@ func TestParameter_DefaultSlice(t *testing.T) { var n Parameter _ = low.BuildModel(&idxNode, &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Len(t, n.Default.Value.([]any), 3) } @@ -80,7 +81,7 @@ func TestParameter_DefaultMap(t *testing.T) { var n Parameter _ = low.BuildModel(&idxNode, &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Len(t, n.Default.Value.(map[string]any), 2) } @@ -95,7 +96,7 @@ func TestParameter_NoDefaultNoError(t *testing.T) { var n Parameter _ = low.BuildModel(&idxNode, &n) - err := n.Build(nil, idxNode.Content[0], idx) + err := n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) } @@ -136,7 +137,7 @@ required: true` var n Parameter _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `items: type: int @@ -174,7 +175,7 @@ allowEmptyValue: true var n2 Parameter _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/path_item_test.go b/datamodel/low/v2/path_item_test.go index 2efff31..aac313e 100644 --- a/datamodel/low/v2/path_item_test.go +++ b/datamodel/low/v2/path_item_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -25,7 +26,7 @@ func TestPathItem_Build_Params(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -44,7 +45,7 @@ func TestPathItem_Build_MethodFail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -76,7 +77,7 @@ x-winter: is coming` var n PathItem _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `post: description: post me there @@ -103,7 +104,7 @@ parameters: var n2 PathItem _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/paths_test.go b/datamodel/low/v2/paths_test.go index 48752db..41d26af 100644 --- a/datamodel/low/v2/paths_test.go +++ b/datamodel/low/v2/paths_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "fmt" "testing" @@ -27,7 +28,7 @@ func TestPaths_Build(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -47,7 +48,7 @@ func TestPaths_FindPathAndKey(t *testing.T) { var n Paths _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) _, k := n.FindPathAndKey("/no/pizza") assert.Equal(t, "because i'm fat", k.Value.Post.Value.Description.Value) @@ -74,7 +75,7 @@ x-milk: creamy` var n Paths _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `x-milk: creamy /spl/unk: @@ -94,7 +95,7 @@ x-milk: creamy` var n2 Paths _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) @@ -123,6 +124,6 @@ func TestPaths_Build_Fail_Many(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } diff --git a/datamodel/low/v2/response_test.go b/datamodel/low/v2/response_test.go index 4ca1146..786932a 100644 --- a/datamodel/low/v2/response_test.go +++ b/datamodel/low/v2/response_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -25,7 +26,7 @@ func TestResponse_Build_Schema(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -44,7 +45,7 @@ func TestResponse_Build_Examples(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -63,7 +64,7 @@ func TestResponse_Build_Headers(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -87,7 +88,7 @@ x-herbs: missing` var n Response _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `description: your thing, sir. examples: @@ -106,7 +107,7 @@ headers: var n2 Response _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/responses_test.go b/datamodel/low/v2/responses_test.go index ae38e7f..5cb3c24 100644 --- a/datamodel/low/v2/responses_test.go +++ b/datamodel/low/v2/responses_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -24,7 +25,7 @@ func TestResponses_Build_Response(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -43,7 +44,7 @@ func TestResponses_Build_Response_Default(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -61,7 +62,7 @@ func TestResponses_Build_WrongType(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -88,7 +89,7 @@ x-tea: warm var n Responses _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `401: description: and you are? @@ -110,7 +111,7 @@ x-tea: warm` var n2 Responses _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/scopes_test.go b/datamodel/low/v2/scopes_test.go index 8bcd33b..7c0b521 100644 --- a/datamodel/low/v2/scopes_test.go +++ b/datamodel/low/v2/scopes_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -23,7 +24,7 @@ x-men: needs a reboot or a refresh` var n Scopes _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `x-men: needs a reboot or a refresh pizza: beans @@ -35,7 +36,7 @@ burgers: chips` var n2 Scopes _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v2/security_scheme_test.go b/datamodel/low/v2/security_scheme_test.go index 81b0551..8a4bf67 100644 --- a/datamodel/low/v2/security_scheme_test.go +++ b/datamodel/low/v2/security_scheme_test.go @@ -4,6 +4,7 @@ package v2 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -25,7 +26,7 @@ func TestSecurityScheme_Build_Borked(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -45,7 +46,7 @@ func TestSecurityScheme_Build_Scopes(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, n.Scopes.Value.Values, 2) @@ -70,7 +71,7 @@ x-beer: not for a while` var n SecurityScheme _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `in: my heart scopes: @@ -90,7 +91,7 @@ authorizationUrl: https://pb33f.io var n2 SecurityScheme _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/callback_test.go b/datamodel/low/v3/callback_test.go index c98389e..3e2243d 100644 --- a/datamodel/low/v3/callback_test.go +++ b/datamodel/low/v3/callback_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -33,7 +34,7 @@ func TestCallback_Build_Success(t *testing.T) { err := low.BuildModel(rootNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, rootNode.Content[0], nil) + err = n.Build(context.Background(), nil, rootNode.Content[0], nil) assert.NoError(t, err) assert.Len(t, n.Expression.Value, 1) @@ -65,7 +66,7 @@ func TestCallback_Build_Error(t *testing.T) { err := low.BuildModel(rootNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, rootNode.Content[0], idx) + err = n.Build(context.Background(), nil, rootNode.Content[0], idx) assert.Error(t, err) } @@ -100,7 +101,7 @@ func TestCallback_Build_Using_InlineRef(t *testing.T) { err := low.BuildModel(rootNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, rootNode.Content[0], idx) + err = n.Build(context.Background(), nil, rootNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, n.Expression.Value, 1) @@ -128,7 +129,7 @@ x-weed: loved` var n Callback _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `burgers: description: tasty! @@ -145,7 +146,7 @@ beer: var n2 Callback _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/components_test.go b/datamodel/low/v3/components_test.go index 18951d7..e136e05 100644 --- a/datamodel/low/v3/components_test.go +++ b/datamodel/low/v3/components_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "fmt" "testing" @@ -76,7 +77,7 @@ func TestComponents_Build_Success(t *testing.T) { err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(idxNode.Content[0], idx) + err = n.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "one of many", n.FindSchema("one").Value.Schema().Description.Value) @@ -118,7 +119,7 @@ func TestComponents_Build_Success_Skip(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(idxNode.Content[0], idx) + err = n.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) } @@ -139,7 +140,7 @@ func TestComponents_Build_Fail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(idxNode.Content[0], idx) + err = n.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -161,7 +162,7 @@ func TestComponents_Build_ParameterFail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(idxNode.Content[0], idx) + err = n.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -191,7 +192,7 @@ func TestComponents_Build_ParameterFail_Many(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(idxNode.Content[0], idx) + err = n.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -211,7 +212,7 @@ func TestComponents_Build_Fail_TypeFail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(idxNode.Content[0], idx) + err = n.Build(context.Background(), idxNode.Content[0], idx) assert.Error(t, err) } @@ -230,7 +231,7 @@ headers: err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(idxNode.Content[0], idx) + err = n.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "seagull", n.FindExtension("x-curry").Value) @@ -249,7 +250,7 @@ func TestComponents_Build_HashEmpty(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(idxNode.Content[0], idx) + err = n.Build(context.Background(), idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "seagull", n.FindExtension("x-curry").Value) assert.Len(t, n.GetExtensions(), 1) diff --git a/datamodel/low/v3/encoding_test.go b/datamodel/low/v3/encoding_test.go index 1f1501d..7f0c840 100644 --- a/datamodel/low/v3/encoding_test.go +++ b/datamodel/low/v3/encoding_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -31,7 +32,7 @@ explode: true` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "hot/cakes", n.ContentType.Value) assert.Equal(t, true, n.AllowReserved.Value) @@ -59,7 +60,7 @@ headers: err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -79,7 +80,7 @@ allowReserved: true` var n Encoding _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `explode: true contentType: application/waffle @@ -96,7 +97,7 @@ style: post modern var n2 Encoding _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/header_test.go b/datamodel/low/v3/header_test.go index 44df47b..a80dc39 100644 --- a/datamodel/low/v3/header_test.go +++ b/datamodel/low/v3/header_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/pb33f/libopenapi/index" @@ -53,7 +54,7 @@ content: err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "michelle, meddy and maddy", n.Description.Value) assert.True(t, n.AllowReserved.Value) @@ -101,7 +102,7 @@ func TestHeader_Build_Success_Examples(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) exp := n.FindExample("family").Value @@ -129,7 +130,7 @@ func TestHeader_Build_Fail_Examples(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -145,7 +146,7 @@ func TestHeader_Build_Fail_Schema(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -162,7 +163,7 @@ func TestHeader_Build_Fail_Content(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -195,7 +196,7 @@ x-mango: chutney` var n Header _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `x-mango: chutney required: true @@ -224,7 +225,7 @@ schema: var n2 Header _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/link_test.go b/datamodel/low/v3/link_test.go index cb81f4b..3a80241 100644 --- a/datamodel/low/v3/link_test.go +++ b/datamodel/low/v3/link_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -33,7 +34,7 @@ x-linky: slinky err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "#/someref", n.OperationRef.Value) @@ -75,7 +76,7 @@ server: err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -99,7 +100,7 @@ x-mcdonalds: bigmac` var n Link _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `parameters: bacon: eggs @@ -118,7 +119,7 @@ server: var n2 Link _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/media_type_test.go b/datamodel/low/v3/media_type_test.go index 27764da..f8bc87f 100644 --- a/datamodel/low/v3/media_type_test.go +++ b/datamodel/low/v3/media_type_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -33,7 +34,7 @@ x-rock: and roll` err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "and roll", n.FindExtension("x-rock").Value) assert.Equal(t, "string", n.Schema.Value.Schema().Type.Value.A) @@ -56,7 +57,7 @@ func TestMediaType_Build_Fail_Schema(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -73,7 +74,7 @@ func TestMediaType_Build_Fail_Examples(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -91,7 +92,7 @@ func TestMediaType_Build_Fail_Encoding(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -116,7 +117,7 @@ x-done: for the day!` var n MediaType _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `encoding: meaty/chewy: @@ -137,7 +138,7 @@ example: a thing` var n2 MediaType _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/oauth_flows_test.go b/datamodel/low/v3/oauth_flows_test.go index ea5357b..a556a28 100644 --- a/datamodel/low/v3/oauth_flows_test.go +++ b/datamodel/low/v3/oauth_flows_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -30,7 +31,7 @@ x-tasty: herbs err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "herbs", n.FindExtension("x-tasty").Value) assert.Equal(t, "https://pb33f.io/auth", n.AuthorizationUrl.Value) @@ -54,7 +55,7 @@ x-tasty: herbs` err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "herbs", n.FindExtension("x-tasty").Value) assert.Equal(t, "https://pb33f.io/auth", n.Implicit.Value.AuthorizationUrl.Value) @@ -74,7 +75,7 @@ func TestOAuthFlow_Build_Implicit_Fail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -91,7 +92,7 @@ func TestOAuthFlow_Build_Password(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "https://pb33f.io/auth", n.Password.Value.AuthorizationUrl.Value) } @@ -109,7 +110,7 @@ func TestOAuthFlow_Build_Password_Fail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -126,7 +127,7 @@ func TestOAuthFlow_Build_ClientCredentials(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "https://pb33f.io/auth", n.ClientCredentials.Value.AuthorizationUrl.Value) } @@ -144,7 +145,7 @@ func TestOAuthFlow_Build_ClientCredentials_Fail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -161,7 +162,7 @@ func TestOAuthFlow_Build_AuthCode(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "https://pb33f.io/auth", n.AuthorizationCode.Value.AuthorizationUrl.Value) } @@ -179,7 +180,7 @@ func TestOAuthFlow_Build_AuthCode_Fail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -198,7 +199,7 @@ x-sleepy: tired` var n OAuthFlow _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `refreshUrl: https://pb33f.io/refresh tokenUrl: https://pb33f.io/token @@ -213,7 +214,7 @@ scopes: var n2 OAuthFlow _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) @@ -239,7 +240,7 @@ x-code: cody var n OAuthFlows _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `authorizationCode: authorizationUrl: https://pb33f.io/auth @@ -258,7 +259,7 @@ password: var n2 OAuthFlows _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/operation_test.go b/datamodel/low/v3/operation_test.go index 1d7663e..18a4f88 100644 --- a/datamodel/low/v3/operation_test.go +++ b/datamodel/low/v3/operation_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/pb33f/libopenapi/index" @@ -50,7 +51,7 @@ servers: err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, n.Tags.Value, 2) @@ -87,7 +88,7 @@ func TestOperation_Build_FailDocs(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -104,7 +105,7 @@ func TestOperation_Build_FailParams(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -121,7 +122,7 @@ func TestOperation_Build_FailRequestBody(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -138,7 +139,7 @@ func TestOperation_Build_FailResponses(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -155,7 +156,7 @@ func TestOperation_Build_FailCallbacks(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -172,7 +173,7 @@ func TestOperation_Build_FailSecurity(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -189,7 +190,7 @@ func TestOperation_Build_FailServers(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -229,7 +230,7 @@ x-mint: sweet` var n Operation _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `tags: - nice @@ -265,7 +266,7 @@ x-mint: sweet` var n2 Operation _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) @@ -300,7 +301,7 @@ security: []` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, n.Security.Value, 0) diff --git a/datamodel/low/v3/parameter_test.go b/datamodel/low/v3/parameter_test.go index 44c5738..4769e4c 100644 --- a/datamodel/low/v3/parameter_test.go +++ b/datamodel/low/v3/parameter_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/pb33f/libopenapi/index" @@ -55,7 +56,7 @@ content: err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "michelle, meddy and maddy", n.Description.Value) assert.True(t, n.AllowReserved.Value) @@ -105,7 +106,7 @@ func TestParameter_Build_Success_Examples(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) exp := n.FindExample("family").Value @@ -133,7 +134,7 @@ func TestParameter_Build_Fail_Examples(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -149,7 +150,7 @@ func TestParameter_Build_Fail_Schema(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -166,7 +167,7 @@ func TestParameter_Build_Fail_Content(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -216,7 +217,7 @@ content: var n Parameter _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `description: michelle, meddy and maddy required: true @@ -262,7 +263,7 @@ content: var n2 Parameter _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/path_item.go b/datamodel/low/v3/path_item.go index 9a38966..95cb239 100644 --- a/datamodel/low/v3/path_item.go +++ b/datamodel/low/v3/path_item.go @@ -222,7 +222,7 @@ func (p *PathItem) Build(ctx context.Context, _, root *yaml.Node, idx *index.Spe } pathNode = r foundContext = nCtx - foundContext = context.WithValue(foundContext, "foundIndex", newIdx) + foundContext = context.WithValue(foundContext, index.FoundIndexKey, newIdx) if r.Tag == "" { // If it's a node from file, tag is empty @@ -239,7 +239,7 @@ func (p *PathItem) Build(ctx context.Context, _, root *yaml.Node, idx *index.Spe pathNode.Content[1].Value, pathNode.Content[1].Line, pathNode.Content[1].Column) } } else { - foundContext = context.WithValue(foundContext, "foundIndex", idx) + foundContext = context.WithValue(foundContext, index.FoundIndexKey, idx) } wg.Add(1) low.BuildModelAsync(pathNode, &op, &wg, &errors) @@ -285,7 +285,7 @@ func (p *PathItem) Build(ctx context.Context, _, root *yaml.Node, idx *index.Spe ref = op.Reference } - err := op.Value.Build(op.Context, op.KeyNode, op.ValueNode, op.Context.Value("foundIndex").(*index.SpecIndex)) + err := op.Value.Build(op.Context, op.KeyNode, op.ValueNode, op.Context.Value(index.FoundIndexKey).(*index.SpecIndex)) if ref != "" { op.Value.Reference.Reference = ref } diff --git a/datamodel/low/v3/path_item_test.go b/datamodel/low/v3/path_item_test.go index cd5f631..e83b0d4 100644 --- a/datamodel/low/v3/path_item_test.go +++ b/datamodel/low/v3/path_item_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -43,7 +44,7 @@ x-byebye: boebert` var n PathItem _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `get: description: get me @@ -75,7 +76,7 @@ summary: it's another path item` var n2 PathItem _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/paths.go b/datamodel/low/v3/paths.go index b389c09..2c20657 100644 --- a/datamodel/low/v3/paths.go +++ b/datamodel/low/v3/paths.go @@ -159,10 +159,11 @@ func (p *Paths) Build(ctx context.Context, _, root *yaml.Node, idx *index.SpecIn _ = low.BuildModel(pNode, path) err := path.Build(ctx, cNode, pNode, idx) - // don't fail the pipeline if there is an error, log it instead. if err != nil { + if idx.GetLogger() != nil { + idx.GetLogger().Error(fmt.Sprintf("error building path item '%s'", err.Error())) + } //return buildResult{}, err - idx.GetLogger().Error(fmt.Sprintf("error building path item '%s'", err.Error())) } return buildResult{ diff --git a/datamodel/low/v3/paths_test.go b/datamodel/low/v3/paths_test.go index 9ab63e6..69fbf8f 100644 --- a/datamodel/low/v3/paths_test.go +++ b/datamodel/low/v3/paths_test.go @@ -4,7 +4,11 @@ package v3 import ( + "bytes" + "context" "fmt" + "log/slog" + "strings" "testing" "github.com/pb33f/libopenapi/datamodel/low" @@ -47,7 +51,7 @@ x-milk: cold` err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) path := n.FindPath("/some/path").Value @@ -79,7 +83,7 @@ func TestPaths_Build_Fail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -105,7 +109,7 @@ func TestPaths_Build_FailRef(t *testing.T) { err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) somePath := n.FindPath("/some/path").Value @@ -134,14 +138,25 @@ func TestPaths_Build_FailRefDeadEnd(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - idx := index.NewSpecIndex(&idxNode) + + var b []byte + buf := bytes.NewBuffer(b) + log := slog.New(slog.NewTextHandler(buf, &slog.HandlerOptions{ + Level: slog.LevelError, + })) + cfg := index.SpecIndexConfig{ + Logger: log, + } + idx := index.NewSpecIndexWithConfig(&idxNode, &cfg) var n Paths err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) - assert.Error(t, err) + n.Build(context.Background(), nil, idxNode.Content[0], idx) + + assert.Contains(t, buf.String(), "msg=\"unable to locate reference anywhere in the rolodex\" reference=#/no/path") + assert.Contains(t, buf.String(), "msg=\"unable to locate reference anywhere in the rolodex\" reference=#/nowhere") } func TestPaths_Build_SuccessRef(t *testing.T) { @@ -160,13 +175,14 @@ func TestPaths_Build_SuccessRef(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) + idx := index.NewSpecIndex(&idxNode) var n Paths err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) somePath := n.FindPath("/some/path").Value @@ -189,14 +205,24 @@ func TestPaths_Build_BadParams(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - idx := index.NewSpecIndex(&idxNode) + + var b []byte + buf := bytes.NewBuffer(b) + log := slog.New(slog.NewTextHandler(buf, &slog.HandlerOptions{ + Level: slog.LevelError, + })) + cfg := index.SpecIndexConfig{ + Logger: log, + } + idx := index.NewSpecIndexWithConfig(&idxNode, &cfg) var n Paths err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) - assert.Error(t, err) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) + assert.Contains(t, buf.String(), "array build failed, input is not an array, line 3, column 5'") + } func TestPaths_Build_BadRef(t *testing.T) { @@ -215,14 +241,27 @@ func TestPaths_Build_BadRef(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - idx := index.NewSpecIndex(&idxNode) + + var b []byte + buf := bytes.NewBuffer(b) + log := slog.New(slog.NewTextHandler(buf, &slog.HandlerOptions{ + Level: slog.LevelError, + })) + cfg := index.SpecIndexConfig{ + Logger: log, + } + idx := index.NewSpecIndexWithConfig(&idxNode, &cfg) var n Paths err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) - assert.Error(t, err) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) + + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) + assert.Contains(t, buf.String(), "unable to locate reference anywhere in the rolodex\" reference=#/no-where") + assert.Contains(t, buf.String(), "error building path item 'path item build failed: cannot find reference: #/no-where at line 4, col 10'") + } func TestPathItem_Build_GoodRef(t *testing.T) { @@ -251,7 +290,7 @@ func TestPathItem_Build_GoodRef(t *testing.T) { err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) } @@ -275,14 +314,25 @@ func TestPathItem_Build_BadRef(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - idx := index.NewSpecIndex(&idxNode) + + var b []byte + buf := bytes.NewBuffer(b) + log := slog.New(slog.NewTextHandler(buf, &slog.HandlerOptions{ + Level: slog.LevelError, + })) + cfg := index.SpecIndexConfig{ + Logger: log, + } + idx := index.NewSpecIndexWithConfig(&idxNode, &cfg) var n Paths err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) - assert.Error(t, err) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) + assert.Contains(t, buf.String(), "unable to locate reference anywhere in the rolodex\" reference=#/~1cakes/NotFound") + assert.Contains(t, buf.String(), "error building path item 'path item build failed: cannot find reference: #/~1another~1path/get at line 4, col 10") + } func TestPathNoOps(t *testing.T) { @@ -299,7 +349,7 @@ func TestPathNoOps(t *testing.T) { err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) } @@ -329,7 +379,7 @@ func TestPathItem_Build_Using_Ref(t *testing.T) { err := low.BuildModel(rootNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, rootNode.Content[0], idx) + err = n.Build(context.Background(), nil, rootNode.Content[0], idx) assert.NoError(t, err) somePath := n.FindPath("/a/path") @@ -372,7 +422,7 @@ func TestPath_Build_Using_CircularRef(t *testing.T) { err := low.BuildModel(rootNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, rootNode.Content[0], idx) + err = n.Build(context.Background(), nil, rootNode.Content[0], idx) assert.Error(t, err) } @@ -391,7 +441,16 @@ func TestPath_Build_Using_CircularRefWithOp(t *testing.T) { var idxNode yaml.Node mErr := yaml.Unmarshal([]byte(yml), &idxNode) assert.NoError(t, mErr) - idx := index.NewSpecIndex(&idxNode) + + var b []byte + buf := bytes.NewBuffer(b) + log := slog.New(slog.NewTextHandler(buf, &slog.HandlerOptions{ + Level: slog.LevelError, + })) + cfg := index.SpecIndexConfig{ + Logger: log, + } + idx := index.NewSpecIndexWithConfig(&idxNode, &cfg) resolve := index.NewResolver(idx) errs := resolve.CheckForCircularReferences() @@ -409,8 +468,8 @@ func TestPath_Build_Using_CircularRefWithOp(t *testing.T) { err := low.BuildModel(rootNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, rootNode.Content[0], idx) - assert.Error(t, err) + _ = n.Build(context.Background(), nil, rootNode.Content[0], idx) + assert.Contains(t, buf.String(), "error building path item 'build schema failed: circular reference 'post -> post -> post' found during lookup at line 4, column 7, It cannot be resolved'") } @@ -423,14 +482,23 @@ func TestPaths_Build_BrokenOp(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - idx := index.NewSpecIndex(&idxNode) + + var b []byte + buf := bytes.NewBuffer(b) + log := slog.New(slog.NewTextHandler(buf, &slog.HandlerOptions{ + Level: slog.LevelError, + })) + cfg := index.SpecIndexConfig{ + Logger: log, + } + idx := index.NewSpecIndexWithConfig(&idxNode, &cfg) var n Paths err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) - assert.Error(t, err) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) + assert.Contains(t, buf.String(), "error building path item 'object extraction failed: reference at line 4, column 7 is empty, it cannot be resolved'") } func TestPaths_Hash(t *testing.T) { @@ -449,7 +517,7 @@ x-france: french` var n Paths _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `/french/toast: description: toast @@ -465,7 +533,7 @@ x-france: french` var n2 Paths _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) @@ -493,12 +561,22 @@ func TestPaths_Build_Fail_Many(t *testing.T) { var idxNode yaml.Node _ = yaml.Unmarshal([]byte(yml), &idxNode) - idx := index.NewSpecIndex(&idxNode) + + var b []byte + buf := bytes.NewBuffer(b) + log := slog.New(slog.NewTextHandler(buf, &slog.HandlerOptions{ + Level: slog.LevelError, + })) + cfg := index.SpecIndexConfig{ + Logger: log, + } + idx := index.NewSpecIndexWithConfig(&idxNode, &cfg) var n Paths err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) - assert.Error(t, err) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) + errors := strings.Split(buf.String(), "\n") + assert.Len(t, errors, 1001) } diff --git a/datamodel/low/v3/request_body_test.go b/datamodel/low/v3/request_body_test.go index 832e5de..39b6605 100644 --- a/datamodel/low/v3/request_body_test.go +++ b/datamodel/low/v3/request_body_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -28,7 +29,7 @@ x-requesto: presto` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "a nice request", n.Description.Value) assert.True(t, n.Required.Value) @@ -51,7 +52,7 @@ func TestRequestBody_Fail(t *testing.T) { err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -75,7 +76,7 @@ x-toast: nice var n RequestBody _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `description: nice toast content: @@ -94,7 +95,7 @@ x-toast: nice` var n2 RequestBody _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/response_test.go b/datamodel/low/v3/response_test.go index 0424c75..51d31a2 100644 --- a/datamodel/low/v3/response_test.go +++ b/datamodel/low/v3/response_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -39,7 +40,7 @@ default: err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "default response", n.Default.Value.Description.Value) @@ -92,7 +93,7 @@ x-shoes: old` err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) // check hash assert.Equal(t, "54ab66e6cb8bd226940f421c2387e45215b84c946182435dfe2a3036043fa07c", @@ -116,7 +117,7 @@ func TestResponses_Build_FailCodes_WrongType(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -134,7 +135,7 @@ func TestResponses_Build_FailCodes(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -151,7 +152,7 @@ func TestResponses_Build_FailDefault(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -171,7 +172,7 @@ func TestResponses_Build_FailBadHeader(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -191,7 +192,7 @@ func TestResponses_Build_FailBadContent(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -211,7 +212,7 @@ func TestResponses_Build_FailBadLinks(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } @@ -232,7 +233,7 @@ func TestResponses_Build_AllowXPrefixHeader(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "string", @@ -267,7 +268,7 @@ links: var n Response _ = low.BuildModel(idxNode.Content[0], &n) - _ = n.Build(nil, idxNode.Content[0], idx) + _ = n.Build(context.Background(), nil, idxNode.Content[0], idx) yml2 := `description: nice toast x-ham: jam @@ -294,7 +295,7 @@ links: var n2 Response _ = low.BuildModel(idxNode2.Content[0], &n2) - _ = n2.Build(nil, idxNode2.Content[0], idx2) + _ = n2.Build(context.Background(), nil, idxNode2.Content[0], idx2) // hash assert.Equal(t, n.Hash(), n2.Hash()) diff --git a/datamodel/low/v3/security_scheme_test.go b/datamodel/low/v3/security_scheme_test.go index cbdab09..24065b9 100644 --- a/datamodel/low/v3/security_scheme_test.go +++ b/datamodel/low/v3/security_scheme_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/datamodel/low/base" "github.com/pb33f/libopenapi/index" @@ -25,7 +26,7 @@ func TestSecurityRequirement_Build(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Len(t, n.Requirements.Value, 1) @@ -55,7 +56,7 @@ x-milk: please` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "0b5ee36519fdfc6383c7befd92294d77b5799cd115911ff8c3e194f345a8c103", @@ -86,6 +87,6 @@ func TestSecurityScheme_Build_Fail(t *testing.T) { err := low.BuildModel(&idxNode, &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.Error(t, err) } diff --git a/datamodel/low/v3/server_test.go b/datamodel/low/v3/server_test.go index e10712d..f0c4ffb 100644 --- a/datamodel/low/v3/server_test.go +++ b/datamodel/low/v3/server_test.go @@ -4,6 +4,7 @@ package v3 import ( + "context" "github.com/pb33f/libopenapi/datamodel/low" "github.com/pb33f/libopenapi/index" "github.com/stretchr/testify/assert" @@ -30,7 +31,7 @@ variables: err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "ec69dfcf68ad8988f3804e170ee6c4a7ad2e4ac51084796eea93168820827546", @@ -63,7 +64,7 @@ description: high quality software for developers.` err := low.BuildModel(idxNode.Content[0], &n) assert.NoError(t, err) - err = n.Build(nil, idxNode.Content[0], idx) + err = n.Build(context.Background(), nil, idxNode.Content[0], idx) assert.NoError(t, err) assert.Equal(t, "https://pb33f.io", n.URL.Value) assert.Equal(t, "high quality software for developers.", n.Description.Value) diff --git a/index/search_index.go b/index/search_index.go index b5e76b6..30af289 100644 --- a/index/search_index.go +++ b/index/search_index.go @@ -13,6 +13,7 @@ import ( type ContextKey string const CurrentPathKey ContextKey = "currentPath" +const FoundIndexKey ContextKey = "foundIndex" func (index *SpecIndex) SearchIndexForReferenceByReference(fullRef *Reference) (*Reference, *SpecIndex) { r, idx, _ := index.SearchIndexForReferenceByReferenceWithContext(context.Background(), fullRef) @@ -148,7 +149,9 @@ func (index *SpecIndex) SearchIndexForReferenceByReferenceWithContext(ctx contex } } - index.logger.Error("unable to locate reference anywhere in the rolodex", "reference", ref) + if index.logger != nil { + index.logger.Error("unable to locate reference anywhere in the rolodex", "reference", ref) + } return nil, index, ctx } diff --git a/index/spec_index.go b/index/spec_index.go index 5245475..021313c 100644 --- a/index/spec_index.go +++ b/index/spec_index.go @@ -61,11 +61,8 @@ func NewSpecIndexWithConfig(rootNode *yaml.Node, config *SpecIndexConfig) *SpecI // other than a raw index of every node for every content type in the specification. This process runs as fast as // possible so dependencies looking through the tree, don't need to walk the entire thing over, and over. // -// Deprecated: Use NewSpecIndexWithConfig instead, this function will be removed in the future because it -// defaults to allowing remote references and file references. This is a potential security risk and should be controlled by -// providing a SpecIndexConfig that explicitly sets the AllowRemoteLookup and AllowFileLookup to true. -// This function also does not support specifications with relative references that may not exist locally. -// - https://github.com/pb33f/libopenapi/issues/73 +// This creates a new index using a default 'open' configuration. This means if a BaseURL or BasePath are supplied +// the rolodex will automatically read those files or open those h func NewSpecIndex(rootNode *yaml.Node) *SpecIndex { index := new(SpecIndex) index.config = CreateOpenAPIIndexConfig()