vars: behaviour: properly handle local scope
I realized that local scope wasn't being handled properly before. We created a clone of the local vars when we called `NewLocalScope`, but local vars are typically populated at runtime - not in the `engine/builder`. So, the clone was always empty. Instead, form a linked list of `BuildVariables` that point to its parent scope. This commit also renames `CredVarsTracker` to `BuildVariables`, and exposes the struct directly rather than an interface. This commit is incomplete in the sense that it doesn't perform that renaming everywhere, but the diff got pretty huge and I wanted to separate out just the behaviour aspect of this change. Signed-off-by: Aidan Oldershaw <aoldershaw@pivotal.io>
This commit is contained in:
parent
f7a8755916
commit
41c606daa6
|
@ -0,0 +1,69 @@
|
||||||
|
package vars
|
||||||
|
|
||||||
|
type BuildVariables struct {
|
||||||
|
parentScope interface {
|
||||||
|
Variables
|
||||||
|
IterateInterpolatedCreds(iter TrackedVarsIterator)
|
||||||
|
}
|
||||||
|
|
||||||
|
localVars StaticVariables
|
||||||
|
tracker *tracker
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBuildVariables(credVars Variables, enableRedaction bool) *BuildVariables {
|
||||||
|
return &BuildVariables{
|
||||||
|
parentScope: &credVarsTracker{
|
||||||
|
credVars: credVars,
|
||||||
|
tracker: newTracker(enableRedaction),
|
||||||
|
},
|
||||||
|
localVars: StaticVariables{},
|
||||||
|
tracker: newTracker(enableRedaction),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BuildVariables) Get(varDef VariableDefinition) (interface{}, bool, error) {
|
||||||
|
if varDef.Ref.Source == "." {
|
||||||
|
val, found, _ := b.localVars.Get(varDef)
|
||||||
|
if found {
|
||||||
|
return val, true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return b.parentScope.Get(varDef)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BuildVariables) List() ([]VariableDefinition, error) {
|
||||||
|
list, err := b.parentScope.List()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for k := range b.localVars {
|
||||||
|
list = append(list, VariableDefinition{
|
||||||
|
Ref: VariableReference{Source: ".", Path: k},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return list, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BuildVariables) IterateInterpolatedCreds(iter TrackedVarsIterator) {
|
||||||
|
b.tracker.IterateInterpolatedCreds(iter)
|
||||||
|
b.parentScope.IterateInterpolatedCreds(iter)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BuildVariables) NewLocalScope() *BuildVariables {
|
||||||
|
return &BuildVariables{
|
||||||
|
parentScope: b,
|
||||||
|
localVars: StaticVariables{},
|
||||||
|
tracker: newTracker(b.tracker.enabled),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BuildVariables) AddLocalVar(name string, val interface{}, redact bool) {
|
||||||
|
b.localVars[name] = val
|
||||||
|
if redact {
|
||||||
|
b.tracker.Track(VariableReference{Source: ".", Path: name}, val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *BuildVariables) RedactionEnabled() bool {
|
||||||
|
return b.tracker.enabled
|
||||||
|
}
|
|
@ -0,0 +1,195 @@
|
||||||
|
package vars_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/concourse/concourse/vars"
|
||||||
|
. "github.com/concourse/concourse/vars"
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("BuildVariables", func() {
|
||||||
|
var buildVars *vars.BuildVariables
|
||||||
|
|
||||||
|
Describe("turn on track", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
buildVars = vars.NewBuildVariables(StaticVariables{"k1": "v1", "k2": "v2", "k3": "v3"}, true)
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("Get", func() {
|
||||||
|
It("returns expected value", func() {
|
||||||
|
val, found, err := buildVars.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
||||||
|
Expect(found).To(BeTrue())
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(val).To(Equal("v1"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("fetched variables are tracked", func() {
|
||||||
|
buildVars.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
||||||
|
buildVars.Get(VariableDefinition{Ref: VariableReference{Path: "k2"}})
|
||||||
|
mapit := vars.TrackedVarsMap{}
|
||||||
|
buildVars.IterateInterpolatedCreds(mapit)
|
||||||
|
Expect(mapit["k1"]).To(Equal("v1"))
|
||||||
|
Expect(mapit["k2"]).To(Equal("v2"))
|
||||||
|
// "k3" has not been Get, thus should not be tracked.
|
||||||
|
Expect(mapit).ToNot(HaveKey("k3"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("List", func() {
|
||||||
|
It("returns list of names from multiple vars with duplicates", func() {
|
||||||
|
defs, err := buildVars.List()
|
||||||
|
Expect(defs).To(ConsistOf([]VariableDefinition{
|
||||||
|
{Ref: VariableReference{Path: "k1"}},
|
||||||
|
{Ref: VariableReference{Path: "k2"}},
|
||||||
|
{Ref: VariableReference{Path: "k3"}},
|
||||||
|
}))
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("includes all local vars", func() {
|
||||||
|
buildVars.AddLocalVar("l1", 1, false)
|
||||||
|
buildVars.AddLocalVar("l2", 2, false)
|
||||||
|
|
||||||
|
defs, err := buildVars.List()
|
||||||
|
Expect(defs).To(ConsistOf([]VariableDefinition{
|
||||||
|
{Ref: VariableReference{Source: ".", Path: "l1"}},
|
||||||
|
{Ref: VariableReference{Source: ".", Path: "l2"}},
|
||||||
|
|
||||||
|
{Ref: VariableReference{Path: "k1"}},
|
||||||
|
{Ref: VariableReference{Path: "k2"}},
|
||||||
|
{Ref: VariableReference{Path: "k3"}},
|
||||||
|
}))
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("AddLocalVar", func() {
|
||||||
|
Describe("redact", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
buildVars.AddLocalVar("foo", "bar", true)
|
||||||
|
})
|
||||||
|
|
||||||
|
It("should get local value", func() {
|
||||||
|
val, found, err := buildVars.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "foo"}})
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(found).To(BeTrue())
|
||||||
|
Expect(val).To(Equal("bar"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("fetched variables are tracked when added", func() {
|
||||||
|
mapit := vars.TrackedVarsMap{}
|
||||||
|
buildVars.IterateInterpolatedCreds(mapit)
|
||||||
|
Expect(mapit["foo"]).To(Equal("bar"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("NewLocalScope", func() {
|
||||||
|
It("can access local vars from parent scope", func() {
|
||||||
|
buildVars.AddLocalVar("hello", "world", false)
|
||||||
|
scope := buildVars.NewLocalScope()
|
||||||
|
val, _, _ := scope.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "hello"}})
|
||||||
|
Expect(val).To(Equal("world"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("adding local vars does not affect the original tracker", func() {
|
||||||
|
scope := buildVars.NewLocalScope()
|
||||||
|
scope.AddLocalVar("hello", "world", false)
|
||||||
|
_, found, _ := buildVars.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "hello"}})
|
||||||
|
Expect(found).To(BeFalse())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("shares the underlying non-local variables", func() {
|
||||||
|
scope := buildVars.NewLocalScope()
|
||||||
|
val, _, _ := scope.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
||||||
|
Expect(val).To(Equal("v1"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("local vars added after creating the subscope are accessible", func() {
|
||||||
|
scope := buildVars.NewLocalScope()
|
||||||
|
buildVars.AddLocalVar("hello", "world", false)
|
||||||
|
val, _, _ := scope.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "hello"}})
|
||||||
|
Expect(val).To(Equal("world"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("current scope is preferred over parent scope", func() {
|
||||||
|
buildVars.AddLocalVar("a", 1, false)
|
||||||
|
scope := buildVars.NewLocalScope()
|
||||||
|
scope.AddLocalVar("a", 2, false)
|
||||||
|
|
||||||
|
val, _, _ := scope.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "a"}})
|
||||||
|
Expect(val).To(Equal(2))
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("TrackedVarsMap", func() {
|
||||||
|
It("prefers the value set in the current scope over the parent scope", func() {
|
||||||
|
buildVars.AddLocalVar("a", "from parent", true)
|
||||||
|
scope := buildVars.NewLocalScope()
|
||||||
|
scope.AddLocalVar("a", "from child", true)
|
||||||
|
|
||||||
|
mapit := vars.TrackedVarsMap{}
|
||||||
|
scope.IterateInterpolatedCreds(mapit)
|
||||||
|
|
||||||
|
Expect(mapit["a"]).To(Equal("from child"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("not redact", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
buildVars.AddLocalVar("foo", "bar", false)
|
||||||
|
})
|
||||||
|
|
||||||
|
It("should get local value", func() {
|
||||||
|
val, found, err := buildVars.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "foo"}})
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(found).To(BeTrue())
|
||||||
|
Expect(val).To(Equal("bar"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("fetched variables are not tracked", func() {
|
||||||
|
buildVars.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "foo"}})
|
||||||
|
mapit := vars.TrackedVarsMap{}
|
||||||
|
buildVars.IterateInterpolatedCreds(mapit)
|
||||||
|
Expect(mapit).ToNot(ContainElement("foo"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("turn off track", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
buildVars = vars.NewBuildVariables(StaticVariables{"k1": "v1", "k2": "v2", "k3": "v3"}, false)
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("Get", func() {
|
||||||
|
It("returns expected value", func() {
|
||||||
|
val, found, err := buildVars.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
||||||
|
Expect(found).To(BeTrue())
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(val).To(Equal("v1"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("fetched variables should not be tracked", func() {
|
||||||
|
buildVars.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
||||||
|
buildVars.Get(VariableDefinition{Ref: VariableReference{Path: "k2"}})
|
||||||
|
mapit := vars.TrackedVarsMap{}
|
||||||
|
buildVars.IterateInterpolatedCreds(mapit)
|
||||||
|
Expect(mapit).ToNot(HaveKey("k1"))
|
||||||
|
Expect(mapit).ToNot(HaveKey("k2"))
|
||||||
|
Expect(mapit).ToNot(HaveKey("k3"))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
Describe("List", func() {
|
||||||
|
It("returns list of names from multiple vars with duplicates", func() {
|
||||||
|
defs, err := buildVars.List()
|
||||||
|
Expect(defs).To(ConsistOf([]VariableDefinition{
|
||||||
|
{Ref: VariableReference{Path: "k1"}},
|
||||||
|
{Ref: VariableReference{Path: "k2"}},
|
||||||
|
{Ref: VariableReference{Path: "k3"}},
|
||||||
|
}))
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
|
@ -0,0 +1,97 @@
|
||||||
|
package vars
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TrackedVarsIterator interface {
|
||||||
|
YieldCred(string, string)
|
||||||
|
}
|
||||||
|
|
||||||
|
type tracker struct {
|
||||||
|
enabled bool
|
||||||
|
|
||||||
|
// Considering in-parallel steps, a lock is need.
|
||||||
|
lock sync.RWMutex
|
||||||
|
interpolatedCreds map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
func newTracker(on bool) *tracker {
|
||||||
|
return &tracker{
|
||||||
|
enabled: on,
|
||||||
|
interpolatedCreds: map[string]string{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *tracker) Track(varRef VariableReference, val interface{}) {
|
||||||
|
if !t.enabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
t.lock.Lock()
|
||||||
|
defer t.lock.Unlock()
|
||||||
|
|
||||||
|
t.track(varRef, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *tracker) track(varRef VariableReference, val interface{}) {
|
||||||
|
switch v := val.(type) {
|
||||||
|
case map[interface{}]interface{}:
|
||||||
|
for kk, vv := range v {
|
||||||
|
t.track(VariableReference{
|
||||||
|
Path: varRef.Path,
|
||||||
|
Fields: append(varRef.Fields, kk.(string)),
|
||||||
|
}, vv)
|
||||||
|
}
|
||||||
|
case map[string]interface{}:
|
||||||
|
for kk, vv := range v {
|
||||||
|
t.track(VariableReference{
|
||||||
|
Path: varRef.Path,
|
||||||
|
Fields: append(varRef.Fields, kk),
|
||||||
|
}, vv)
|
||||||
|
}
|
||||||
|
case string:
|
||||||
|
paths := append([]string{varRef.Path}, varRef.Fields...)
|
||||||
|
|
||||||
|
t.interpolatedCreds[strings.Join(paths, ".")] = v
|
||||||
|
default:
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *tracker) IterateInterpolatedCreds(iter TrackedVarsIterator) {
|
||||||
|
t.lock.RLock()
|
||||||
|
for k, v := range t.interpolatedCreds {
|
||||||
|
iter.YieldCred(k, v)
|
||||||
|
}
|
||||||
|
t.lock.RUnlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
type credVarsTracker struct {
|
||||||
|
*tracker
|
||||||
|
credVars Variables
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *credVarsTracker) Get(varDef VariableDefinition) (interface{}, bool, error) {
|
||||||
|
val, found, err := t.credVars.Get(varDef)
|
||||||
|
if found {
|
||||||
|
t.tracker.Track(varDef.Ref, val)
|
||||||
|
}
|
||||||
|
return val, found, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *credVarsTracker) List() ([]VariableDefinition, error) {
|
||||||
|
return t.credVars.List()
|
||||||
|
}
|
||||||
|
|
||||||
|
// TrackedVarsMap is a TrackedVarsIterator which populates interpolated secrets into a map.
|
||||||
|
// If there are multiple secrets with the same name, it only keeps the first value.
|
||||||
|
type TrackedVarsMap map[string]string
|
||||||
|
|
||||||
|
func (it TrackedVarsMap) YieldCred(k, v string) {
|
||||||
|
_, found := it[k]
|
||||||
|
if !found {
|
||||||
|
it[k] = v
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
package vars
|
package vars
|
||||||
|
|
||||||
|
//go:generate counterfeiter . Variables
|
||||||
|
|
||||||
type Variables interface {
|
type Variables interface {
|
||||||
Get(VariableDefinition) (interface{}, bool, error)
|
Get(VariableDefinition) (interface{}, bool, error)
|
||||||
List() ([]VariableDefinition, error)
|
List() ([]VariableDefinition, error)
|
||||||
|
|
|
@ -1,152 +0,0 @@
|
||||||
package vars
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
// CredVarsTracker implements the interface Variables. It wraps a secret manager and
|
|
||||||
// tracks key-values fetched from the secret managers. It also provides a method to
|
|
||||||
// thread-safely iterate interpolated key-values.
|
|
||||||
type CredVarsTrackerIterator interface {
|
|
||||||
YieldCred(string, string)
|
|
||||||
}
|
|
||||||
|
|
||||||
//go:generate counterfeiter . CredVarsTracker
|
|
||||||
|
|
||||||
type CredVarsTracker interface {
|
|
||||||
Variables
|
|
||||||
IterateInterpolatedCreds(iter CredVarsTrackerIterator)
|
|
||||||
Enabled() bool
|
|
||||||
|
|
||||||
NewLocalScope() CredVarsTracker
|
|
||||||
AddLocalVar(string, interface{}, bool)
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewCredVarsTracker(credVars Variables, on bool) CredVarsTracker {
|
|
||||||
return &credVarsTracker{
|
|
||||||
localVars: StaticVariables{},
|
|
||||||
credVars: credVars,
|
|
||||||
enabled: on,
|
|
||||||
interpolatedCreds: map[string]string{},
|
|
||||||
noRedactVarNames: map[string]bool{},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type credVarsTracker struct {
|
|
||||||
credVars Variables
|
|
||||||
localVars StaticVariables
|
|
||||||
|
|
||||||
enabled bool
|
|
||||||
|
|
||||||
interpolatedCreds map[string]string
|
|
||||||
|
|
||||||
noRedactVarNames map[string]bool
|
|
||||||
|
|
||||||
// Considering in-parallel steps, a lock is need.
|
|
||||||
lock sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *credVarsTracker) Get(varDef VariableDefinition) (interface{}, bool, error) {
|
|
||||||
var (
|
|
||||||
val interface{}
|
|
||||||
found bool
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
|
|
||||||
redact := true
|
|
||||||
if varDef.Ref.Source == "." {
|
|
||||||
val, found, err = t.localVars.Get(varDef)
|
|
||||||
if found {
|
|
||||||
if _, ok := t.noRedactVarNames[varDef.Ref.Path]; ok {
|
|
||||||
redact = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
val, found, err = t.credVars.Get(varDef)
|
|
||||||
}
|
|
||||||
|
|
||||||
if t.enabled && found && redact {
|
|
||||||
t.lock.Lock()
|
|
||||||
t.track(varDef.Ref, val)
|
|
||||||
t.lock.Unlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
return val, found, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *credVarsTracker) track(varRef VariableReference, val interface{}) {
|
|
||||||
switch v := val.(type) {
|
|
||||||
case map[interface{}]interface{}:
|
|
||||||
for kk, vv := range v {
|
|
||||||
t.track(VariableReference{
|
|
||||||
Path: varRef.Path,
|
|
||||||
Fields: append(varRef.Fields, kk.(string)),
|
|
||||||
}, vv)
|
|
||||||
}
|
|
||||||
case map[string]interface{}:
|
|
||||||
for kk, vv := range v {
|
|
||||||
t.track(VariableReference{
|
|
||||||
Path: varRef.Path,
|
|
||||||
Fields: append(varRef.Fields, kk),
|
|
||||||
}, vv)
|
|
||||||
}
|
|
||||||
case string:
|
|
||||||
paths := append([]string{varRef.Path}, varRef.Fields...)
|
|
||||||
|
|
||||||
t.interpolatedCreds[strings.Join(paths, ".")] = v
|
|
||||||
default:
|
|
||||||
// Do nothing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *credVarsTracker) List() ([]VariableDefinition, error) {
|
|
||||||
return t.credVars.List()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *credVarsTracker) IterateInterpolatedCreds(iter CredVarsTrackerIterator) {
|
|
||||||
t.lock.RLock()
|
|
||||||
for k, v := range t.interpolatedCreds {
|
|
||||||
iter.YieldCred(k, v)
|
|
||||||
}
|
|
||||||
t.lock.RUnlock()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *credVarsTracker) Enabled() bool {
|
|
||||||
return t.enabled
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *credVarsTracker) NewLocalScope() CredVarsTracker {
|
|
||||||
localVarsClone := make(StaticVariables, len(t.localVars))
|
|
||||||
for k, v := range t.localVars {
|
|
||||||
localVarsClone[k] = v
|
|
||||||
}
|
|
||||||
noRedactVarNamesClone := make(map[string]bool, len(t.noRedactVarNames))
|
|
||||||
for k, v := range t.noRedactVarNames {
|
|
||||||
noRedactVarNamesClone[k] = v
|
|
||||||
}
|
|
||||||
interpolatedCredsClone := MapCredVarsTrackerIterator{}
|
|
||||||
t.IterateInterpolatedCreds(interpolatedCredsClone)
|
|
||||||
return &credVarsTracker{
|
|
||||||
credVars: t.credVars,
|
|
||||||
enabled: t.enabled,
|
|
||||||
localVars: localVarsClone,
|
|
||||||
noRedactVarNames: noRedactVarNamesClone,
|
|
||||||
interpolatedCreds: interpolatedCredsClone,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *credVarsTracker) AddLocalVar(name string, value interface{}, redact bool) {
|
|
||||||
t.localVars[name] = value
|
|
||||||
if !redact {
|
|
||||||
t.noRedactVarNames[name] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MapCredVarsTrackerIterator implements a simple CredVarsTrackerIterator which just
|
|
||||||
// populate interpolated secrets into a map.
|
|
||||||
type MapCredVarsTrackerIterator map[string]string
|
|
||||||
|
|
||||||
func (it MapCredVarsTrackerIterator) YieldCred(k, v string) {
|
|
||||||
it[k] = v
|
|
||||||
}
|
|
|
@ -1,172 +0,0 @@
|
||||||
package vars_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
. "github.com/concourse/concourse/vars"
|
|
||||||
. "github.com/onsi/ginkgo"
|
|
||||||
. "github.com/onsi/gomega"
|
|
||||||
)
|
|
||||||
|
|
||||||
var _ = Describe("vars_tracker", func() {
|
|
||||||
var tracker CredVarsTracker
|
|
||||||
|
|
||||||
Describe("turn on track", func() {
|
|
||||||
BeforeEach(func() {
|
|
||||||
v := StaticVariables{"k1": "v1", "k2": "v2", "k3": "v3"}
|
|
||||||
tracker = NewCredVarsTracker(v, true)
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("Get", func() {
|
|
||||||
It("returns expected value", func() {
|
|
||||||
var (
|
|
||||||
val interface{}
|
|
||||||
found bool
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
val, found, err = tracker.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
|
||||||
Expect(found).To(BeTrue())
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
Expect(val).To(Equal("v1"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("fetched variables are tracked", func() {
|
|
||||||
tracker.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
|
||||||
tracker.Get(VariableDefinition{Ref: VariableReference{Path: "k2"}})
|
|
||||||
mapit := MapCredVarsTrackerIterator{}
|
|
||||||
tracker.IterateInterpolatedCreds(mapit)
|
|
||||||
Expect(mapit["k1"]).To(Equal("v1"))
|
|
||||||
Expect(mapit["k2"]).To(Equal("v2"))
|
|
||||||
// "k3" has not been Get, thus should not be tracked.
|
|
||||||
Expect(mapit).ToNot(ContainElement("k3"))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("List", func() {
|
|
||||||
It("returns list of names from multiple vars with duplicates", func() {
|
|
||||||
defs, err := tracker.List()
|
|
||||||
Expect(defs).To(ConsistOf([]VariableDefinition{
|
|
||||||
{Ref: VariableReference{Path: "k1"}},
|
|
||||||
{Ref: VariableReference{Path: "k2"}},
|
|
||||||
{Ref: VariableReference{Path: "k3"}},
|
|
||||||
}))
|
|
||||||
Expect(err).ToNot(HaveOccurred())
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("AddLocalVar", func() {
|
|
||||||
Describe("redact", func() {
|
|
||||||
BeforeEach(func() {
|
|
||||||
tracker.AddLocalVar("foo", "bar", true)
|
|
||||||
})
|
|
||||||
|
|
||||||
It("should get local value", func() {
|
|
||||||
var (
|
|
||||||
val interface{}
|
|
||||||
found bool
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
val, found, err = tracker.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "foo"}})
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
Expect(found).To(BeTrue())
|
|
||||||
Expect(val).To(Equal("bar"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("fetched variables are tracked", func() {
|
|
||||||
tracker.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "foo"}})
|
|
||||||
mapit := MapCredVarsTrackerIterator{}
|
|
||||||
tracker.IterateInterpolatedCreds(mapit)
|
|
||||||
Expect(mapit["foo"]).To(Equal("bar"))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("NewLocalScope", func() {
|
|
||||||
It("copies all existing local vars", func() {
|
|
||||||
tracker.AddLocalVar("hello", "world", false)
|
|
||||||
scope := tracker.NewLocalScope()
|
|
||||||
val, _, _ := scope.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "hello"}})
|
|
||||||
Expect(val).To(Equal("world"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("adding local vars does not affect the original tracker", func() {
|
|
||||||
scope := tracker.NewLocalScope()
|
|
||||||
scope.AddLocalVar("hello", "world", false)
|
|
||||||
_, found, _ := tracker.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "hello"}})
|
|
||||||
Expect(found).To(BeFalse())
|
|
||||||
})
|
|
||||||
|
|
||||||
It("shares the underlying non-local variables", func() {
|
|
||||||
scope := tracker.NewLocalScope()
|
|
||||||
val, _, _ := scope.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
|
||||||
Expect(val).To(Equal("v1"))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("not redact", func() {
|
|
||||||
BeforeEach(func() {
|
|
||||||
tracker.AddLocalVar("foo", "bar", false)
|
|
||||||
})
|
|
||||||
|
|
||||||
It("should get local value", func() {
|
|
||||||
var (
|
|
||||||
val interface{}
|
|
||||||
found bool
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
val, found, err = tracker.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "foo"}})
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
Expect(found).To(BeTrue())
|
|
||||||
Expect(val).To(Equal("bar"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("fetched variables are not tracked", func() {
|
|
||||||
tracker.Get(VariableDefinition{Ref: VariableReference{Source: ".", Path: "foo"}})
|
|
||||||
mapit := MapCredVarsTrackerIterator{}
|
|
||||||
tracker.IterateInterpolatedCreds(mapit)
|
|
||||||
Expect(mapit).ToNot(ContainElement("foo"))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("turn off track", func() {
|
|
||||||
BeforeEach(func() {
|
|
||||||
v := StaticVariables{"k1": "v1", "k2": "v2", "k3": "v3"}
|
|
||||||
tracker = NewCredVarsTracker(v, false)
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("Get", func() {
|
|
||||||
It("returns expected value", func() {
|
|
||||||
var (
|
|
||||||
val interface{}
|
|
||||||
found bool
|
|
||||||
err error
|
|
||||||
)
|
|
||||||
val, found, err = tracker.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
|
||||||
Expect(found).To(BeTrue())
|
|
||||||
Expect(err).To(BeNil())
|
|
||||||
Expect(val).To(Equal("v1"))
|
|
||||||
})
|
|
||||||
|
|
||||||
It("fetched variables should not be tracked", func() {
|
|
||||||
tracker.Get(VariableDefinition{Ref: VariableReference{Path: "k1"}})
|
|
||||||
tracker.Get(VariableDefinition{Ref: VariableReference{Path: "k2"}})
|
|
||||||
mapit := MapCredVarsTrackerIterator{}
|
|
||||||
tracker.IterateInterpolatedCreds(mapit)
|
|
||||||
Expect(mapit).ToNot(ContainElement("k1"))
|
|
||||||
Expect(mapit).ToNot(ContainElement("k2"))
|
|
||||||
Expect(mapit).ToNot(ContainElement("k3"))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
Describe("List", func() {
|
|
||||||
It("returns list of names from multiple vars with duplicates", func() {
|
|
||||||
defs, err := tracker.List()
|
|
||||||
Expect(defs).To(ConsistOf([]VariableDefinition{
|
|
||||||
{Ref: VariableReference{Path: "k1"}},
|
|
||||||
{Ref: VariableReference{Path: "k2"}},
|
|
||||||
{Ref: VariableReference{Path: "k3"}},
|
|
||||||
}))
|
|
||||||
Expect(err).ToNot(HaveOccurred())
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
|
@ -1,397 +0,0 @@
|
||||||
// Code generated by counterfeiter. DO NOT EDIT.
|
|
||||||
package varsfakes
|
|
||||||
|
|
||||||
import (
|
|
||||||
"sync"
|
|
||||||
|
|
||||||
"github.com/concourse/concourse/vars"
|
|
||||||
)
|
|
||||||
|
|
||||||
type FakeCredVarsTracker struct {
|
|
||||||
AddLocalVarStub func(string, interface{}, bool)
|
|
||||||
addLocalVarMutex sync.RWMutex
|
|
||||||
addLocalVarArgsForCall []struct {
|
|
||||||
arg1 string
|
|
||||||
arg2 interface{}
|
|
||||||
arg3 bool
|
|
||||||
}
|
|
||||||
EnabledStub func() bool
|
|
||||||
enabledMutex sync.RWMutex
|
|
||||||
enabledArgsForCall []struct {
|
|
||||||
}
|
|
||||||
enabledReturns struct {
|
|
||||||
result1 bool
|
|
||||||
}
|
|
||||||
enabledReturnsOnCall map[int]struct {
|
|
||||||
result1 bool
|
|
||||||
}
|
|
||||||
GetStub func(vars.VariableDefinition) (interface{}, bool, error)
|
|
||||||
getMutex sync.RWMutex
|
|
||||||
getArgsForCall []struct {
|
|
||||||
arg1 vars.VariableDefinition
|
|
||||||
}
|
|
||||||
getReturns struct {
|
|
||||||
result1 interface{}
|
|
||||||
result2 bool
|
|
||||||
result3 error
|
|
||||||
}
|
|
||||||
getReturnsOnCall map[int]struct {
|
|
||||||
result1 interface{}
|
|
||||||
result2 bool
|
|
||||||
result3 error
|
|
||||||
}
|
|
||||||
IterateInterpolatedCredsStub func(vars.CredVarsTrackerIterator)
|
|
||||||
iterateInterpolatedCredsMutex sync.RWMutex
|
|
||||||
iterateInterpolatedCredsArgsForCall []struct {
|
|
||||||
arg1 vars.CredVarsTrackerIterator
|
|
||||||
}
|
|
||||||
ListStub func() ([]vars.VariableDefinition, error)
|
|
||||||
listMutex sync.RWMutex
|
|
||||||
listArgsForCall []struct {
|
|
||||||
}
|
|
||||||
listReturns struct {
|
|
||||||
result1 []vars.VariableDefinition
|
|
||||||
result2 error
|
|
||||||
}
|
|
||||||
listReturnsOnCall map[int]struct {
|
|
||||||
result1 []vars.VariableDefinition
|
|
||||||
result2 error
|
|
||||||
}
|
|
||||||
NewLocalScopeStub func() vars.CredVarsTracker
|
|
||||||
newLocalScopeMutex sync.RWMutex
|
|
||||||
newLocalScopeArgsForCall []struct {
|
|
||||||
}
|
|
||||||
newLocalScopeReturns struct {
|
|
||||||
result1 vars.CredVarsTracker
|
|
||||||
}
|
|
||||||
newLocalScopeReturnsOnCall map[int]struct {
|
|
||||||
result1 vars.CredVarsTracker
|
|
||||||
}
|
|
||||||
invocations map[string][][]interface{}
|
|
||||||
invocationsMutex sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) AddLocalVar(arg1 string, arg2 interface{}, arg3 bool) {
|
|
||||||
fake.addLocalVarMutex.Lock()
|
|
||||||
fake.addLocalVarArgsForCall = append(fake.addLocalVarArgsForCall, struct {
|
|
||||||
arg1 string
|
|
||||||
arg2 interface{}
|
|
||||||
arg3 bool
|
|
||||||
}{arg1, arg2, arg3})
|
|
||||||
fake.recordInvocation("AddLocalVar", []interface{}{arg1, arg2, arg3})
|
|
||||||
fake.addLocalVarMutex.Unlock()
|
|
||||||
if fake.AddLocalVarStub != nil {
|
|
||||||
fake.AddLocalVarStub(arg1, arg2, arg3)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) AddLocalVarCallCount() int {
|
|
||||||
fake.addLocalVarMutex.RLock()
|
|
||||||
defer fake.addLocalVarMutex.RUnlock()
|
|
||||||
return len(fake.addLocalVarArgsForCall)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) AddLocalVarCalls(stub func(string, interface{}, bool)) {
|
|
||||||
fake.addLocalVarMutex.Lock()
|
|
||||||
defer fake.addLocalVarMutex.Unlock()
|
|
||||||
fake.AddLocalVarStub = stub
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) AddLocalVarArgsForCall(i int) (string, interface{}, bool) {
|
|
||||||
fake.addLocalVarMutex.RLock()
|
|
||||||
defer fake.addLocalVarMutex.RUnlock()
|
|
||||||
argsForCall := fake.addLocalVarArgsForCall[i]
|
|
||||||
return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) Enabled() bool {
|
|
||||||
fake.enabledMutex.Lock()
|
|
||||||
ret, specificReturn := fake.enabledReturnsOnCall[len(fake.enabledArgsForCall)]
|
|
||||||
fake.enabledArgsForCall = append(fake.enabledArgsForCall, struct {
|
|
||||||
}{})
|
|
||||||
fake.recordInvocation("Enabled", []interface{}{})
|
|
||||||
fake.enabledMutex.Unlock()
|
|
||||||
if fake.EnabledStub != nil {
|
|
||||||
return fake.EnabledStub()
|
|
||||||
}
|
|
||||||
if specificReturn {
|
|
||||||
return ret.result1
|
|
||||||
}
|
|
||||||
fakeReturns := fake.enabledReturns
|
|
||||||
return fakeReturns.result1
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) EnabledCallCount() int {
|
|
||||||
fake.enabledMutex.RLock()
|
|
||||||
defer fake.enabledMutex.RUnlock()
|
|
||||||
return len(fake.enabledArgsForCall)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) EnabledCalls(stub func() bool) {
|
|
||||||
fake.enabledMutex.Lock()
|
|
||||||
defer fake.enabledMutex.Unlock()
|
|
||||||
fake.EnabledStub = stub
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) EnabledReturns(result1 bool) {
|
|
||||||
fake.enabledMutex.Lock()
|
|
||||||
defer fake.enabledMutex.Unlock()
|
|
||||||
fake.EnabledStub = nil
|
|
||||||
fake.enabledReturns = struct {
|
|
||||||
result1 bool
|
|
||||||
}{result1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) EnabledReturnsOnCall(i int, result1 bool) {
|
|
||||||
fake.enabledMutex.Lock()
|
|
||||||
defer fake.enabledMutex.Unlock()
|
|
||||||
fake.EnabledStub = nil
|
|
||||||
if fake.enabledReturnsOnCall == nil {
|
|
||||||
fake.enabledReturnsOnCall = make(map[int]struct {
|
|
||||||
result1 bool
|
|
||||||
})
|
|
||||||
}
|
|
||||||
fake.enabledReturnsOnCall[i] = struct {
|
|
||||||
result1 bool
|
|
||||||
}{result1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) Get(arg1 vars.VariableDefinition) (interface{}, bool, error) {
|
|
||||||
fake.getMutex.Lock()
|
|
||||||
ret, specificReturn := fake.getReturnsOnCall[len(fake.getArgsForCall)]
|
|
||||||
fake.getArgsForCall = append(fake.getArgsForCall, struct {
|
|
||||||
arg1 vars.VariableDefinition
|
|
||||||
}{arg1})
|
|
||||||
fake.recordInvocation("Get", []interface{}{arg1})
|
|
||||||
fake.getMutex.Unlock()
|
|
||||||
if fake.GetStub != nil {
|
|
||||||
return fake.GetStub(arg1)
|
|
||||||
}
|
|
||||||
if specificReturn {
|
|
||||||
return ret.result1, ret.result2, ret.result3
|
|
||||||
}
|
|
||||||
fakeReturns := fake.getReturns
|
|
||||||
return fakeReturns.result1, fakeReturns.result2, fakeReturns.result3
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) GetCallCount() int {
|
|
||||||
fake.getMutex.RLock()
|
|
||||||
defer fake.getMutex.RUnlock()
|
|
||||||
return len(fake.getArgsForCall)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) GetCalls(stub func(vars.VariableDefinition) (interface{}, bool, error)) {
|
|
||||||
fake.getMutex.Lock()
|
|
||||||
defer fake.getMutex.Unlock()
|
|
||||||
fake.GetStub = stub
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) GetArgsForCall(i int) vars.VariableDefinition {
|
|
||||||
fake.getMutex.RLock()
|
|
||||||
defer fake.getMutex.RUnlock()
|
|
||||||
argsForCall := fake.getArgsForCall[i]
|
|
||||||
return argsForCall.arg1
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) GetReturns(result1 interface{}, result2 bool, result3 error) {
|
|
||||||
fake.getMutex.Lock()
|
|
||||||
defer fake.getMutex.Unlock()
|
|
||||||
fake.GetStub = nil
|
|
||||||
fake.getReturns = struct {
|
|
||||||
result1 interface{}
|
|
||||||
result2 bool
|
|
||||||
result3 error
|
|
||||||
}{result1, result2, result3}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) GetReturnsOnCall(i int, result1 interface{}, result2 bool, result3 error) {
|
|
||||||
fake.getMutex.Lock()
|
|
||||||
defer fake.getMutex.Unlock()
|
|
||||||
fake.GetStub = nil
|
|
||||||
if fake.getReturnsOnCall == nil {
|
|
||||||
fake.getReturnsOnCall = make(map[int]struct {
|
|
||||||
result1 interface{}
|
|
||||||
result2 bool
|
|
||||||
result3 error
|
|
||||||
})
|
|
||||||
}
|
|
||||||
fake.getReturnsOnCall[i] = struct {
|
|
||||||
result1 interface{}
|
|
||||||
result2 bool
|
|
||||||
result3 error
|
|
||||||
}{result1, result2, result3}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) IterateInterpolatedCreds(arg1 vars.CredVarsTrackerIterator) {
|
|
||||||
fake.iterateInterpolatedCredsMutex.Lock()
|
|
||||||
fake.iterateInterpolatedCredsArgsForCall = append(fake.iterateInterpolatedCredsArgsForCall, struct {
|
|
||||||
arg1 vars.CredVarsTrackerIterator
|
|
||||||
}{arg1})
|
|
||||||
fake.recordInvocation("IterateInterpolatedCreds", []interface{}{arg1})
|
|
||||||
fake.iterateInterpolatedCredsMutex.Unlock()
|
|
||||||
if fake.IterateInterpolatedCredsStub != nil {
|
|
||||||
fake.IterateInterpolatedCredsStub(arg1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) IterateInterpolatedCredsCallCount() int {
|
|
||||||
fake.iterateInterpolatedCredsMutex.RLock()
|
|
||||||
defer fake.iterateInterpolatedCredsMutex.RUnlock()
|
|
||||||
return len(fake.iterateInterpolatedCredsArgsForCall)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) IterateInterpolatedCredsCalls(stub func(vars.CredVarsTrackerIterator)) {
|
|
||||||
fake.iterateInterpolatedCredsMutex.Lock()
|
|
||||||
defer fake.iterateInterpolatedCredsMutex.Unlock()
|
|
||||||
fake.IterateInterpolatedCredsStub = stub
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) IterateInterpolatedCredsArgsForCall(i int) vars.CredVarsTrackerIterator {
|
|
||||||
fake.iterateInterpolatedCredsMutex.RLock()
|
|
||||||
defer fake.iterateInterpolatedCredsMutex.RUnlock()
|
|
||||||
argsForCall := fake.iterateInterpolatedCredsArgsForCall[i]
|
|
||||||
return argsForCall.arg1
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) List() ([]vars.VariableDefinition, error) {
|
|
||||||
fake.listMutex.Lock()
|
|
||||||
ret, specificReturn := fake.listReturnsOnCall[len(fake.listArgsForCall)]
|
|
||||||
fake.listArgsForCall = append(fake.listArgsForCall, struct {
|
|
||||||
}{})
|
|
||||||
fake.recordInvocation("List", []interface{}{})
|
|
||||||
fake.listMutex.Unlock()
|
|
||||||
if fake.ListStub != nil {
|
|
||||||
return fake.ListStub()
|
|
||||||
}
|
|
||||||
if specificReturn {
|
|
||||||
return ret.result1, ret.result2
|
|
||||||
}
|
|
||||||
fakeReturns := fake.listReturns
|
|
||||||
return fakeReturns.result1, fakeReturns.result2
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) ListCallCount() int {
|
|
||||||
fake.listMutex.RLock()
|
|
||||||
defer fake.listMutex.RUnlock()
|
|
||||||
return len(fake.listArgsForCall)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) ListCalls(stub func() ([]vars.VariableDefinition, error)) {
|
|
||||||
fake.listMutex.Lock()
|
|
||||||
defer fake.listMutex.Unlock()
|
|
||||||
fake.ListStub = stub
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) ListReturns(result1 []vars.VariableDefinition, result2 error) {
|
|
||||||
fake.listMutex.Lock()
|
|
||||||
defer fake.listMutex.Unlock()
|
|
||||||
fake.ListStub = nil
|
|
||||||
fake.listReturns = struct {
|
|
||||||
result1 []vars.VariableDefinition
|
|
||||||
result2 error
|
|
||||||
}{result1, result2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) ListReturnsOnCall(i int, result1 []vars.VariableDefinition, result2 error) {
|
|
||||||
fake.listMutex.Lock()
|
|
||||||
defer fake.listMutex.Unlock()
|
|
||||||
fake.ListStub = nil
|
|
||||||
if fake.listReturnsOnCall == nil {
|
|
||||||
fake.listReturnsOnCall = make(map[int]struct {
|
|
||||||
result1 []vars.VariableDefinition
|
|
||||||
result2 error
|
|
||||||
})
|
|
||||||
}
|
|
||||||
fake.listReturnsOnCall[i] = struct {
|
|
||||||
result1 []vars.VariableDefinition
|
|
||||||
result2 error
|
|
||||||
}{result1, result2}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) NewLocalScope() vars.CredVarsTracker {
|
|
||||||
fake.newLocalScopeMutex.Lock()
|
|
||||||
ret, specificReturn := fake.newLocalScopeReturnsOnCall[len(fake.newLocalScopeArgsForCall)]
|
|
||||||
fake.newLocalScopeArgsForCall = append(fake.newLocalScopeArgsForCall, struct {
|
|
||||||
}{})
|
|
||||||
fake.recordInvocation("NewLocalScope", []interface{}{})
|
|
||||||
fake.newLocalScopeMutex.Unlock()
|
|
||||||
if fake.NewLocalScopeStub != nil {
|
|
||||||
return fake.NewLocalScopeStub()
|
|
||||||
}
|
|
||||||
if specificReturn {
|
|
||||||
return ret.result1
|
|
||||||
}
|
|
||||||
fakeReturns := fake.newLocalScopeReturns
|
|
||||||
return fakeReturns.result1
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) NewLocalScopeCallCount() int {
|
|
||||||
fake.newLocalScopeMutex.RLock()
|
|
||||||
defer fake.newLocalScopeMutex.RUnlock()
|
|
||||||
return len(fake.newLocalScopeArgsForCall)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) NewLocalScopeCalls(stub func() vars.CredVarsTracker) {
|
|
||||||
fake.newLocalScopeMutex.Lock()
|
|
||||||
defer fake.newLocalScopeMutex.Unlock()
|
|
||||||
fake.NewLocalScopeStub = stub
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) NewLocalScopeReturns(result1 vars.CredVarsTracker) {
|
|
||||||
fake.newLocalScopeMutex.Lock()
|
|
||||||
defer fake.newLocalScopeMutex.Unlock()
|
|
||||||
fake.NewLocalScopeStub = nil
|
|
||||||
fake.newLocalScopeReturns = struct {
|
|
||||||
result1 vars.CredVarsTracker
|
|
||||||
}{result1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) NewLocalScopeReturnsOnCall(i int, result1 vars.CredVarsTracker) {
|
|
||||||
fake.newLocalScopeMutex.Lock()
|
|
||||||
defer fake.newLocalScopeMutex.Unlock()
|
|
||||||
fake.NewLocalScopeStub = nil
|
|
||||||
if fake.newLocalScopeReturnsOnCall == nil {
|
|
||||||
fake.newLocalScopeReturnsOnCall = make(map[int]struct {
|
|
||||||
result1 vars.CredVarsTracker
|
|
||||||
})
|
|
||||||
}
|
|
||||||
fake.newLocalScopeReturnsOnCall[i] = struct {
|
|
||||||
result1 vars.CredVarsTracker
|
|
||||||
}{result1}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) Invocations() map[string][][]interface{} {
|
|
||||||
fake.invocationsMutex.RLock()
|
|
||||||
defer fake.invocationsMutex.RUnlock()
|
|
||||||
fake.addLocalVarMutex.RLock()
|
|
||||||
defer fake.addLocalVarMutex.RUnlock()
|
|
||||||
fake.enabledMutex.RLock()
|
|
||||||
defer fake.enabledMutex.RUnlock()
|
|
||||||
fake.getMutex.RLock()
|
|
||||||
defer fake.getMutex.RUnlock()
|
|
||||||
fake.iterateInterpolatedCredsMutex.RLock()
|
|
||||||
defer fake.iterateInterpolatedCredsMutex.RUnlock()
|
|
||||||
fake.listMutex.RLock()
|
|
||||||
defer fake.listMutex.RUnlock()
|
|
||||||
fake.newLocalScopeMutex.RLock()
|
|
||||||
defer fake.newLocalScopeMutex.RUnlock()
|
|
||||||
copiedInvocations := map[string][][]interface{}{}
|
|
||||||
for key, value := range fake.invocations {
|
|
||||||
copiedInvocations[key] = value
|
|
||||||
}
|
|
||||||
return copiedInvocations
|
|
||||||
}
|
|
||||||
|
|
||||||
func (fake *FakeCredVarsTracker) recordInvocation(key string, args []interface{}) {
|
|
||||||
fake.invocationsMutex.Lock()
|
|
||||||
defer fake.invocationsMutex.Unlock()
|
|
||||||
if fake.invocations == nil {
|
|
||||||
fake.invocations = map[string][][]interface{}{}
|
|
||||||
}
|
|
||||||
if fake.invocations[key] == nil {
|
|
||||||
fake.invocations[key] = [][]interface{}{}
|
|
||||||
}
|
|
||||||
fake.invocations[key] = append(fake.invocations[key], args)
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ vars.CredVarsTracker = new(FakeCredVarsTracker)
|
|
|
@ -0,0 +1,189 @@
|
||||||
|
// Code generated by counterfeiter. DO NOT EDIT.
|
||||||
|
package varsfakes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"github.com/concourse/concourse/vars"
|
||||||
|
)
|
||||||
|
|
||||||
|
type FakeVariables struct {
|
||||||
|
GetStub func(vars.VariableDefinition) (interface{}, bool, error)
|
||||||
|
getMutex sync.RWMutex
|
||||||
|
getArgsForCall []struct {
|
||||||
|
arg1 vars.VariableDefinition
|
||||||
|
}
|
||||||
|
getReturns struct {
|
||||||
|
result1 interface{}
|
||||||
|
result2 bool
|
||||||
|
result3 error
|
||||||
|
}
|
||||||
|
getReturnsOnCall map[int]struct {
|
||||||
|
result1 interface{}
|
||||||
|
result2 bool
|
||||||
|
result3 error
|
||||||
|
}
|
||||||
|
ListStub func() ([]vars.VariableDefinition, error)
|
||||||
|
listMutex sync.RWMutex
|
||||||
|
listArgsForCall []struct {
|
||||||
|
}
|
||||||
|
listReturns struct {
|
||||||
|
result1 []vars.VariableDefinition
|
||||||
|
result2 error
|
||||||
|
}
|
||||||
|
listReturnsOnCall map[int]struct {
|
||||||
|
result1 []vars.VariableDefinition
|
||||||
|
result2 error
|
||||||
|
}
|
||||||
|
invocations map[string][][]interface{}
|
||||||
|
invocationsMutex sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) Get(arg1 vars.VariableDefinition) (interface{}, bool, error) {
|
||||||
|
fake.getMutex.Lock()
|
||||||
|
ret, specificReturn := fake.getReturnsOnCall[len(fake.getArgsForCall)]
|
||||||
|
fake.getArgsForCall = append(fake.getArgsForCall, struct {
|
||||||
|
arg1 vars.VariableDefinition
|
||||||
|
}{arg1})
|
||||||
|
fake.recordInvocation("Get", []interface{}{arg1})
|
||||||
|
fake.getMutex.Unlock()
|
||||||
|
if fake.GetStub != nil {
|
||||||
|
return fake.GetStub(arg1)
|
||||||
|
}
|
||||||
|
if specificReturn {
|
||||||
|
return ret.result1, ret.result2, ret.result3
|
||||||
|
}
|
||||||
|
fakeReturns := fake.getReturns
|
||||||
|
return fakeReturns.result1, fakeReturns.result2, fakeReturns.result3
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) GetCallCount() int {
|
||||||
|
fake.getMutex.RLock()
|
||||||
|
defer fake.getMutex.RUnlock()
|
||||||
|
return len(fake.getArgsForCall)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) GetCalls(stub func(vars.VariableDefinition) (interface{}, bool, error)) {
|
||||||
|
fake.getMutex.Lock()
|
||||||
|
defer fake.getMutex.Unlock()
|
||||||
|
fake.GetStub = stub
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) GetArgsForCall(i int) vars.VariableDefinition {
|
||||||
|
fake.getMutex.RLock()
|
||||||
|
defer fake.getMutex.RUnlock()
|
||||||
|
argsForCall := fake.getArgsForCall[i]
|
||||||
|
return argsForCall.arg1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) GetReturns(result1 interface{}, result2 bool, result3 error) {
|
||||||
|
fake.getMutex.Lock()
|
||||||
|
defer fake.getMutex.Unlock()
|
||||||
|
fake.GetStub = nil
|
||||||
|
fake.getReturns = struct {
|
||||||
|
result1 interface{}
|
||||||
|
result2 bool
|
||||||
|
result3 error
|
||||||
|
}{result1, result2, result3}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) GetReturnsOnCall(i int, result1 interface{}, result2 bool, result3 error) {
|
||||||
|
fake.getMutex.Lock()
|
||||||
|
defer fake.getMutex.Unlock()
|
||||||
|
fake.GetStub = nil
|
||||||
|
if fake.getReturnsOnCall == nil {
|
||||||
|
fake.getReturnsOnCall = make(map[int]struct {
|
||||||
|
result1 interface{}
|
||||||
|
result2 bool
|
||||||
|
result3 error
|
||||||
|
})
|
||||||
|
}
|
||||||
|
fake.getReturnsOnCall[i] = struct {
|
||||||
|
result1 interface{}
|
||||||
|
result2 bool
|
||||||
|
result3 error
|
||||||
|
}{result1, result2, result3}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) List() ([]vars.VariableDefinition, error) {
|
||||||
|
fake.listMutex.Lock()
|
||||||
|
ret, specificReturn := fake.listReturnsOnCall[len(fake.listArgsForCall)]
|
||||||
|
fake.listArgsForCall = append(fake.listArgsForCall, struct {
|
||||||
|
}{})
|
||||||
|
fake.recordInvocation("List", []interface{}{})
|
||||||
|
fake.listMutex.Unlock()
|
||||||
|
if fake.ListStub != nil {
|
||||||
|
return fake.ListStub()
|
||||||
|
}
|
||||||
|
if specificReturn {
|
||||||
|
return ret.result1, ret.result2
|
||||||
|
}
|
||||||
|
fakeReturns := fake.listReturns
|
||||||
|
return fakeReturns.result1, fakeReturns.result2
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) ListCallCount() int {
|
||||||
|
fake.listMutex.RLock()
|
||||||
|
defer fake.listMutex.RUnlock()
|
||||||
|
return len(fake.listArgsForCall)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) ListCalls(stub func() ([]vars.VariableDefinition, error)) {
|
||||||
|
fake.listMutex.Lock()
|
||||||
|
defer fake.listMutex.Unlock()
|
||||||
|
fake.ListStub = stub
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) ListReturns(result1 []vars.VariableDefinition, result2 error) {
|
||||||
|
fake.listMutex.Lock()
|
||||||
|
defer fake.listMutex.Unlock()
|
||||||
|
fake.ListStub = nil
|
||||||
|
fake.listReturns = struct {
|
||||||
|
result1 []vars.VariableDefinition
|
||||||
|
result2 error
|
||||||
|
}{result1, result2}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) ListReturnsOnCall(i int, result1 []vars.VariableDefinition, result2 error) {
|
||||||
|
fake.listMutex.Lock()
|
||||||
|
defer fake.listMutex.Unlock()
|
||||||
|
fake.ListStub = nil
|
||||||
|
if fake.listReturnsOnCall == nil {
|
||||||
|
fake.listReturnsOnCall = make(map[int]struct {
|
||||||
|
result1 []vars.VariableDefinition
|
||||||
|
result2 error
|
||||||
|
})
|
||||||
|
}
|
||||||
|
fake.listReturnsOnCall[i] = struct {
|
||||||
|
result1 []vars.VariableDefinition
|
||||||
|
result2 error
|
||||||
|
}{result1, result2}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) Invocations() map[string][][]interface{} {
|
||||||
|
fake.invocationsMutex.RLock()
|
||||||
|
defer fake.invocationsMutex.RUnlock()
|
||||||
|
fake.getMutex.RLock()
|
||||||
|
defer fake.getMutex.RUnlock()
|
||||||
|
fake.listMutex.RLock()
|
||||||
|
defer fake.listMutex.RUnlock()
|
||||||
|
copiedInvocations := map[string][][]interface{}{}
|
||||||
|
for key, value := range fake.invocations {
|
||||||
|
copiedInvocations[key] = value
|
||||||
|
}
|
||||||
|
return copiedInvocations
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeVariables) recordInvocation(key string, args []interface{}) {
|
||||||
|
fake.invocationsMutex.Lock()
|
||||||
|
defer fake.invocationsMutex.Unlock()
|
||||||
|
if fake.invocations == nil {
|
||||||
|
fake.invocations = map[string][][]interface{}{}
|
||||||
|
}
|
||||||
|
if fake.invocations[key] == nil {
|
||||||
|
fake.invocations[key] = [][]interface{}{}
|
||||||
|
}
|
||||||
|
fake.invocations[key] = append(fake.invocations[key], args)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ vars.Variables = new(FakeVariables)
|
Loading…
Reference in New Issue