updated coverage for timeout path lookup

Signed-off-by: quobix <dave@quobix.com>
This commit is contained in:
quobix
2024-01-04 16:45:00 -05:00
parent 15c53c1c2b
commit 202ae3365a
3 changed files with 114 additions and 104 deletions

View File

@@ -114,24 +114,17 @@ func FindNodesWithoutDeserializing(node *yaml.Node, jsonPath string) ([]*yaml.No
// this can spin out, to lets gatekeep it.
done := make(chan bool)
eChan := make(chan error)
var results []*yaml.Node
timeout, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
defer cancel()
go func(d chan bool, e chan error) {
var er error
results, er = path.Find(node)
if er != nil {
e <- er
}
go func(d chan bool) {
results, _ = path.Find(node)
done <- true
}(done, eChan)
}(done)
select {
case <-done:
return results, nil
case er := <-eChan:
return nil, er
case <-timeout.Done():
return nil, fmt.Errorf("node lookup timeout exceeded")
}

View File

@@ -913,3 +913,20 @@ func TestDetermineJSONWhitespaceLength_None(t *testing.T) {
someBytes := []byte(`{"hello": "world"}`)
assert.Equal(t, 0, DetermineWhitespaceLength(string(someBytes)))
}
func TestTimeoutFind(t *testing.T) {
a := &yaml.Node{
Value: "chicken",
}
b := &yaml.Node{
Value: "nuggets",
}
// loopy loop.
a.Content = append(a.Content, b)
b.Content = append(b.Content, a)
nodes, err := FindNodesWithoutDeserializing(a, "$..nuggets")
assert.Error(t, err)
assert.Nil(t, nodes)
}