This repository has been archived by the owner on Jun 19, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 74
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Promote CloudBuildSource to v1 API (#1657)
* Promote CloudBuildSource to v1 API * fix format
- Loading branch information
Showing
27 changed files
with
2,604 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
/* | ||
Copyright 2020 Google LLC. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
package v1 | ||
|
||
import ( | ||
"context" | ||
|
||
"knative.dev/pkg/apis" | ||
|
||
"github.com/google/knative-gcp/pkg/apis/duck" | ||
metadataClient "github.com/google/knative-gcp/pkg/gclient/metadata" | ||
) | ||
|
||
func (bs *CloudBuildSource) SetDefaults(ctx context.Context) { | ||
ctx = apis.WithinParent(ctx, bs.ObjectMeta) | ||
bs.Spec.SetDefaults(ctx) | ||
duck.SetClusterNameAnnotation(&bs.ObjectMeta, metadataClient.NewDefaultMetadataClient()) | ||
duck.SetAutoscalingAnnotationsDefaults(ctx, &bs.ObjectMeta) | ||
} | ||
|
||
func (bss *CloudBuildSourceSpec) SetDefaults(ctx context.Context) { | ||
bss.SetPubSubDefaults(ctx) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
/* | ||
Copyright 2020 Google LLC. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
package v1 | ||
|
||
import ( | ||
"testing" | ||
|
||
"github.com/google/go-cmp/cmp" | ||
gcpauthtesthelper "github.com/google/knative-gcp/pkg/apis/configs/gcpauth/testhelper" | ||
"github.com/google/knative-gcp/pkg/apis/duck" | ||
duckv1 "github.com/google/knative-gcp/pkg/apis/duck/v1" | ||
testingMetadataClient "github.com/google/knative-gcp/pkg/gclient/metadata/testing" | ||
|
||
corev1 "k8s.io/api/core/v1" | ||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||
) | ||
|
||
func TestBuildSourceDefaults(t *testing.T) { | ||
tests := []struct { | ||
name string | ||
start *CloudBuildSource | ||
want *CloudBuildSource | ||
}{{ | ||
name: "defaults present", | ||
start: &CloudBuildSource{ | ||
ObjectMeta: metav1.ObjectMeta{ | ||
Annotations: map[string]string{ | ||
duck.ClusterNameAnnotation: testingMetadataClient.FakeClusterName, | ||
}, | ||
}, | ||
Spec: CloudBuildSourceSpec{ | ||
PubSubSpec: duckv1.PubSubSpec{ | ||
Secret: &corev1.SecretKeySelector{ | ||
LocalObjectReference: corev1.LocalObjectReference{ | ||
Name: "my-cloud-key", | ||
}, | ||
Key: "test.json", | ||
}, | ||
}, | ||
}, | ||
}, | ||
want: &CloudBuildSource{ | ||
ObjectMeta: metav1.ObjectMeta{ | ||
Annotations: map[string]string{ | ||
duck.ClusterNameAnnotation: testingMetadataClient.FakeClusterName, | ||
}, | ||
}, | ||
Spec: CloudBuildSourceSpec{ | ||
PubSubSpec: duckv1.PubSubSpec{ | ||
Secret: &corev1.SecretKeySelector{ | ||
LocalObjectReference: corev1.LocalObjectReference{ | ||
Name: "my-cloud-key", | ||
}, | ||
Key: "test.json", | ||
}, | ||
}, | ||
}, | ||
}, | ||
}, { | ||
// Due to the limitation mentioned in https://github.com/google/knative-gcp/issues/1037, specifying the cluster name annotation. | ||
name: "missing defaults, except cluster name annotations", | ||
start: &CloudBuildSource{ | ||
ObjectMeta: metav1.ObjectMeta{ | ||
Annotations: map[string]string{ | ||
duck.ClusterNameAnnotation: testingMetadataClient.FakeClusterName, | ||
}, | ||
}, | ||
Spec: CloudBuildSourceSpec{}, | ||
}, | ||
want: &CloudBuildSource{ | ||
ObjectMeta: metav1.ObjectMeta{ | ||
Annotations: map[string]string{ | ||
duck.ClusterNameAnnotation: testingMetadataClient.FakeClusterName, | ||
}, | ||
}, | ||
Spec: CloudBuildSourceSpec{ | ||
PubSubSpec: duckv1.PubSubSpec{ | ||
Secret: &gcpauthtesthelper.Secret, | ||
}, | ||
}, | ||
}, | ||
}} | ||
|
||
for _, test := range tests { | ||
t.Run(test.name, func(t *testing.T) { | ||
got := test.start | ||
got.SetDefaults(gcpauthtesthelper.ContextWithDefaults()) | ||
|
||
if diff := cmp.Diff(test.want, got); diff != "" { | ||
t.Errorf("failed to get expected (-want, +got) = %v", diff) | ||
} | ||
}) | ||
} | ||
} | ||
|
||
func TestCloudBuildSourceDefaults_NoChange(t *testing.T) { | ||
want := &CloudBuildSource{ | ||
ObjectMeta: metav1.ObjectMeta{ | ||
Annotations: map[string]string{ | ||
duck.ClusterNameAnnotation: testingMetadataClient.FakeClusterName, | ||
}, | ||
}, | ||
Spec: CloudBuildSourceSpec{ | ||
PubSubSpec: duckv1.PubSubSpec{ | ||
Secret: &corev1.SecretKeySelector{ | ||
LocalObjectReference: corev1.LocalObjectReference{ | ||
Name: "my-cloud-key", | ||
}, | ||
Key: "test.json", | ||
}, | ||
}, | ||
}, | ||
} | ||
|
||
got := want.DeepCopy() | ||
got.SetDefaults(gcpauthtesthelper.ContextWithDefaults()) | ||
if diff := cmp.Diff(want, got); diff != "" { | ||
t.Errorf("failed to get expected (-want, +got) = %v", diff) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
/* | ||
Copyright 2020 Google LLC. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
package v1 | ||
|
||
import ( | ||
"knative.dev/pkg/apis" | ||
) | ||
|
||
// GetCondition returns the condition currently associated with the given type, or nil. | ||
func (bs *CloudBuildSourceStatus) GetCondition(t apis.ConditionType) *apis.Condition { | ||
return buildCondSet.Manage(bs).GetCondition(t) | ||
} | ||
|
||
// GetTopLevelCondition returns the top level condition. | ||
func (bs *CloudBuildSourceStatus) GetTopLevelCondition() *apis.Condition { | ||
return buildCondSet.Manage(bs).GetTopLevelCondition() | ||
} | ||
|
||
// IsReady returns true if the resource is ready overall. | ||
func (bs *CloudBuildSourceStatus) IsReady() bool { | ||
return buildCondSet.Manage(bs).IsHappy() | ||
} | ||
|
||
// InitializeConditions sets relevant unset conditions to Unknown state. | ||
func (bs *CloudBuildSourceStatus) InitializeConditions() { | ||
buildCondSet.Manage(bs).InitializeConditions() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
/* | ||
Copyright 2020 Google LLC. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
package v1 | ||
|
||
import ( | ||
"testing" | ||
|
||
duckv1 "github.com/google/knative-gcp/pkg/apis/duck/v1" | ||
|
||
"github.com/google/go-cmp/cmp" | ||
"github.com/google/go-cmp/cmp/cmpopts" | ||
corev1 "k8s.io/api/core/v1" | ||
"knative.dev/pkg/apis" | ||
) | ||
|
||
func TestCloudBuildSourceStatusIsReady(t *testing.T) { | ||
tests := []struct { | ||
name string | ||
s *CloudBuildSourceStatus | ||
wantConditionStatus corev1.ConditionStatus | ||
want bool | ||
}{ | ||
{ | ||
name: "uninitialized", | ||
s: &CloudBuildSourceStatus{}, | ||
want: false, | ||
}, { | ||
name: "initialized", | ||
s: func() *CloudBuildSourceStatus { | ||
s := &CloudBuildSource{} | ||
s.Status.InitializeConditions() | ||
return &s.Status | ||
}(), | ||
wantConditionStatus: corev1.ConditionUnknown, | ||
want: false, | ||
}, | ||
{ | ||
name: "the status of pullsubscription is false", | ||
s: func() *CloudBuildSourceStatus { | ||
s := &CloudBuildSource{} | ||
s.Status.InitializeConditions() | ||
s.Status.MarkPullSubscriptionFailed(s.ConditionSet(), "PullSubscriptionFalse", "status false test message") | ||
return &s.Status | ||
}(), | ||
wantConditionStatus: corev1.ConditionFalse, | ||
}, { | ||
name: "the status of pullsubscription is unknown", | ||
s: func() *CloudBuildSourceStatus { | ||
s := &CloudBuildSource{} | ||
s.Status.InitializeConditions() | ||
s.Status.MarkPullSubscriptionUnknown(s.ConditionSet(), "PullSubscriptionUnknown", "status unknown test message") | ||
return &s.Status | ||
}(), | ||
wantConditionStatus: corev1.ConditionUnknown, | ||
}, | ||
{ | ||
name: "ready", | ||
s: func() *CloudBuildSourceStatus { | ||
s := &CloudBuildSource{} | ||
s.Status.InitializeConditions() | ||
s.Status.MarkPullSubscriptionReady(s.ConditionSet()) | ||
return &s.Status | ||
}(), | ||
wantConditionStatus: corev1.ConditionTrue, | ||
want: true, | ||
}} | ||
for _, test := range tests { | ||
t.Run(test.name, func(t *testing.T) { | ||
if test.wantConditionStatus != "" { | ||
gotConditionStatus := test.s.GetTopLevelCondition().Status | ||
if gotConditionStatus != test.wantConditionStatus { | ||
t.Errorf("unexpected condition status: want %v, got %v", test.wantConditionStatus, gotConditionStatus) | ||
} | ||
} | ||
got := test.s.IsReady() | ||
if got != test.want { | ||
t.Errorf("unexpected readiness: want %v, got %v", test.want, got) | ||
} | ||
}) | ||
} | ||
} | ||
func TestCloudBuildSourceStatusGetCondition(t *testing.T) { | ||
tests := []struct { | ||
name string | ||
s *CloudBuildSourceStatus | ||
condQuery apis.ConditionType | ||
want *apis.Condition | ||
}{{ | ||
name: "uninitialized", | ||
s: &CloudBuildSourceStatus{}, | ||
condQuery: CloudBuildSourceConditionReady, | ||
want: nil, | ||
}, { | ||
name: "initialized", | ||
s: func() *CloudBuildSourceStatus { | ||
s := &CloudBuildSourceStatus{} | ||
s.InitializeConditions() | ||
return s | ||
}(), | ||
condQuery: CloudBuildSourceConditionReady, | ||
want: &apis.Condition{ | ||
Type: CloudBuildSourceConditionReady, | ||
Status: corev1.ConditionUnknown, | ||
}, | ||
}, { | ||
name: "not ready", | ||
|
||
s: func() *CloudBuildSourceStatus { | ||
s := &CloudBuildSource{} | ||
s.Status.InitializeConditions() | ||
s.Status.MarkPullSubscriptionFailed(s.ConditionSet(), "NotReady", "test message") | ||
return &s.Status | ||
}(), | ||
condQuery: duckv1.PullSubscriptionReady, | ||
want: &apis.Condition{ | ||
Type: duckv1.PullSubscriptionReady, | ||
Status: corev1.ConditionFalse, | ||
Reason: "NotReady", | ||
Message: "test message", | ||
}, | ||
}, { | ||
name: "ready", | ||
s: func() *CloudBuildSourceStatus { | ||
s := &CloudBuildSource{} | ||
s.Status.InitializeConditions() | ||
s.Status.MarkPullSubscriptionReady(s.ConditionSet()) | ||
return &s.Status | ||
}(), | ||
condQuery: duckv1.PullSubscriptionReady, | ||
want: &apis.Condition{ | ||
Type: duckv1.PullSubscriptionReady, | ||
Status: corev1.ConditionTrue, | ||
}, | ||
}} | ||
for _, test := range tests { | ||
t.Run(test.name, func(t *testing.T) { | ||
got := test.s.GetCondition(test.condQuery) | ||
ignoreTime := cmpopts.IgnoreFields(apis.Condition{}, | ||
"LastTransitionTime", "Severity") | ||
if diff := cmp.Diff(test.want, got, ignoreTime); diff != "" { | ||
t.Errorf("unexpected condition (-want, +got) = %v", diff) | ||
} | ||
}) | ||
} | ||
} |
Oops, something went wrong.