mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-13 03:42:35 -06:00
b0100a66cd
And a few other small fixes in tests. This i not so much about performance but about choosing the best tool for a given task :) But that the alternatives are also faster doesn't hurt either. Signed-off-by: Anders Eknert <anders@styra.com>
88 lines
2.1 KiB
Go
88 lines
2.1 KiB
Go
package patch
|
|
|
|
import (
|
|
"slices"
|
|
"testing"
|
|
|
|
"github.com/open-policy-agent/opa/v1/storage"
|
|
)
|
|
|
|
func TestParsePatchPathEscaped(t *testing.T) {
|
|
tests := []struct {
|
|
note string
|
|
path string
|
|
expectedPath storage.Path
|
|
expectedOK bool
|
|
}{
|
|
// success-path tests
|
|
{
|
|
note: "single-level",
|
|
path: "/single-level",
|
|
expectedPath: storage.Path{"single-level"},
|
|
expectedOK: true,
|
|
},
|
|
{
|
|
note: "multi-level",
|
|
path: "/a/multi-level/path",
|
|
expectedPath: storage.Path{"a", "multi-level", "path"},
|
|
expectedOK: true,
|
|
},
|
|
{
|
|
note: "end",
|
|
path: "/-",
|
|
expectedPath: storage.Path{"-"},
|
|
expectedOK: true,
|
|
},
|
|
{ // not strictly correct but included for backwards compatibility with existing OPA
|
|
note: "url-escaped forward slash",
|
|
path: "/github.com%2Fopen-policy-agent",
|
|
expectedPath: storage.Path{"github.com/open-policy-agent"},
|
|
expectedOK: true,
|
|
},
|
|
{
|
|
note: "json-pointer-escaped forward slash",
|
|
path: "/github.com~1open-policy-agent",
|
|
expectedPath: storage.Path{"github.com/open-policy-agent"},
|
|
expectedOK: true,
|
|
},
|
|
{
|
|
note: "json-pointer-escaped tilde",
|
|
path: "/~0opa",
|
|
expectedPath: storage.Path{"~opa"},
|
|
expectedOK: true,
|
|
},
|
|
{
|
|
note: "json-pointer-escape correctness",
|
|
path: "/~01",
|
|
expectedPath: storage.Path{"~1"},
|
|
expectedOK: true,
|
|
},
|
|
|
|
// failure-path tests
|
|
{ // not possible with existing callers but for completeness...
|
|
note: "empty string",
|
|
path: "",
|
|
expectedOK: false,
|
|
},
|
|
{ // not possible with existing callers but for completeness...
|
|
note: "string that doesn't start with /",
|
|
path: "foo",
|
|
expectedOK: false,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.note, func(t *testing.T) {
|
|
actualPath, actualOK := ParsePatchPathEscaped(tc.path)
|
|
|
|
if tc.expectedOK != actualOK {
|
|
t.Fatalf("Expected ok to be %v but was %v", tc.expectedOK, actualOK)
|
|
}
|
|
|
|
if !slices.Equal(tc.expectedPath, actualPath) {
|
|
t.Fatalf("Expected path to be %v but was %v", tc.expectedPath, actualPath)
|
|
}
|
|
})
|
|
}
|
|
}
|