approvals integration
parent
1fc0d32771
commit
fd6c1b96a2
|
@ -53,10 +53,10 @@ func (p *Provider) isApproved(event *types.Event, plan *UpdatePlan) (bool, error
|
|||
return true, nil
|
||||
}
|
||||
|
||||
deadline := types.KeelApprovalTimeoutDefault
|
||||
deadline := types.KeelApprovalDeadlineDefault
|
||||
|
||||
// deadline
|
||||
deadlineStr, ok := labels[types.KeelApprovalTimeoutLabel]
|
||||
deadlineStr, ok := labels[types.KeelApprovalDeadlineLabel]
|
||||
if ok {
|
||||
d, err := strconv.Atoi(deadlineStr)
|
||||
if err == nil {
|
||||
|
@ -81,7 +81,7 @@ func (p *Provider) isApproved(event *types.Event, plan *UpdatePlan) (bool, error
|
|||
VotesRequired: minApprovals,
|
||||
VotesReceived: 0,
|
||||
Rejected: false,
|
||||
Deadline: time.Duration(deadline) * time.Minute,
|
||||
Deadline: time.Now().Add(time.Duration(deadline) * time.Hour),
|
||||
}
|
||||
|
||||
approval.Message = fmt.Sprintf("New image is available for deployment %s/%s (%s).",
|
||||
|
|
|
@ -2,6 +2,7 @@ package kubernetes
|
|||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/rusenask/keel/types"
|
||||
|
||||
|
@ -76,3 +77,77 @@ func TestCheckRequestedApproval(t *testing.T) {
|
|||
t.Errorf("wrong provider: %s", approval.Provider)
|
||||
}
|
||||
}
|
||||
|
||||
func TestApprovedCheck(t *testing.T) {
|
||||
fp := &fakeImplementer{}
|
||||
fp.namespaces = &v1.NamespaceList{
|
||||
Items: []v1.Namespace{
|
||||
v1.Namespace{
|
||||
meta_v1.TypeMeta{},
|
||||
meta_v1.ObjectMeta{Name: "xxxx"},
|
||||
v1.NamespaceSpec{},
|
||||
v1.NamespaceStatus{},
|
||||
},
|
||||
},
|
||||
}
|
||||
fp.deploymentList = &v1beta1.DeploymentList{
|
||||
Items: []v1beta1.Deployment{
|
||||
v1beta1.Deployment{
|
||||
meta_v1.TypeMeta{},
|
||||
meta_v1.ObjectMeta{
|
||||
Name: "dep-1",
|
||||
Namespace: "xxxx",
|
||||
Labels: map[string]string{types.KeelPolicyLabel: "all", types.KeelMinimumApprovalsLabel: "1"},
|
||||
},
|
||||
v1beta1.DeploymentSpec{
|
||||
Template: v1.PodTemplateSpec{
|
||||
Spec: v1.PodSpec{
|
||||
Containers: []v1.Container{
|
||||
v1.Container{
|
||||
Image: "gcr.io/v2-namespace/hello-world:1.1.1",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
v1beta1.DeploymentStatus{},
|
||||
},
|
||||
},
|
||||
}
|
||||
approver := approver()
|
||||
provider, err := NewProvider(fp, &fakeSender{}, approver)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to get provider: %s", err)
|
||||
}
|
||||
|
||||
// approving event
|
||||
err = provider.approvalManager.Create(&types.Approval{
|
||||
Identifier: "xxxx/dep-1:1.1.2",
|
||||
VotesReceived: 2,
|
||||
VotesRequired: 2,
|
||||
Deadline: time.Now().Add(10 * time.Second),
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create approval: %s", err)
|
||||
}
|
||||
|
||||
appr, _ := provider.approvalManager.Get("xxxx/dep-1:1.1.2")
|
||||
if appr.Status() != types.ApprovalStatusApproved {
|
||||
t.Fatalf("approval not approved")
|
||||
}
|
||||
|
||||
// creating "new version" event
|
||||
repo := types.Repository{
|
||||
Name: "gcr.io/v2-namespace/hello-world",
|
||||
Tag: "1.1.2",
|
||||
}
|
||||
|
||||
deps, err := provider.processEvent(&types.Event{Repository: repo})
|
||||
if err != nil {
|
||||
t.Errorf("failed to get deployments: %s", err)
|
||||
}
|
||||
|
||||
if len(deps) != 1 {
|
||||
t.Errorf("expected to find 1 updated deployment but found %d", len(deps))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,7 +92,7 @@ func (s *fakeSender) Send(event types.EventNotification) error {
|
|||
func approver() *approvals.DefaultManager {
|
||||
cache := memory.NewMemoryCache(10*time.Minute, 10*time.Minute, 10*time.Minute)
|
||||
|
||||
return approvals.New(cache, codecs.DefaultSerializer(), &fakeProvider{})
|
||||
return approvals.New(cache, codecs.DefaultSerializer())
|
||||
}
|
||||
|
||||
func TestGetNamespaces(t *testing.T) {
|
||||
|
|
Loading…
Reference in New Issue