Skip to content

Commit

Permalink
Fixing v0 API issues
Browse files Browse the repository at this point in the history
* `plugins.State`: not properly type aliased
* `plugins.New()`: apply default v0 rego-version to `Manager` creation

Signed-off-by: Johan Fylling <[email protected]>
  • Loading branch information
johanfylling committed Dec 6, 2024
1 parent 88fec54 commit e80e6c2
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 11 deletions.
32 changes: 21 additions & 11 deletions plugins/plugins.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,16 @@ import (

"github.com/gorilla/mux"

"github.com/open-policy-agent/opa/v1/ast"
"github.com/open-policy-agent/opa/v1/bundle"
"github.com/open-policy-agent/opa/v1/hooks"
"github.com/open-policy-agent/opa/v1/loader"
"github.com/open-policy-agent/opa/v1/logging"
"github.com/open-policy-agent/opa/ast"
"github.com/open-policy-agent/opa/bundle"
"github.com/open-policy-agent/opa/hooks"
"github.com/open-policy-agent/opa/loader"
"github.com/open-policy-agent/opa/logging"
"github.com/open-policy-agent/opa/resolver/wasm"
"github.com/open-policy-agent/opa/storage"
"github.com/open-policy-agent/opa/topdown/print"
"github.com/open-policy-agent/opa/tracing"
v1 "github.com/open-policy-agent/opa/v1/plugins"
"github.com/open-policy-agent/opa/v1/resolver/wasm"
"github.com/open-policy-agent/opa/v1/storage"
"github.com/open-policy-agent/opa/v1/topdown/print"
"github.com/open-policy-agent/opa/v1/tracing"
)

// Factory defines the interface OPA uses to instantiate your plugin.
Expand Down Expand Up @@ -92,7 +92,7 @@ type Triggerable = v1.Triggerable

// State defines the state that a Plugin instance is currently
// in with pre-defined states.
type State v1.State
type State = v1.State

const (
// StateNotReady indicates that the Plugin is not in an error state, but isn't
Expand Down Expand Up @@ -252,5 +252,15 @@ func WithTelemetryGatherers(gs map[string]report.Gatherer) func(*Manager) {

// New creates a new Manager using config.
func New(raw []byte, id string, store storage.Store, opts ...func(*Manager)) (*Manager, error) {
return v1.New(raw, id, store, opts...)
options := make([]func(*Manager), 0, len(opts)+1)
options = append(options, opts...)
options = append(opts, func(m *Manager) {
if m.ParserOptions().RegoVersion == ast.RegoUndefined {
cpy := m.ParserOptions()
cpy.RegoVersion = ast.DefaultRegoVersion
WithParserOptions(cpy)(m)
}
})

return v1.New(raw, id, store, options...)
}
47 changes: 47 additions & 0 deletions plugins/plugins_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright 2024 The OPA Authors. All rights reserved.
// Use of this source code is governed by an Apache2
// license that can be found in the LICENSE file.

package plugins

import (
"testing"

"github.com/open-policy-agent/opa/storage/inmem"
"github.com/open-policy-agent/opa/v1/ast"
)

func TestNew_DefaultRegoVersion(t *testing.T) {
popts := ast.ParserOptions{
Capabilities: &ast.Capabilities{
Features: []string{
"my_custom_feature",
},
},
ProcessAnnotation: true,
AllFutureKeywords: true,
FutureKeywords: []string{"foo", "bar"},
}
m, err := New([]byte(`{"plugins": {"someplugin": {}}}`), "test", inmem.New(),
WithParserOptions(popts))
if err != nil {
t.Fatal(err)
}

if exp, act := ast.RegoV0, m.ParserOptions().RegoVersion; exp != act {
t.Fatalf("Expected default Rego version to be %v but got %v", exp, act)
}

// Check a couple of other options to make sure they haven't changed
if exp, act := popts.ProcessAnnotation, m.ParserOptions().ProcessAnnotation; exp != act {
t.Fatalf("Expected ProcessAnnotation to be %v but got %v", exp, act)
}

if exp, act := popts.AllFutureKeywords, m.ParserOptions().AllFutureKeywords; exp != act {
t.Fatalf("Expected AllFutureKeywords to be %v but got %v", exp, act)
}

if exp, act := popts.Capabilities, m.ParserOptions().Capabilities; exp != act {
t.Fatalf("Expected Capabilities to be %v but got %v", exp, act)
}
}

0 comments on commit e80e6c2

Please sign in to comment.