Use custom types for secret references

This allows us to require that name (and namespace where appropriate) are set at
the CRD level. In the case of cluster scoped resources that reference secrets
this is less surprising than defaulting to the `default` namespace when the
namespace is omitted.

Signed-off-by: Nic Cope <negz@rk0n.org>
This commit is contained in:
Nic Cope 2019-10-13 17:12:48 -07:00
parent 9f5188e0cb
commit a2e24876e0
9 changed files with 179 additions and 122 deletions

View File

@ -39,6 +39,35 @@ const (
ResourceCredentialsTokenKey = "token"
)
// NOTE(negz): The below secret references differ from ObjectReference and
// LocalObjectReference in that they include only the fields Crossplane needs to
// reference a secret, and make those fields required. This reduces ambiguity in
// the API for resource authors.
// A LocalSecretReference is a reference to a secret in the same namespace as
// the referencer.
type LocalSecretReference struct {
// Name of the secret.
Name string `json:"name"`
}
// A SecretReference is a reference to a secret in an arbitrary namespace.
type SecretReference struct {
// Name of the secret.
Name string `json:"name"`
// Namespace of the secret.
Namespace string `json:"namespace"`
}
// A SecretKeySelector is a reference to a secret key in an arbitrary namespace.
type SecretKeySelector struct {
SecretReference `json:",inline"`
// The key to select.
Key string `json:"key"`
}
// A ResourceClaimSpec defines the desired state of a resource claim.
type ResourceClaimSpec struct {
// WriteConnectionSecretToReference specifies the name of a Secret, in the
@ -47,7 +76,7 @@ type ResourceClaimSpec struct {
// include the endpoint, username, and password required to connect to the
// managed resource bound to this resource claim.
// +optional
WriteConnectionSecretToReference corev1.LocalObjectReference `json:"writeConnectionSecretToRef,omitempty"`
WriteConnectionSecretToReference *LocalSecretReference `json:"writeConnectionSecretToRef,omitempty"`
// TODO(negz): Make the below references immutable once set? Doing so means
// we don't have to track what provisioner was used to create a resource.
@ -83,7 +112,7 @@ type ResourceSpec struct {
// be written. Connection details frequently include the endpoint, username,
// and password required to connect to the managed resource.
// +optional
WriteConnectionSecretToReference *corev1.ObjectReference `json:"writeConnectionSecretToRef,omitempty"`
WriteConnectionSecretToReference *SecretReference `json:"writeConnectionSecretToRef,omitempty"`
// ClaimReference specifies the resource claim to which this managed
// resource will be bound. ClaimReference is set automatically during

View File

@ -97,10 +97,29 @@ func (in *ConditionedStatus) DeepCopy() *ConditionedStatus {
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *LocalSecretReference) DeepCopyInto(out *LocalSecretReference) {
*out = *in
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalSecretReference.
func (in *LocalSecretReference) DeepCopy() *LocalSecretReference {
if in == nil {
return nil
}
out := new(LocalSecretReference)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ResourceClaimSpec) DeepCopyInto(out *ResourceClaimSpec) {
*out = *in
out.WriteConnectionSecretToReference = in.WriteConnectionSecretToReference
if in.WriteConnectionSecretToReference != nil {
in, out := &in.WriteConnectionSecretToReference, &out.WriteConnectionSecretToReference
*out = new(LocalSecretReference)
**out = **in
}
if in.ClassReference != nil {
in, out := &in.ClassReference, &out.ClassReference
*out = new(v1.ObjectReference)
@ -145,7 +164,7 @@ func (in *ResourceSpec) DeepCopyInto(out *ResourceSpec) {
*out = *in
if in.WriteConnectionSecretToReference != nil {
in, out := &in.WriteConnectionSecretToReference, &out.WriteConnectionSecretToReference
*out = new(v1.ObjectReference)
*out = new(SecretReference)
**out = **in
}
if in.ClaimReference != nil {
@ -191,3 +210,34 @@ func (in *ResourceStatus) DeepCopy() *ResourceStatus {
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *SecretKeySelector) DeepCopyInto(out *SecretKeySelector) {
*out = *in
out.SecretReference = in.SecretReference
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretKeySelector.
func (in *SecretKeySelector) DeepCopy() *SecretKeySelector {
if in == nil {
return nil
}
out := new(SecretKeySelector)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *SecretReference) DeepCopyInto(out *SecretReference) {
*out = *in
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretReference.
func (in *SecretReference) DeepCopy() *SecretReference {
if in == nil {
return nil
}
out := new(SecretReference)
in.DeepCopyInto(out)
return out
}

View File

@ -93,7 +93,7 @@ func NewAPIManagedConnectionPropagator(c client.Client, t runtime.ObjectTyper) *
func (a *APIManagedConnectionPropagator) PropagateConnection(ctx context.Context, cm Claim, mg Managed) error {
// Either this resource does not expose a connection secret, or this claim
// does not want one.
if mg.GetWriteConnectionSecretToReference() == nil || cm.GetWriteConnectionSecretToReference().Name == "" {
if mg.GetWriteConnectionSecretToReference() == nil || cm.GetWriteConnectionSecretToReference() == nil {
return nil
}

View File

@ -173,6 +173,7 @@ func TestPropagateConnection(t *testing.T) {
uid := types.UID("definitely-a-uuid")
cmcsname := "coolclaimsecret"
mgcsname := "coolmanagedsecret"
mgcsnamespace := "coolns"
mgcsdata := map[string][]byte{"cool": []byte("data")}
controller := true
errBoom := errors.New("boom")
@ -187,7 +188,9 @@ func TestPropagateConnection(t *testing.T) {
ctx: context.Background(),
cm: &MockClaim{},
mg: &MockManaged{
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
},
},
},
want: nil,
@ -196,7 +199,9 @@ func TestPropagateConnection(t *testing.T) {
args: args{
ctx: context.Background(),
cm: &MockClaim{
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: mgcsname}},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
Ref: &v1alpha1.LocalSecretReference{Name: mgcsname},
},
},
mg: &MockManaged{},
},
@ -209,10 +214,14 @@ func TestPropagateConnection(t *testing.T) {
args: args{
ctx: context.Background(),
cm: &MockClaim{
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
},
},
mg: &MockManaged{
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
},
},
},
want: errors.Wrap(errBoom, errGetSecret),
@ -248,12 +257,16 @@ func TestPropagateConnection(t *testing.T) {
args: args{
ctx: context.Background(),
cm: &MockClaim{
ObjectMeta: metav1.ObjectMeta{Name: cmname},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
ObjectMeta: metav1.ObjectMeta{Name: cmname},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
},
},
mg: &MockManaged{
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
},
},
},
want: errors.Wrap(errors.New(errSecretConflict), errCreateOrUpdateSecret),
@ -285,12 +298,16 @@ func TestPropagateConnection(t *testing.T) {
args: args{
ctx: context.Background(),
cm: &MockClaim{
ObjectMeta: metav1.ObjectMeta{Name: cmname},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
ObjectMeta: metav1.ObjectMeta{Name: cmname},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
},
},
mg: &MockManaged{
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
},
},
},
want: errors.Wrap(errors.New(errSecretConflict), errCreateOrUpdateSecret),
@ -331,12 +348,16 @@ func TestPropagateConnection(t *testing.T) {
args: args{
ctx: context.Background(),
cm: &MockClaim{
ObjectMeta: metav1.ObjectMeta{Name: cmname},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
ObjectMeta: metav1.ObjectMeta{Name: cmname},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
},
},
mg: &MockManaged{
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
},
},
},
want: errors.Wrap(errBoom, errUpdateSecret),
@ -402,12 +423,16 @@ func TestPropagateConnection(t *testing.T) {
args: args{
ctx: context.Background(),
cm: &MockClaim{
ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: cmname, UID: uid},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{Ref: corev1.LocalObjectReference{Name: cmcsname}},
ObjectMeta: metav1.ObjectMeta{Namespace: namespace, Name: cmname, UID: uid},
MockLocalConnectionSecretWriterTo: MockLocalConnectionSecretWriterTo{
Ref: &v1alpha1.LocalSecretReference{Name: cmcsname},
},
},
mg: &MockManaged{
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
ObjectMeta: metav1.ObjectMeta{Name: mgname, UID: uid},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{
Ref: &v1alpha1.SecretReference{Namespace: mgcsnamespace, Name: mgcsname},
},
},
},
want: nil,

View File

@ -59,15 +59,15 @@ type ManagedResourceReferencer interface {
// A LocalConnectionSecretWriterTo may write a connection secret to its own
// namespace.
type LocalConnectionSecretWriterTo interface {
SetWriteConnectionSecretToReference(r corev1.LocalObjectReference)
GetWriteConnectionSecretToReference() corev1.LocalObjectReference
SetWriteConnectionSecretToReference(r *v1alpha1.LocalSecretReference)
GetWriteConnectionSecretToReference() *v1alpha1.LocalSecretReference
}
// A ConnectionSecretWriterTo may write a connection secret to an arbitrary
// namespace.
type ConnectionSecretWriterTo interface {
SetWriteConnectionSecretToReference(r *corev1.ObjectReference)
GetWriteConnectionSecretToReference() *corev1.ObjectReference
SetWriteConnectionSecretToReference(r *v1alpha1.SecretReference)
GetWriteConnectionSecretToReference() *v1alpha1.SecretReference
}
// A Reclaimer may specify a ReclaimPolicy.

View File

@ -55,21 +55,23 @@ type MockManagedResourceReferencer struct{ Ref *corev1.ObjectReference }
func (m *MockManagedResourceReferencer) SetResourceReference(r *corev1.ObjectReference) { m.Ref = r }
func (m *MockManagedResourceReferencer) GetResourceReference() *corev1.ObjectReference { return m.Ref }
type MockLocalConnectionSecretWriterTo struct{ Ref corev1.LocalObjectReference }
type MockLocalConnectionSecretWriterTo struct {
Ref *v1alpha1.LocalSecretReference
}
func (m *MockLocalConnectionSecretWriterTo) SetWriteConnectionSecretToReference(r corev1.LocalObjectReference) {
func (m *MockLocalConnectionSecretWriterTo) SetWriteConnectionSecretToReference(r *v1alpha1.LocalSecretReference) {
m.Ref = r
}
func (m *MockLocalConnectionSecretWriterTo) GetWriteConnectionSecretToReference() corev1.LocalObjectReference {
func (m *MockLocalConnectionSecretWriterTo) GetWriteConnectionSecretToReference() *v1alpha1.LocalSecretReference {
return m.Ref
}
type MockConnectionSecretWriterTo struct{ Ref *corev1.ObjectReference }
type MockConnectionSecretWriterTo struct{ Ref *v1alpha1.SecretReference }
func (m *MockConnectionSecretWriterTo) SetWriteConnectionSecretToReference(r *corev1.ObjectReference) {
func (m *MockConnectionSecretWriterTo) SetWriteConnectionSecretToReference(r *v1alpha1.SecretReference) {
m.Ref = r
}
func (m *MockConnectionSecretWriterTo) GetWriteConnectionSecretToReference() *corev1.ObjectReference {
func (m *MockConnectionSecretWriterTo) GetWriteConnectionSecretToReference() *v1alpha1.SecretReference {
return m.Ref
}

View File

@ -30,6 +30,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/crossplaneio/crossplane-runtime/apis/core/v1alpha1"
"github.com/crossplaneio/crossplane-runtime/pkg/test"
)
@ -164,7 +165,10 @@ func TestAPISecretPublisher(t *testing.T) {
args: args{
ctx: context.Background(),
mg: &MockManaged{
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
Namespace: mgcsnamespace,
Name: mgcsname,
}},
},
c: ConnectionDetails{},
},
@ -184,7 +188,10 @@ func TestAPISecretPublisher(t *testing.T) {
args: args{
ctx: context.Background(),
mg: &MockManaged{
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
Namespace: mgcsnamespace,
Name: mgcsname,
}},
},
c: ConnectionDetails{},
},
@ -216,41 +223,11 @@ func TestAPISecretPublisher(t *testing.T) {
args: args{
ctx: context.Background(),
mg: &MockManaged{
ObjectMeta: metav1.ObjectMeta{Name: mgname},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Namespace: mgcsnamespace, Name: mgcsname}},
},
c: ConnectionDetails(cddata),
},
want: nil,
},
"SuccessfulCreateInDefaultNamespace": {
fields: fields{
client: &test.MockClient{
MockGet: test.NewMockGetFn(kerrors.NewNotFound(schema.GroupResource{}, "")),
MockCreate: test.NewMockCreateFn(nil, func(got runtime.Object) error {
want := &corev1.Secret{}
want.SetNamespace(corev1.NamespaceDefault)
want.SetName(mgcsname)
want.SetOwnerReferences([]metav1.OwnerReference{{
Name: mgname,
APIVersion: MockGVK(&MockManaged{}).GroupVersion().String(),
Kind: MockGVK(&MockManaged{}).Kind,
Controller: &controller,
}})
want.Data = cddata
if diff := cmp.Diff(want, got); diff != "" {
t.Errorf("-want, +got:\n%s", diff)
}
return nil
}),
},
typer: MockSchemeWith(&MockManaged{}),
},
args: args{
ctx: context.Background(),
mg: &MockManaged{
ObjectMeta: metav1.ObjectMeta{Name: mgname},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
ObjectMeta: metav1.ObjectMeta{Name: mgname},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
Namespace: mgcsnamespace,
Name: mgcsname,
}},
},
c: ConnectionDetails(cddata),
},
@ -261,7 +238,7 @@ func TestAPISecretPublisher(t *testing.T) {
client: &test.MockClient{
MockGet: func(_ context.Context, n types.NamespacedName, o runtime.Object) error {
s := &corev1.Secret{}
s.SetNamespace(corev1.NamespaceDefault)
s.SetNamespace(mgcsnamespace)
s.SetName(mgcsname)
s.SetOwnerReferences([]metav1.OwnerReference{{
Name: mgname,
@ -274,7 +251,7 @@ func TestAPISecretPublisher(t *testing.T) {
},
MockUpdate: test.NewMockUpdateFn(nil, func(got runtime.Object) error {
want := &corev1.Secret{}
want.SetNamespace(corev1.NamespaceDefault)
want.SetNamespace(mgcsnamespace)
want.SetName(mgcsname)
want.SetOwnerReferences([]metav1.OwnerReference{{
Name: mgname,
@ -294,8 +271,11 @@ func TestAPISecretPublisher(t *testing.T) {
args: args{
ctx: context.Background(),
mg: &MockManaged{
ObjectMeta: metav1.ObjectMeta{Name: mgname},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
ObjectMeta: metav1.ObjectMeta{Name: mgname},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
Namespace: mgcsnamespace,
Name: mgcsname,
}},
},
c: ConnectionDetails(cddata),
},
@ -306,7 +286,7 @@ func TestAPISecretPublisher(t *testing.T) {
client: &test.MockClient{
MockGet: func(_ context.Context, n types.NamespacedName, o runtime.Object) error {
s := &corev1.Secret{}
s.SetNamespace(corev1.NamespaceDefault)
s.SetNamespace(mgcsnamespace)
s.SetName(mgcsname)
s.SetOwnerReferences([]metav1.OwnerReference{{
Name: mgname,
@ -320,7 +300,7 @@ func TestAPISecretPublisher(t *testing.T) {
},
MockUpdate: test.NewMockUpdateFn(nil, func(got runtime.Object) error {
want := &corev1.Secret{}
want.SetNamespace(corev1.NamespaceDefault)
want.SetNamespace(mgcsnamespace)
want.SetName(mgcsname)
want.SetOwnerReferences([]metav1.OwnerReference{{
Name: mgname,
@ -344,8 +324,11 @@ func TestAPISecretPublisher(t *testing.T) {
args: args{
ctx: context.Background(),
mg: &MockManaged{
ObjectMeta: metav1.ObjectMeta{Name: mgname},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &corev1.ObjectReference{Name: mgcsname}},
ObjectMeta: metav1.ObjectMeta{Name: mgname},
MockConnectionSecretWriterTo: MockConnectionSecretWriterTo{Ref: &v1alpha1.SecretReference{
Namespace: mgcsnamespace,
Name: mgcsname,
}},
},
c: ConnectionDetails(cddata),
},

View File

@ -60,14 +60,9 @@ type ConnectionSecretOwner interface {
// written to 'default' namespace if the ConnectionSecretOwner does not specify
// a namespace.
func ConnectionSecretFor(o ConnectionSecretOwner, kind schema.GroupVersionKind) *corev1.Secret {
ns := o.GetWriteConnectionSecretToReference().Namespace
if ns == "" {
ns = corev1.NamespaceDefault
}
return &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Namespace: ns,
Namespace: o.GetWriteConnectionSecretToReference().Namespace,
Name: o.GetWriteConnectionSecretToReference().Name,
OwnerReferences: []metav1.OwnerReference{meta.AsController(meta.ReferenceTo(o, kind))},
},

View File

@ -45,14 +45,14 @@ var MockOwnerGVK = schema.GroupVersionKind{
type MockLocalOwner struct {
metav1.ObjectMeta
Ref corev1.LocalObjectReference
Ref *v1alpha1.LocalSecretReference
}
func (m *MockLocalOwner) GetWriteConnectionSecretToReference() corev1.LocalObjectReference {
func (m *MockLocalOwner) GetWriteConnectionSecretToReference() *v1alpha1.LocalSecretReference {
return m.Ref
}
func (m *MockLocalOwner) SetWriteConnectionSecretToReference(r corev1.LocalObjectReference) {
func (m *MockLocalOwner) SetWriteConnectionSecretToReference(r *v1alpha1.LocalSecretReference) {
m.Ref = r
}
@ -78,7 +78,7 @@ func TestLocalConnectionSecretFor(t *testing.T) {
Name: name,
UID: uid,
},
Ref: corev1.LocalObjectReference{Name: secretName},
Ref: &v1alpha1.LocalSecretReference{Name: secretName},
},
kind: MockOwnerGVK,
},
@ -110,14 +110,14 @@ func TestLocalConnectionSecretFor(t *testing.T) {
type MockOwner struct {
metav1.ObjectMeta
Ref *corev1.ObjectReference
Ref *v1alpha1.SecretReference
}
func (m *MockOwner) GetWriteConnectionSecretToReference() *corev1.ObjectReference {
func (m *MockOwner) GetWriteConnectionSecretToReference() *v1alpha1.SecretReference {
return m.Ref
}
func (m *MockOwner) SetWriteConnectionSecretToReference(r *corev1.ObjectReference) {
func (m *MockOwner) SetWriteConnectionSecretToReference(r *v1alpha1.SecretReference) {
m.Ref = r
}
@ -135,7 +135,7 @@ func TestConnectionSecretFor(t *testing.T) {
args args
want *corev1.Secret
}{
"SpecifiedNamespace": {
"Success": {
args: args{
o: &MockOwner{
ObjectMeta: metav1.ObjectMeta{
@ -143,7 +143,7 @@ func TestConnectionSecretFor(t *testing.T) {
Name: name,
UID: uid,
},
Ref: &corev1.ObjectReference{Namespace: namespace, Name: secretName},
Ref: &v1alpha1.SecretReference{Namespace: namespace, Name: secretName},
},
kind: MockOwnerGVK,
},
@ -162,33 +162,6 @@ func TestConnectionSecretFor(t *testing.T) {
Data: map[string][]byte{},
},
},
"DefaultNamespace": {
args: args{
o: &MockOwner{
ObjectMeta: metav1.ObjectMeta{
Namespace: namespace,
Name: name,
UID: uid,
},
Ref: &corev1.ObjectReference{Name: secretName},
},
kind: MockOwnerGVK,
},
want: &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Namespace: corev1.NamespaceDefault,
Name: secretName,
OwnerReferences: []metav1.OwnerReference{{
APIVersion: MockOwnerGVK.GroupVersion().String(),
Kind: MockOwnerGVK.Kind,
Name: name,
UID: uid,
Controller: &controller,
}},
},
Data: map[string][]byte{},
},
},
}
for name, tc := range cases {
t.Run(name, func(t *testing.T) {