2018-07-07 07:54:06 +00:00
|
|
|
package controller
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"testing"
|
|
|
|
|
|
2020-05-15 21:39:29 +00:00
|
|
|
"github.com/argoproj/gitops-engine/pkg/utils/kube"
|
2018-09-10 17:14:14 +00:00
|
|
|
"github.com/stretchr/testify/assert"
|
2019-03-04 08:56:36 +00:00
|
|
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
2018-09-10 17:14:14 +00:00
|
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
2019-01-04 18:16:41 +00:00
|
|
|
"k8s.io/apimachinery/pkg/runtime"
|
2018-11-21 19:58:08 +00:00
|
|
|
|
|
|
|
|
"github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1"
|
2019-07-13 00:17:23 +00:00
|
|
|
"github.com/argoproj/argo-cd/reposerver/apiclient"
|
2018-12-03 18:27:43 +00:00
|
|
|
"github.com/argoproj/argo-cd/test"
|
2018-07-07 07:54:06 +00:00
|
|
|
)
|
|
|
|
|
|
2019-01-04 18:16:41 +00:00
|
|
|
func TestPersistRevisionHistory(t *testing.T) {
|
|
|
|
|
app := newFakeApp()
|
2019-03-04 08:56:36 +00:00
|
|
|
app.Status.OperationState = nil
|
|
|
|
|
app.Status.History = nil
|
|
|
|
|
|
2019-01-04 18:16:41 +00:00
|
|
|
defaultProject := &v1alpha1.AppProject{
|
|
|
|
|
ObjectMeta: v1.ObjectMeta{
|
|
|
|
|
Namespace: test.FakeArgoCDNamespace,
|
|
|
|
|
Name: "default",
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
data := fakeData{
|
|
|
|
|
apps: []runtime.Object{app, defaultProject},
|
2019-07-13 00:17:23 +00:00
|
|
|
manifestResponse: &apiclient.ManifestResponse{
|
2019-01-04 18:16:41 +00:00
|
|
|
Manifests: []string{},
|
|
|
|
|
Namespace: test.FakeDestNamespace,
|
|
|
|
|
Server: test.FakeClusterURL,
|
|
|
|
|
Revision: "abc123",
|
|
|
|
|
},
|
|
|
|
|
managedLiveObjs: make(map[kube.ResourceKey]*unstructured.Unstructured),
|
|
|
|
|
}
|
|
|
|
|
ctrl := newFakeController(&data)
|
|
|
|
|
|
2019-03-04 08:56:36 +00:00
|
|
|
// Sync with source unspecified
|
|
|
|
|
opState := &v1alpha1.OperationState{Operation: v1alpha1.Operation{
|
2019-01-04 18:16:41 +00:00
|
|
|
Sync: &v1alpha1.SyncOperation{},
|
2019-03-04 08:56:36 +00:00
|
|
|
}}
|
|
|
|
|
ctrl.appStateManager.SyncAppState(app, opState)
|
|
|
|
|
// Ensure we record spec.source into sync result
|
|
|
|
|
assert.Equal(t, app.Spec.Source, opState.SyncResult.Source)
|
2019-01-04 18:16:41 +00:00
|
|
|
|
|
|
|
|
updatedApp, err := ctrl.applicationClientset.ArgoprojV1alpha1().Applications(app.Namespace).Get(app.Name, v1.GetOptions{})
|
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
assert.Equal(t, 1, len(updatedApp.Status.History))
|
2019-03-04 08:56:36 +00:00
|
|
|
assert.Equal(t, app.Spec.Source, updatedApp.Status.History[0].Source)
|
2019-01-04 18:16:41 +00:00
|
|
|
assert.Equal(t, "abc123", updatedApp.Status.History[0].Revision)
|
2019-03-04 08:56:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestPersistRevisionHistoryRollback(t *testing.T) {
|
|
|
|
|
app := newFakeApp()
|
|
|
|
|
app.Status.OperationState = nil
|
|
|
|
|
app.Status.History = nil
|
|
|
|
|
defaultProject := &v1alpha1.AppProject{
|
|
|
|
|
ObjectMeta: v1.ObjectMeta{
|
|
|
|
|
Namespace: test.FakeArgoCDNamespace,
|
|
|
|
|
Name: "default",
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
data := fakeData{
|
|
|
|
|
apps: []runtime.Object{app, defaultProject},
|
2019-07-13 00:17:23 +00:00
|
|
|
manifestResponse: &apiclient.ManifestResponse{
|
2019-03-04 08:56:36 +00:00
|
|
|
Manifests: []string{},
|
|
|
|
|
Namespace: test.FakeDestNamespace,
|
|
|
|
|
Server: test.FakeClusterURL,
|
|
|
|
|
Revision: "abc123",
|
|
|
|
|
},
|
|
|
|
|
managedLiveObjs: make(map[kube.ResourceKey]*unstructured.Unstructured),
|
|
|
|
|
}
|
|
|
|
|
ctrl := newFakeController(&data)
|
2019-01-04 18:16:41 +00:00
|
|
|
|
2019-03-04 08:56:36 +00:00
|
|
|
// Sync with source specified
|
|
|
|
|
source := v1alpha1.ApplicationSource{
|
|
|
|
|
Helm: &v1alpha1.ApplicationSourceHelm{
|
|
|
|
|
Parameters: []v1alpha1.HelmParameter{
|
|
|
|
|
{
|
|
|
|
|
Name: "test",
|
|
|
|
|
Value: "123",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
opState := &v1alpha1.OperationState{Operation: v1alpha1.Operation{
|
2019-01-04 18:16:41 +00:00
|
|
|
Sync: &v1alpha1.SyncOperation{
|
2019-03-04 08:56:36 +00:00
|
|
|
Source: &source,
|
2019-01-04 18:16:41 +00:00
|
|
|
},
|
2019-03-04 08:56:36 +00:00
|
|
|
}}
|
|
|
|
|
ctrl.appStateManager.SyncAppState(app, opState)
|
|
|
|
|
// Ensure we record opState's source into sync result
|
|
|
|
|
assert.Equal(t, source, opState.SyncResult.Source)
|
2019-01-04 18:16:41 +00:00
|
|
|
|
2019-03-04 08:56:36 +00:00
|
|
|
updatedApp, err := ctrl.applicationClientset.ArgoprojV1alpha1().Applications(app.Namespace).Get(app.Name, v1.GetOptions{})
|
2019-01-04 18:16:41 +00:00
|
|
|
assert.Nil(t, err)
|
|
|
|
|
assert.Equal(t, 1, len(updatedApp.Status.History))
|
2019-03-04 08:56:36 +00:00
|
|
|
assert.Equal(t, source, updatedApp.Status.History[0].Source)
|
2019-01-04 18:16:41 +00:00
|
|
|
assert.Equal(t, "abc123", updatedApp.Status.History[0].Revision)
|
|
|
|
|
}
|