pomerium/authorize/evaluator/store_test.go
2020-08-06 21:02:20 +07:00

85 lines
2.3 KiB
Go

package evaluator
import (
"context"
"testing"
"time"
"github.com/golang/protobuf/ptypes"
"github.com/open-policy-agent/opa/storage"
"github.com/stretchr/testify/assert"
"github.com/pomerium/pomerium/pkg/grpc/databroker"
"github.com/pomerium/pomerium/pkg/grpc/user"
)
func TestStore(t *testing.T) {
ctx, clearTimeout := context.WithTimeout(context.Background(), time.Second*10)
defer clearTimeout()
s := NewStore()
t.Run("admins", func(t *testing.T) {
s.UpdateAdmins([]string{"admin1", "admin2"})
v, err := storage.ReadOne(ctx, s.opaStore, storage.MustParsePath("/admins"))
assert.NoError(t, err)
assert.Equal(t, []interface{}{"admin1", "admin2"}, v)
s.UpdateAdmins([]string{"admin3"})
v, err = storage.ReadOne(ctx, s.opaStore, storage.MustParsePath("/admins"))
assert.NoError(t, err)
assert.Equal(t, []interface{}{"admin3"}, v)
})
t.Run("records", func(t *testing.T) {
u := &user.User{
Version: "v1",
Id: "u1",
Name: "name",
Email: "name@example.com",
}
any, _ := ptypes.MarshalAny(u)
s.UpdateRecord(&databroker.Record{
Version: "v1",
Type: any.GetTypeUrl(),
Id: u.GetId(),
Data: any,
})
v, err := storage.ReadOne(ctx, s.opaStore, storage.MustParsePath("/databroker_data/type.googleapis.com/user.User/u1"))
assert.NoError(t, err)
assert.Equal(t, map[string]interface{}{
"version": "v1",
"id": "u1",
"name": "name",
"email": "name@example.com",
}, v)
s.UpdateRecord(&databroker.Record{
Version: "v2",
Type: any.GetTypeUrl(),
Id: u.GetId(),
Data: any,
DeletedAt: ptypes.TimestampNow(),
})
v, err = storage.ReadOne(ctx, s.opaStore, storage.MustParsePath("/databroker_data/type.googleapis.com/user.User/u1"))
assert.Error(t, err)
assert.Nil(t, v)
s.UpdateRecord(&databroker.Record{
Version: "v1",
Type: any.GetTypeUrl(),
Id: u.GetId(),
Data: any,
})
v, err = storage.ReadOne(ctx, s.opaStore, storage.MustParsePath("/databroker_data/type.googleapis.com/user.User/u1"))
assert.NoError(t, err)
assert.NotNil(t, v)
s.ClearRecords("type.googleapis.com/user.User")
v, err = storage.ReadOne(ctx, s.opaStore, storage.MustParsePath("/databroker_data/type.googleapis.com/user.User/u1"))
assert.Error(t, err)
assert.Nil(t, v)
})
}