Skip to content
Snippets Groups Projects
Commit fd98622c authored by Lyuben Penkovski's avatar Lyuben Penkovski
Browse files

Unit tests for builtin functions for getting public keys

parent 3fbcd542
No related branches found
No related tags found
1 merge request!23Create extension function to retrieve public keys from Signer service
Pipeline #51817 passed with stages
in 1 minute and 20 seconds
......@@ -26,6 +26,7 @@ func TestResolveFunc(t *testing.T) {
r := rego.New(
rego.Query(`did.resolve("did:indy:idunion:BDrEcHc8Tb4Lb2VyQZWEDE")`),
rego.Function1(DIDResolverFuncs.ResolveFunc()),
rego.StrictBuiltinErrors(true),
)
resultSet, err := r.Eval(context.Background())
assert.NoError(t, err)
......
package regofunc_test
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"testing"
"github.com/open-policy-agent/opa/rego"
"github.com/stretchr/testify/assert"
"code.vereign.com/gaiax/tsa/policy/internal/regofunc"
)
func TestGetKeyFunc(t *testing.T) {
expected := `{"key1":"key1 data"}`
signerSrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = fmt.Fprint(w, expected)
}))
defer signerSrv.Close()
keysFuncs := regofunc.NewPubkeyFuncs(signerSrv.URL, http.DefaultClient)
r := rego.New(
rego.Query(`keys.get("key1")`),
rego.Function1(keysFuncs.GetKeyFunc()),
rego.StrictBuiltinErrors(true),
)
resultSet, err := r.Eval(context.Background())
assert.NoError(t, err)
resultBytes, err := json.Marshal(resultSet[0].Expressions[0].Value)
assert.NoError(t, err)
assert.Equal(t, expected, string(resultBytes))
}
func TestGetKeyFuncError(t *testing.T) {
signerSrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
}))
defer signerSrv.Close()
keysFuncs := regofunc.NewPubkeyFuncs(signerSrv.URL, http.DefaultClient)
r := rego.New(
rego.Query(`keys.get("key1")`),
rego.Function1(keysFuncs.GetKeyFunc()),
rego.StrictBuiltinErrors(true),
)
resultSet, err := r.Eval(context.Background())
assert.Nil(t, resultSet)
assert.Error(t, err)
expectedError := `keys.get("key1"): eval_builtin_error: keys.get: unexpected response from signer: 404 Not Found`
assert.Equal(t, expectedError, err.Error())
}
func TestGetAllKeysFunc(t *testing.T) {
expected := `[{"key1":"key1 data"},{"key2":"key2 data"}]`
signerSrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = fmt.Fprint(w, expected)
}))
defer signerSrv.Close()
keysFuncs := regofunc.NewPubkeyFuncs(signerSrv.URL, http.DefaultClient)
r := rego.New(
rego.Query(`keys.getAll()`),
rego.FunctionDyn(keysFuncs.GetAllKeysFunc()),
rego.StrictBuiltinErrors(true),
)
resultSet, err := r.Eval(context.Background())
assert.NoError(t, err)
resultBytes, err := json.Marshal(resultSet[0].Expressions[0].Value)
assert.NoError(t, err)
assert.Equal(t, expected, string(resultBytes))
}
......@@ -224,9 +224,10 @@ func (s *Service) prepareQuery(ctx context.Context, group, policyName, version s
}
func (s *Service) buildRegoArgs(filename, regoPolicy, regoQuery, regoData string) (availableFuncs []func(*rego.Rego), err error) {
availableFuncs = make([]func(*rego.Rego), 2)
availableFuncs = make([]func(*rego.Rego), 3)
availableFuncs[0] = rego.Module(filename, regoPolicy)
availableFuncs[1] = rego.Query(regoQuery)
availableFuncs[2] = rego.StrictBuiltinErrors(true)
extensions := regofunc.List()
for i := range extensions {
availableFuncs = append(availableFuncs, extensions[i])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment