diff --git a/.mockery.yaml b/.mockery.yaml index 1f482bd8d0..5bca30b2ab 100644 --- a/.mockery.yaml +++ b/.mockery.yaml @@ -1,11 +1,5 @@ dir: '{{.InterfaceDir}}/mocks' -structname: '{{.InterfaceName}}' filename: '{{.InterfaceName}}.go' -pkgname: mocks - -template-data: - unroll-variadic: true - packages: github.com/argoproj/argo-cd/v3/applicationset/generators: interfaces: @@ -14,11 +8,10 @@ packages: interfaces: Repos: {} github.com/argoproj/argo-cd/v3/applicationset/services/scm_provider: - config: - dir: applicationset/services/scm_provider/aws_codecommit/mocks interfaces: AWSCodeCommitClient: {} AWSTaggingClient: {} + AzureDevOpsClientFactory: {} github.com/argoproj/argo-cd/v3/applicationset/utils: interfaces: Renderer: {} @@ -47,8 +40,8 @@ packages: AppProjectInterface: {} github.com/argoproj/argo-cd/v3/reposerver/apiclient: interfaces: - RepoServerService_GenerateManifestWithFilesClient: {} RepoServerServiceClient: {} + RepoServerService_GenerateManifestWithFilesClient: {} github.com/argoproj/argo-cd/v3/server/application: interfaces: Broadcaster: {} @@ -63,26 +56,37 @@ packages: github.com/argoproj/argo-cd/v3/util/db: interfaces: ArgoDB: {} + RepoCredsDB: {} github.com/argoproj/argo-cd/v3/util/git: interfaces: Client: {} github.com/argoproj/argo-cd/v3/util/helm: interfaces: Client: {} - github.com/argoproj/argo-cd/v3/util/oci: - interfaces: - Client: {} github.com/argoproj/argo-cd/v3/util/io: interfaces: TempPaths: {} github.com/argoproj/argo-cd/v3/util/notification/argocd: interfaces: Service: {} + github.com/argoproj/argo-cd/v3/util/oci: + interfaces: + Client: {} github.com/argoproj/argo-cd/v3/util/workloadidentity: interfaces: TokenProvider: {} + github.com/argoproj/gitops-engine/pkg/cache: + interfaces: + ClusterCache: {} + github.com/argoproj/gitops-engine/pkg/diff: + interfaces: + ServerSideDryRunner: {} github.com/microsoft/azure-devops-go-api/azuredevops/v7/git: config: dir: applicationset/services/scm_provider/azure_devops/git/mocks interfaces: Client: {} +pkgname: mocks +structname: '{{.InterfaceName}}' +template-data: + unroll-variadic: true diff --git a/applicationset/controllers/applicationset_controller_test.go b/applicationset/controllers/applicationset_controller_test.go index 025e9288f4..b46985a753 100644 --- a/applicationset/controllers/applicationset_controller_test.go +++ b/applicationset/controllers/applicationset_controller_test.go @@ -1832,16 +1832,16 @@ func TestGetMinRequeueAfter(t *testing.T) { Clusters: &v1alpha1.ClusterGenerator{}, } - generatorMock0 := mocks.Generator{} - generatorMock0.On("GetRequeueAfter", &generator). + generatorMock0 := &mocks.Generator{} + generatorMock0.EXPECT().GetRequeueAfter(&generator). Return(generators.NoRequeueAfter) - generatorMock1 := mocks.Generator{} - generatorMock1.On("GetRequeueAfter", &generator). + generatorMock1 := &mocks.Generator{} + generatorMock1.EXPECT().GetRequeueAfter(&generator). Return(time.Duration(1) * time.Second) - generatorMock10 := mocks.Generator{} - generatorMock10.On("GetRequeueAfter", &generator). + generatorMock10 := &mocks.Generator{} + generatorMock10.EXPECT().GetRequeueAfter(&generator). Return(time.Duration(10) * time.Second) r := ApplicationSetReconciler{ @@ -1850,9 +1850,9 @@ func TestGetMinRequeueAfter(t *testing.T) { Recorder: record.NewFakeRecorder(0), Metrics: metrics, Generators: map[string]generators.Generator{ - "List": &generatorMock10, - "Git": &generatorMock1, - "Clusters": &generatorMock1, + "List": generatorMock10, + "Git": generatorMock1, + "Clusters": generatorMock1, }, } @@ -1889,10 +1889,10 @@ func TestRequeueGeneratorFails(t *testing.T) { PullRequest: &v1alpha1.PullRequestGenerator{}, } - generatorMock := mocks.Generator{} - generatorMock.On("GetTemplate", &generator). + generatorMock := &mocks.Generator{} + generatorMock.EXPECT().GetTemplate(&generator). Return(&v1alpha1.ApplicationSetTemplate{}) - generatorMock.On("GenerateParams", &generator, mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything). + generatorMock.EXPECT().GenerateParams(&generator, mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything). Return([]map[string]any{}, errors.New("Simulated error generating params that could be related to an external service/API call")) metrics := appsetmetrics.NewFakeAppsetMetrics() @@ -1902,7 +1902,7 @@ func TestRequeueGeneratorFails(t *testing.T) { Scheme: scheme, Recorder: record.NewFakeRecorder(0), Generators: map[string]generators.Generator{ - "PullRequest": &generatorMock, + "PullRequest": generatorMock, }, Metrics: metrics, } diff --git a/applicationset/controllers/template/template_test.go b/applicationset/controllers/template/template_test.go index e3e7ffaa8e..1d93a8ee07 100644 --- a/applicationset/controllers/template/template_test.go +++ b/applicationset/controllers/template/template_test.go @@ -86,28 +86,28 @@ func TestGenerateApplications(t *testing.T) { } t.Run(cc.name, func(t *testing.T) { - generatorMock := genmock.Generator{} + generatorMock := &genmock.Generator{} generator := v1alpha1.ApplicationSetGenerator{ List: &v1alpha1.ListGenerator{}, } - generatorMock.On("GenerateParams", &generator, mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything). + generatorMock.EXPECT().GenerateParams(&generator, mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything). Return(cc.params, cc.generateParamsError) - generatorMock.On("GetTemplate", &generator). + generatorMock.EXPECT().GetTemplate(&generator). Return(&v1alpha1.ApplicationSetTemplate{}) - rendererMock := rendmock.Renderer{} + rendererMock := &rendmock.Renderer{} var expectedApps []v1alpha1.Application if cc.generateParamsError == nil { for _, p := range cc.params { if cc.rendererError != nil { - rendererMock.On("RenderTemplateParams", GetTempApplication(cc.template), mock.AnythingOfType("*v1alpha1.ApplicationSetSyncPolicy"), p, false, []string(nil)). + rendererMock.EXPECT().RenderTemplateParams(GetTempApplication(cc.template), mock.AnythingOfType("*v1alpha1.ApplicationSetSyncPolicy"), p, false, []string(nil)). Return(nil, cc.rendererError) } else { - rendererMock.On("RenderTemplateParams", GetTempApplication(cc.template), mock.AnythingOfType("*v1alpha1.ApplicationSetSyncPolicy"), p, false, []string(nil)). + rendererMock.EXPECT().RenderTemplateParams(GetTempApplication(cc.template), mock.AnythingOfType("*v1alpha1.ApplicationSetSyncPolicy"), p, false, []string(nil)). Return(&app, nil) expectedApps = append(expectedApps, app) } @@ -115,9 +115,9 @@ func TestGenerateApplications(t *testing.T) { } generators := map[string]generators.Generator{ - "List": &generatorMock, + "List": generatorMock, } - renderer := &rendererMock + renderer := rendererMock got, reason, err := GenerateApplications(log.NewEntry(log.StandardLogger()), v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ @@ -200,26 +200,26 @@ func TestMergeTemplateApplications(t *testing.T) { cc := c t.Run(cc.name, func(t *testing.T) { - generatorMock := genmock.Generator{} + generatorMock := &genmock.Generator{} generator := v1alpha1.ApplicationSetGenerator{ List: &v1alpha1.ListGenerator{}, } - generatorMock.On("GenerateParams", &generator, mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything). + generatorMock.EXPECT().GenerateParams(&generator, mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything). Return(cc.params, nil) - generatorMock.On("GetTemplate", &generator). + generatorMock.EXPECT().GetTemplate(&generator). Return(&cc.overrideTemplate) - rendererMock := rendmock.Renderer{} + rendererMock := &rendmock.Renderer{} - rendererMock.On("RenderTemplateParams", GetTempApplication(cc.expectedMerged), mock.AnythingOfType("*v1alpha1.ApplicationSetSyncPolicy"), cc.params[0], false, []string(nil)). + rendererMock.EXPECT().RenderTemplateParams(GetTempApplication(cc.expectedMerged), mock.AnythingOfType("*v1alpha1.ApplicationSetSyncPolicy"), cc.params[0], false, []string(nil)). Return(&cc.expectedApps[0], nil) generators := map[string]generators.Generator{ - "List": &generatorMock, + "List": generatorMock, } - renderer := &rendererMock + renderer := rendererMock got, _, _ := GenerateApplications(log.NewEntry(log.StandardLogger()), v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ @@ -312,19 +312,19 @@ func TestGenerateAppsUsingPullRequestGenerator(t *testing.T) { }, } { t.Run(cases.name, func(t *testing.T) { - generatorMock := genmock.Generator{} + generatorMock := &genmock.Generator{} generator := v1alpha1.ApplicationSetGenerator{ PullRequest: &v1alpha1.PullRequestGenerator{}, } - generatorMock.On("GenerateParams", &generator, mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything). + generatorMock.EXPECT().GenerateParams(&generator, mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything). Return(cases.params, nil) - generatorMock.On("GetTemplate", &generator). - Return(&cases.template, nil) + generatorMock.EXPECT().GetTemplate(&generator). + Return(&cases.template) generators := map[string]generators.Generator{ - "PullRequest": &generatorMock, + "PullRequest": generatorMock, } renderer := &utils.Render{} diff --git a/applicationset/generators/generator_spec_processor_test.go b/applicationset/generators/generator_spec_processor_test.go index 4f4be79fae..2c8947dca5 100644 --- a/applicationset/generators/generator_spec_processor_test.go +++ b/applicationset/generators/generator_spec_processor_test.go @@ -346,9 +346,9 @@ func getMockClusterGenerator() Generator { } func getMockGitGenerator() Generator { - argoCDServiceMock := mocks.Repos{} - argoCDServiceMock.On("GetDirectories", mock.Anything, mock.Anything, mock.Anything).Return([]string{"app1", "app2", "app_3", "p1/app4"}, nil) - gitGenerator := NewGitGenerator(&argoCDServiceMock, "namespace") + argoCDServiceMock := &mocks.Repos{} + argoCDServiceMock.EXPECT().GetDirectories(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]string{"app1", "app2", "app_3", "p1/app4"}, nil) + gitGenerator := NewGitGenerator(argoCDServiceMock, "namespace") return gitGenerator } diff --git a/applicationset/generators/git_test.go b/applicationset/generators/git_test.go index cddddf8ce1..98198cdaf0 100644 --- a/applicationset/generators/git_test.go +++ b/applicationset/generators/git_test.go @@ -320,11 +320,11 @@ func TestGitGenerateParamsFromDirectories(t *testing.T) { t.Run(testCaseCopy.name, func(t *testing.T) { t.Parallel() - argoCDServiceMock := mocks.Repos{} + argoCDServiceMock := mocks.NewRepos(t) - argoCDServiceMock.On("GetDirectories", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(testCaseCopy.repoApps, testCaseCopy.repoError) + argoCDServiceMock.EXPECT().GetDirectories(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(testCaseCopy.repoApps, testCaseCopy.repoError) - gitGenerator := NewGitGenerator(&argoCDServiceMock, "") + gitGenerator := NewGitGenerator(argoCDServiceMock, "") applicationSetInfo := v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -357,8 +357,6 @@ func TestGitGenerateParamsFromDirectories(t *testing.T) { require.NoError(t, err) assert.Equal(t, testCaseCopy.expected, got) } - - argoCDServiceMock.AssertExpectations(t) }) } } @@ -623,11 +621,11 @@ func TestGitGenerateParamsFromDirectoriesGoTemplate(t *testing.T) { t.Run(testCaseCopy.name, func(t *testing.T) { t.Parallel() - argoCDServiceMock := mocks.Repos{} + argoCDServiceMock := mocks.NewRepos(t) - argoCDServiceMock.On("GetDirectories", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(testCaseCopy.repoApps, testCaseCopy.repoError) + argoCDServiceMock.EXPECT().GetDirectories(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(testCaseCopy.repoApps, testCaseCopy.repoError) - gitGenerator := NewGitGenerator(&argoCDServiceMock, "") + gitGenerator := NewGitGenerator(argoCDServiceMock, "") applicationSetInfo := v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -660,8 +658,6 @@ func TestGitGenerateParamsFromDirectoriesGoTemplate(t *testing.T) { require.NoError(t, err) assert.Equal(t, testCaseCopy.expected, got) } - - argoCDServiceMock.AssertExpectations(t) }) } } @@ -1000,11 +996,11 @@ cluster: t.Run(testCaseCopy.name, func(t *testing.T) { t.Parallel() - argoCDServiceMock := mocks.Repos{} - argoCDServiceMock.On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + argoCDServiceMock := mocks.NewRepos(t) + argoCDServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). Return(testCaseCopy.repoFileContents, testCaseCopy.repoPathsError) - gitGenerator := NewGitGenerator(&argoCDServiceMock, "") + gitGenerator := NewGitGenerator(argoCDServiceMock, "") applicationSetInfo := v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -1036,8 +1032,6 @@ cluster: require.NoError(t, err) assert.ElementsMatch(t, testCaseCopy.expected, got) } - - argoCDServiceMock.AssertExpectations(t) }) } } @@ -1331,7 +1325,7 @@ env: testing t.Run(testCaseCopy.name, func(t *testing.T) { t.Parallel() - argoCDServiceMock := mocks.Repos{} + argoCDServiceMock := mocks.NewRepos(t) // IMPORTANT: we try to get the files from the repo server that matches the patterns // If we find those files also satisfy the exclude pattern, we remove them from map @@ -1339,18 +1333,16 @@ env: testing // With the below mock setup, we make sure that if the GetFiles() function gets called // for a include or exclude pattern, it should always return the includeFiles or excludeFiles. for _, pattern := range testCaseCopy.excludePattern { - argoCDServiceMock. - On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). + argoCDServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). Return(testCaseCopy.excludeFiles, testCaseCopy.repoPathsError) } for _, pattern := range testCaseCopy.includePattern { - argoCDServiceMock. - On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). + argoCDServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). Return(testCaseCopy.includeFiles, testCaseCopy.repoPathsError) } - gitGenerator := NewGitGenerator(&argoCDServiceMock, "") + gitGenerator := NewGitGenerator(argoCDServiceMock, "") applicationSetInfo := v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -1382,8 +1374,6 @@ env: testing require.NoError(t, err) assert.ElementsMatch(t, testCaseCopy.expected, got) } - - argoCDServiceMock.AssertExpectations(t) }) } } @@ -1672,7 +1662,7 @@ env: testing t.Run(testCaseCopy.name, func(t *testing.T) { t.Parallel() - argoCDServiceMock := mocks.Repos{} + argoCDServiceMock := mocks.NewRepos(t) // IMPORTANT: we try to get the files from the repo server that matches the patterns // If we find those files also satisfy the exclude pattern, we remove them from map @@ -1680,18 +1670,16 @@ env: testing // With the below mock setup, we make sure that if the GetFiles() function gets called // for a include or exclude pattern, it should always return the includeFiles or excludeFiles. for _, pattern := range testCaseCopy.excludePattern { - argoCDServiceMock. - On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). + argoCDServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). Return(testCaseCopy.excludeFiles, testCaseCopy.repoPathsError) } for _, pattern := range testCaseCopy.includePattern { - argoCDServiceMock. - On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). + argoCDServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). Return(testCaseCopy.includeFiles, testCaseCopy.repoPathsError) } - gitGenerator := NewGitGenerator(&argoCDServiceMock, "") + gitGenerator := NewGitGenerator(argoCDServiceMock, "") applicationSetInfo := v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -1723,8 +1711,6 @@ env: testing require.NoError(t, err) assert.ElementsMatch(t, testCaseCopy.expected, got) } - - argoCDServiceMock.AssertExpectations(t) }) } } @@ -1908,25 +1894,23 @@ func TestGitGeneratorParamsFromFilesWithExcludeOptionGoTemplate(t *testing.T) { t.Run(testCaseCopy.name, func(t *testing.T) { t.Parallel() - argoCDServiceMock := mocks.Repos{} + argoCDServiceMock := mocks.NewRepos(t) // IMPORTANT: we try to get the files from the repo server that matches the patterns // If we find those files also satisfy the exclude pattern, we remove them from map // This is generally done by the g.repos.GetFiles() function. // With the below mock setup, we make sure that if the GetFiles() function gets called // for a include or exclude pattern, it should always return the includeFiles or excludeFiles. for _, pattern := range testCaseCopy.excludePattern { - argoCDServiceMock. - On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). + argoCDServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). Return(testCaseCopy.excludeFiles, testCaseCopy.repoPathsError) } for _, pattern := range testCaseCopy.includePattern { - argoCDServiceMock. - On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). + argoCDServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, pattern, mock.Anything, mock.Anything). Return(testCaseCopy.includeFiles, testCaseCopy.repoPathsError) } - gitGenerator := NewGitGenerator(&argoCDServiceMock, "") + gitGenerator := NewGitGenerator(argoCDServiceMock, "") applicationSetInfo := v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -1958,8 +1942,6 @@ func TestGitGeneratorParamsFromFilesWithExcludeOptionGoTemplate(t *testing.T) { require.NoError(t, err) assert.ElementsMatch(t, testCaseCopy.expected, got) } - - argoCDServiceMock.AssertExpectations(t) }) } } @@ -2279,11 +2261,11 @@ cluster: t.Run(testCaseCopy.name, func(t *testing.T) { t.Parallel() - argoCDServiceMock := mocks.Repos{} - argoCDServiceMock.On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + argoCDServiceMock := mocks.NewRepos(t) + argoCDServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). Return(testCaseCopy.repoFileContents, testCaseCopy.repoPathsError) - gitGenerator := NewGitGenerator(&argoCDServiceMock, "") + gitGenerator := NewGitGenerator(argoCDServiceMock, "") applicationSetInfo := v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -2315,8 +2297,6 @@ cluster: require.NoError(t, err) assert.ElementsMatch(t, testCaseCopy.expected, got) } - - argoCDServiceMock.AssertExpectations(t) }) } } @@ -2482,7 +2462,7 @@ func TestGitGenerator_GenerateParams(t *testing.T) { }, } for _, testCase := range cases { - argoCDServiceMock := mocks.Repos{} + argoCDServiceMock := mocks.NewRepos(t) if testCase.callGetDirectories { var project any @@ -2492,9 +2472,9 @@ func TestGitGenerator_GenerateParams(t *testing.T) { project = mock.Anything } - argoCDServiceMock.On("GetDirectories", mock.Anything, mock.Anything, mock.Anything, project, mock.Anything, mock.Anything).Return(testCase.repoApps, testCase.repoPathsError) + argoCDServiceMock.EXPECT().GetDirectories(mock.Anything, mock.Anything, mock.Anything, project, mock.Anything, mock.Anything).Return(testCase.repoApps, testCase.repoPathsError) } - gitGenerator := NewGitGenerator(&argoCDServiceMock, "argocd") + gitGenerator := NewGitGenerator(argoCDServiceMock, "argocd") scheme := runtime.NewScheme() err := v1alpha1.AddToScheme(scheme) @@ -2510,7 +2490,5 @@ func TestGitGenerator_GenerateParams(t *testing.T) { require.NoError(t, err) assert.Equal(t, testCase.expected, got) } - - argoCDServiceMock.AssertExpectations(t) } } diff --git a/applicationset/generators/matrix_test.go b/applicationset/generators/matrix_test.go index 00b6353a50..c58c10960f 100644 --- a/applicationset/generators/matrix_test.go +++ b/applicationset/generators/matrix_test.go @@ -12,12 +12,12 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" - "github.com/argoproj/argo-cd/v3/applicationset/services/mocks" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + generatorsMock "github.com/argoproj/argo-cd/v3/applicationset/generators/mocks" + servicesMocks "github.com/argoproj/argo-cd/v3/applicationset/services/mocks" "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" ) @@ -136,7 +136,7 @@ func TestMatrixGenerate(t *testing.T) { testCaseCopy := testCase // Since tests may run in parallel t.Run(testCaseCopy.name, func(t *testing.T) { - genMock := &generatorMock{} + genMock := &generatorsMock.Generator{} appSet := &v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -149,7 +149,7 @@ func TestMatrixGenerate(t *testing.T) { Git: g.Git, List: g.List, } - genMock.On("GenerateParams", mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet, mock.Anything).Return([]map[string]any{ + genMock.EXPECT().GenerateParams(mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet, mock.Anything).Return([]map[string]any{ { "path": "app1", "path.basename": "app1", @@ -162,7 +162,7 @@ func TestMatrixGenerate(t *testing.T) { }, }, nil) - genMock.On("GetTemplate", &gitGeneratorSpec). + genMock.EXPECT().GetTemplate(&gitGeneratorSpec). Return(&v1alpha1.ApplicationSetTemplate{}) } @@ -343,7 +343,7 @@ func TestMatrixGenerateGoTemplate(t *testing.T) { testCaseCopy := testCase // Since tests may run in parallel t.Run(testCaseCopy.name, func(t *testing.T) { - genMock := &generatorMock{} + genMock := &generatorsMock.Generator{} appSet := &v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -358,7 +358,7 @@ func TestMatrixGenerateGoTemplate(t *testing.T) { Git: g.Git, List: g.List, } - genMock.On("GenerateParams", mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet, mock.Anything).Return([]map[string]any{ + genMock.EXPECT().GenerateParams(mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet, mock.Anything).Return([]map[string]any{ { "path": map[string]string{ "path": "app1", @@ -375,7 +375,7 @@ func TestMatrixGenerateGoTemplate(t *testing.T) { }, }, nil) - genMock.On("GetTemplate", &gitGeneratorSpec). + genMock.EXPECT().GetTemplate(&gitGeneratorSpec). Return(&v1alpha1.ApplicationSetTemplate{}) } @@ -507,7 +507,7 @@ func TestMatrixGetRequeueAfter(t *testing.T) { testCaseCopy := testCase // Since tests may run in parallel t.Run(testCaseCopy.name, func(t *testing.T) { - mock := &generatorMock{} + mock := &generatorsMock.Generator{} for _, g := range testCaseCopy.baseGenerators { gitGeneratorSpec := v1alpha1.ApplicationSetGenerator{ @@ -517,7 +517,7 @@ func TestMatrixGetRequeueAfter(t *testing.T) { SCMProvider: g.SCMProvider, ClusterDecisionResource: g.ClusterDecisionResource, } - mock.On("GetRequeueAfter", &gitGeneratorSpec).Return(testCaseCopy.gitGetRequeueAfter, nil) + mock.EXPECT().GetRequeueAfter(&gitGeneratorSpec).Return(testCaseCopy.gitGetRequeueAfter) } matrixGenerator := NewMatrixGenerator( @@ -634,7 +634,7 @@ func TestInterpolatedMatrixGenerate(t *testing.T) { testCaseCopy := testCase // Since tests may run in parallel t.Run(testCaseCopy.name, func(t *testing.T) { - genMock := &generatorMock{} + genMock := &generatorsMock.Generator{} appSet := &v1alpha1.ApplicationSet{} appClientset := kubefake.NewSimpleClientset(runtimeClusters...) @@ -650,7 +650,7 @@ func TestInterpolatedMatrixGenerate(t *testing.T) { Git: g.Git, Clusters: g.Clusters, } - genMock.On("GenerateParams", mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet).Return([]map[string]any{ + genMock.EXPECT().GenerateParams(mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet, mock.Anything).Return([]map[string]any{ { "path": "examples/git-generator-files-discovery/cluster-config/dev/config.json", "path.basename": "dev", @@ -662,7 +662,7 @@ func TestInterpolatedMatrixGenerate(t *testing.T) { "path.basenameNormalized": "prod", }, }, nil) - genMock.On("GetTemplate", &gitGeneratorSpec). + genMock.EXPECT().GetTemplate(&gitGeneratorSpec). Return(&v1alpha1.ApplicationSetTemplate{}) } matrixGenerator := NewMatrixGenerator( @@ -813,7 +813,7 @@ func TestInterpolatedMatrixGenerateGoTemplate(t *testing.T) { testCaseCopy := testCase // Since tests may run in parallel t.Run(testCaseCopy.name, func(t *testing.T) { - genMock := &generatorMock{} + genMock := &generatorsMock.Generator{} appSet := &v1alpha1.ApplicationSet{ Spec: v1alpha1.ApplicationSetSpec{ GoTemplate: true, @@ -833,7 +833,7 @@ func TestInterpolatedMatrixGenerateGoTemplate(t *testing.T) { Git: g.Git, Clusters: g.Clusters, } - genMock.On("GenerateParams", mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet).Return([]map[string]any{ + genMock.EXPECT().GenerateParams(mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet, mock.Anything).Return([]map[string]any{ { "path": map[string]string{ "path": "examples/git-generator-files-discovery/cluster-config/dev/config.json", @@ -849,7 +849,7 @@ func TestInterpolatedMatrixGenerateGoTemplate(t *testing.T) { }, }, }, nil) - genMock.On("GetTemplate", &gitGeneratorSpec). + genMock.EXPECT().GetTemplate(&gitGeneratorSpec). Return(&v1alpha1.ApplicationSetTemplate{}) } matrixGenerator := NewMatrixGenerator( @@ -969,7 +969,7 @@ func TestMatrixGenerateListElementsYaml(t *testing.T) { testCaseCopy := testCase // Since tests may run in parallel t.Run(testCaseCopy.name, func(t *testing.T) { - genMock := &generatorMock{} + genMock := &generatorsMock.Generator{} appSet := &v1alpha1.ApplicationSet{ ObjectMeta: metav1.ObjectMeta{ Name: "set", @@ -984,7 +984,7 @@ func TestMatrixGenerateListElementsYaml(t *testing.T) { Git: g.Git, List: g.List, } - genMock.On("GenerateParams", mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet).Return([]map[string]any{{ + genMock.EXPECT().GenerateParams(mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), appSet, mock.Anything).Return([]map[string]any{{ "foo": map[string]any{ "bar": []any{ map[string]any{ @@ -1009,7 +1009,7 @@ func TestMatrixGenerateListElementsYaml(t *testing.T) { }, }, }}, nil) - genMock.On("GetTemplate", &gitGeneratorSpec). + genMock.EXPECT().GetTemplate(&gitGeneratorSpec). Return(&v1alpha1.ApplicationSetTemplate{}) } @@ -1037,28 +1037,6 @@ func TestMatrixGenerateListElementsYaml(t *testing.T) { } } -type generatorMock struct { - mock.Mock -} - -func (g *generatorMock) GetTemplate(appSetGenerator *v1alpha1.ApplicationSetGenerator) *v1alpha1.ApplicationSetTemplate { - args := g.Called(appSetGenerator) - - return args.Get(0).(*v1alpha1.ApplicationSetTemplate) -} - -func (g *generatorMock) GenerateParams(appSetGenerator *v1alpha1.ApplicationSetGenerator, appSet *v1alpha1.ApplicationSet, _ client.Client) ([]map[string]any, error) { - args := g.Called(appSetGenerator, appSet) - - return args.Get(0).([]map[string]any), args.Error(1) -} - -func (g *generatorMock) GetRequeueAfter(appSetGenerator *v1alpha1.ApplicationSetGenerator) time.Duration { - args := g.Called(appSetGenerator) - - return args.Get(0).(time.Duration) -} - func TestGitGenerator_GenerateParams_list_x_git_matrix_generator(t *testing.T) { // Given a matrix generator over a list generator and a git files generator, the nested git files generator should // be treated as a files generator, and it should produce parameters. @@ -1072,11 +1050,11 @@ func TestGitGenerator_GenerateParams_list_x_git_matrix_generator(t *testing.T) { // Now instead of checking for nil, we check whether the field is a non-empty slice. This test prevents a regression // of that bug. - listGeneratorMock := &generatorMock{} - listGeneratorMock.On("GenerateParams", mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything).Return([]map[string]any{ + listGeneratorMock := &generatorsMock.Generator{} + listGeneratorMock.EXPECT().GenerateParams(mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator"), mock.AnythingOfType("*v1alpha1.ApplicationSet"), mock.Anything).Return([]map[string]any{ {"some": "value"}, }, nil) - listGeneratorMock.On("GetTemplate", mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator")).Return(&v1alpha1.ApplicationSetTemplate{}) + listGeneratorMock.EXPECT().GetTemplate(mock.AnythingOfType("*v1alpha1.ApplicationSetGenerator")).Return(&v1alpha1.ApplicationSetTemplate{}) gitGeneratorSpec := &v1alpha1.GitGenerator{ RepoURL: "https://git.example.com", @@ -1085,10 +1063,10 @@ func TestGitGenerator_GenerateParams_list_x_git_matrix_generator(t *testing.T) { }, } - repoServiceMock := &mocks.Repos{} - repoServiceMock.On("GetFiles", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(map[string][]byte{ + repoServiceMock := &servicesMocks.Repos{} + repoServiceMock.EXPECT().GetFiles(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(map[string][]byte{ "some/path.json": []byte("test: content"), - }, nil) + }, nil).Maybe() gitGenerator := NewGitGenerator(repoServiceMock, "") matrixGenerator := NewMatrixGenerator(map[string]Generator{ diff --git a/applicationset/services/pull_request/azure_devops_test.go b/applicationset/services/pull_request/azure_devops_test.go index 1cf2bfd299..c5c74dd495 100644 --- a/applicationset/services/pull_request/azure_devops_test.go +++ b/applicationset/services/pull_request/azure_devops_test.go @@ -1,7 +1,6 @@ package pull_request import ( - "context" "errors" "testing" @@ -13,6 +12,7 @@ import ( "github.com/stretchr/testify/require" azureMock "github.com/argoproj/argo-cd/v3/applicationset/services/scm_provider/azure_devops/git/mocks" + "github.com/argoproj/argo-cd/v3/applicationset/services/scm_provider/mocks" ) func createBoolPtr(x bool) *bool { @@ -35,29 +35,6 @@ func createUniqueNamePtr(x string) *string { return &x } -type AzureClientFactoryMock struct { - mock *mock.Mock -} - -func (m *AzureClientFactoryMock) GetClient(ctx context.Context) (git.Client, error) { - args := m.mock.Called(ctx) - - var client git.Client - c := args.Get(0) - if c != nil { - client = c.(git.Client) - } - - var err error - if len(args) > 1 { - if e, ok := args.Get(1).(error); ok { - err = e - } - } - - return client, err -} - func TestListPullRequest(t *testing.T) { teamProject := "myorg_project" repoName := "myorg_project_repo" @@ -91,10 +68,10 @@ func TestListPullRequest(t *testing.T) { SearchCriteria: &git.GitPullRequestSearchCriteria{}, } - gitClientMock := azureMock.Client{} - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock, nil) - gitClientMock.On("GetPullRequestsByProject", ctx, args).Return(&pullRequestMock, nil) + gitClientMock := &azureMock.Client{} + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, nil) + gitClientMock.EXPECT().GetPullRequestsByProject(mock.Anything, args).Return(&pullRequestMock, nil) provider := AzureDevOpsService{ clientFactory: clientFactoryMock, @@ -245,12 +222,12 @@ func TestAzureDevOpsListReturnsRepositoryNotFoundError(t *testing.T) { pullRequestMock := []git.GitPullRequest{} - gitClientMock := azureMock.Client{} - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock, nil) + gitClientMock := &azureMock.Client{} + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, nil) // Mock the GetPullRequestsByProject to return an error containing "404" - gitClientMock.On("GetPullRequestsByProject", t.Context(), args).Return(&pullRequestMock, + gitClientMock.EXPECT().GetPullRequestsByProject(mock.Anything, args).Return(&pullRequestMock, errors.New("The following project does not exist:")) provider := AzureDevOpsService{ diff --git a/applicationset/services/scm_provider/aws_codecommit_test.go b/applicationset/services/scm_provider/aws_codecommit_test.go index fc5b7fa5d1..4188bd2d77 100644 --- a/applicationset/services/scm_provider/aws_codecommit_test.go +++ b/applicationset/services/scm_provider/aws_codecommit_test.go @@ -12,7 +12,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" - "github.com/argoproj/argo-cd/v3/applicationset/services/scm_provider/aws_codecommit/mocks" + "github.com/argoproj/argo-cd/v3/applicationset/services/scm_provider/mocks" "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" ) @@ -177,9 +177,8 @@ func TestAWSCodeCommitListRepos(t *testing.T) { if repo.getRepositoryNilMetadata { repoMetadata = nil } - codeCommitClient. - On("GetRepositoryWithContext", ctx, &codecommit.GetRepositoryInput{RepositoryName: aws.String(repo.name)}). - Return(&codecommit.GetRepositoryOutput{RepositoryMetadata: repoMetadata}, repo.getRepositoryError) + codeCommitClient.EXPECT().GetRepositoryWithContext(mock.Anything, &codecommit.GetRepositoryInput{RepositoryName: aws.String(repo.name)}). + Return(&codecommit.GetRepositoryOutput{RepositoryMetadata: repoMetadata}, repo.getRepositoryError).Maybe() codecommitRepoNameIdPairs = append(codecommitRepoNameIdPairs, &codecommit.RepositoryNameIdPair{ RepositoryId: aws.String(repo.id), RepositoryName: aws.String(repo.name), @@ -193,20 +192,18 @@ func TestAWSCodeCommitListRepos(t *testing.T) { } if testCase.expectListAtCodeCommit { - codeCommitClient. - On("ListRepositoriesWithContext", ctx, &codecommit.ListRepositoriesInput{}). + codeCommitClient.EXPECT().ListRepositoriesWithContext(mock.Anything, &codecommit.ListRepositoriesInput{}). Return(&codecommit.ListRepositoriesOutput{ Repositories: codecommitRepoNameIdPairs, - }, testCase.listRepositoryError) + }, testCase.listRepositoryError).Maybe() } else { - taggingClient. - On("GetResourcesWithContext", ctx, mock.MatchedBy(equalIgnoringTagFilterOrder(&resourcegroupstaggingapi.GetResourcesInput{ - TagFilters: testCase.expectTagFilters, - ResourceTypeFilters: aws.StringSlice([]string{resourceTypeCodeCommitRepository}), - }))). + taggingClient.EXPECT().GetResourcesWithContext(mock.Anything, mock.MatchedBy(equalIgnoringTagFilterOrder(&resourcegroupstaggingapi.GetResourcesInput{ + TagFilters: testCase.expectTagFilters, + ResourceTypeFilters: aws.StringSlice([]string{resourceTypeCodeCommitRepository}), + }))). Return(&resourcegroupstaggingapi.GetResourcesOutput{ ResourceTagMappingList: resourceTaggings, - }, testCase.listRepositoryError) + }, testCase.listRepositoryError).Maybe() } provider := &AWSCodeCommitProvider{ @@ -350,13 +347,12 @@ func TestAWSCodeCommitRepoHasPath(t *testing.T) { taggingClient := mocks.NewAWSTaggingClient(t) ctx := t.Context() if testCase.expectedGetFolderPath != "" { - codeCommitClient. - On("GetFolderWithContext", ctx, &codecommit.GetFolderInput{ - CommitSpecifier: aws.String(branch), - FolderPath: aws.String(testCase.expectedGetFolderPath), - RepositoryName: aws.String(repoName), - }). - Return(testCase.getFolderOutput, testCase.getFolderError) + codeCommitClient.EXPECT().GetFolderWithContext(mock.Anything, &codecommit.GetFolderInput{ + CommitSpecifier: aws.String(branch), + FolderPath: aws.String(testCase.expectedGetFolderPath), + RepositoryName: aws.String(repoName), + }). + Return(testCase.getFolderOutput, testCase.getFolderError).Maybe() } provider := &AWSCodeCommitProvider{ codeCommitClient: codeCommitClient, @@ -423,18 +419,16 @@ func TestAWSCodeCommitGetBranches(t *testing.T) { taggingClient := mocks.NewAWSTaggingClient(t) ctx := t.Context() if testCase.allBranches { - codeCommitClient. - On("ListBranchesWithContext", ctx, &codecommit.ListBranchesInput{ - RepositoryName: aws.String(name), - }). - Return(&codecommit.ListBranchesOutput{Branches: aws.StringSlice(testCase.branches)}, testCase.apiError) + codeCommitClient.EXPECT().ListBranchesWithContext(mock.Anything, &codecommit.ListBranchesInput{ + RepositoryName: aws.String(name), + }). + Return(&codecommit.ListBranchesOutput{Branches: aws.StringSlice(testCase.branches)}, testCase.apiError).Maybe() } else { - codeCommitClient. - On("GetRepositoryWithContext", ctx, &codecommit.GetRepositoryInput{RepositoryName: aws.String(name)}). + codeCommitClient.EXPECT().GetRepositoryWithContext(mock.Anything, &codecommit.GetRepositoryInput{RepositoryName: aws.String(name)}). Return(&codecommit.GetRepositoryOutput{RepositoryMetadata: &codecommit.RepositoryMetadata{ AccountId: aws.String(organization), DefaultBranch: aws.String(defaultBranch), - }}, testCase.apiError) + }}, testCase.apiError).Maybe() } provider := &AWSCodeCommitProvider{ codeCommitClient: codeCommitClient, diff --git a/applicationset/services/scm_provider/azure_devops_test.go b/applicationset/services/scm_provider/azure_devops_test.go index 0b8b914efa..5b528c9d25 100644 --- a/applicationset/services/scm_provider/azure_devops_test.go +++ b/applicationset/services/scm_provider/azure_devops_test.go @@ -1,7 +1,6 @@ package scm_provider import ( - "context" "errors" "fmt" "testing" @@ -16,6 +15,7 @@ import ( azureGit "github.com/microsoft/azure-devops-go-api/azuredevops/v7/git" azureMock "github.com/argoproj/argo-cd/v3/applicationset/services/scm_provider/azure_devops/git/mocks" + "github.com/argoproj/argo-cd/v3/applicationset/services/scm_provider/mocks" ) func s(input string) *string { @@ -78,13 +78,13 @@ func TestAzureDevopsRepoHasPath(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - gitClientMock := azureMock.Client{} + gitClientMock := &azureMock.Client{} - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock, testCase.clientError) + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, testCase.clientError) repoId := &uuid - gitClientMock.On("GetItem", ctx, azureGit.GetItemArgs{Project: &teamProject, Path: &path, VersionDescriptor: &azureGit.GitVersionDescriptor{Version: &branchName}, RepositoryId: repoId}).Return(nil, testCase.azureDevopsError) + gitClientMock.EXPECT().GetItem(mock.Anything, azureGit.GetItemArgs{Project: &teamProject, Path: &path, VersionDescriptor: &azureGit.GitVersionDescriptor{Version: &branchName}, RepositoryId: repoId}).Return(nil, testCase.azureDevopsError) provider := AzureDevOpsProvider{organization: organization, teamProject: teamProject, clientFactory: clientFactoryMock} @@ -143,12 +143,12 @@ func TestGetDefaultBranchOnDisabledRepo(t *testing.T) { t.Run(testCase.name, func(t *testing.T) { uuid := uuid.New().String() - gitClientMock := azureMock.Client{} + gitClientMock := azureMock.NewClient(t) - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock, nil) + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, nil) - gitClientMock.On("GetBranch", ctx, azureGit.GetBranchArgs{RepositoryId: &repoName, Project: &teamProject, Name: &defaultBranch}).Return(nil, testCase.azureDevOpsError) + gitClientMock.EXPECT().GetBranch(mock.Anything, azureGit.GetBranchArgs{RepositoryId: &repoName, Project: &teamProject, Name: &defaultBranch}).Return(nil, testCase.azureDevOpsError) repo := &Repository{Organization: organization, Repository: repoName, RepositoryId: uuid, Branch: defaultBranch} @@ -162,8 +162,6 @@ func TestGetDefaultBranchOnDisabledRepo(t *testing.T) { } assert.Empty(t, branches) - - gitClientMock.AssertExpectations(t) }) } } @@ -202,12 +200,12 @@ func TestGetAllBranchesOnDisabledRepo(t *testing.T) { t.Run(testCase.name, func(t *testing.T) { uuid := uuid.New().String() - gitClientMock := azureMock.Client{} + gitClientMock := azureMock.NewClient(t) - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock, nil) + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, nil) - gitClientMock.On("GetBranches", ctx, azureGit.GetBranchesArgs{RepositoryId: &repoName, Project: &teamProject}).Return(nil, testCase.azureDevOpsError) + gitClientMock.EXPECT().GetBranches(mock.Anything, azureGit.GetBranchesArgs{RepositoryId: &repoName, Project: &teamProject}).Return(nil, testCase.azureDevOpsError) repo := &Repository{Organization: organization, Repository: repoName, RepositoryId: uuid, Branch: defaultBranch} @@ -221,8 +219,6 @@ func TestGetAllBranchesOnDisabledRepo(t *testing.T) { } assert.Empty(t, branches) - - gitClientMock.AssertExpectations(t) }) } } @@ -241,12 +237,12 @@ func TestAzureDevOpsGetDefaultBranchStripsRefsName(t *testing.T) { branchReturn := &azureGit.GitBranchStats{Name: &strippedBranchName, Commit: &azureGit.GitCommitRef{CommitId: s("abc123233223")}} repo := &Repository{Organization: organization, Repository: repoName, RepositoryId: uuid, Branch: defaultBranch} - gitClientMock := azureMock.Client{} + gitClientMock := &azureMock.Client{} - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock, nil) + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, nil) - gitClientMock.On("GetBranch", ctx, azureGit.GetBranchArgs{RepositoryId: &repoName, Project: &teamProject, Name: &strippedBranchName}).Return(branchReturn, nil) + gitClientMock.EXPECT().GetBranch(mock.Anything, azureGit.GetBranchArgs{RepositoryId: &repoName, Project: &teamProject, Name: &strippedBranchName}).Return(branchReturn, nil).Maybe() provider := AzureDevOpsProvider{organization: organization, teamProject: teamProject, clientFactory: clientFactoryMock, allBranches: false} branches, err := provider.GetBranches(ctx, repo) @@ -295,12 +291,12 @@ func TestAzureDevOpsGetBranchesDefultBranchOnly(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - gitClientMock := azureMock.Client{} + gitClientMock := &azureMock.Client{} - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock, testCase.clientError) + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, testCase.clientError) - gitClientMock.On("GetBranch", ctx, azureGit.GetBranchArgs{RepositoryId: &repoName, Project: &teamProject, Name: &defaultBranch}).Return(testCase.expectedBranch, testCase.getBranchesAPIError) + gitClientMock.EXPECT().GetBranch(mock.Anything, azureGit.GetBranchArgs{RepositoryId: &repoName, Project: &teamProject, Name: &defaultBranch}).Return(testCase.expectedBranch, testCase.getBranchesAPIError) repo := &Repository{Organization: organization, Repository: repoName, RepositoryId: uuid, Branch: defaultBranch} @@ -379,12 +375,12 @@ func TestAzureDevopsGetBranches(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - gitClientMock := azureMock.Client{} + gitClientMock := &azureMock.Client{} - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock, testCase.clientError) + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, testCase.clientError) - gitClientMock.On("GetBranches", ctx, azureGit.GetBranchesArgs{RepositoryId: &repoName, Project: &teamProject}).Return(testCase.expectedBranches, testCase.getBranchesAPIError) + gitClientMock.EXPECT().GetBranches(mock.Anything, azureGit.GetBranchesArgs{RepositoryId: &repoName, Project: &teamProject}).Return(testCase.expectedBranches, testCase.getBranchesAPIError) repo := &Repository{Organization: organization, Repository: repoName, RepositoryId: uuid} @@ -427,7 +423,6 @@ func TestGetAzureDevopsRepositories(t *testing.T) { teamProject := "myorg_project" uuid := uuid.New() - ctx := t.Context() repoId := &uuid @@ -477,15 +472,15 @@ func TestGetAzureDevopsRepositories(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { - gitClientMock := azureMock.Client{} - gitClientMock.On("GetRepositories", ctx, azureGit.GetRepositoriesArgs{Project: s(teamProject)}).Return(&testCase.repositories, testCase.getRepositoriesError) + gitClientMock := azureMock.NewClient(t) + gitClientMock.EXPECT().GetRepositories(mock.Anything, azureGit.GetRepositoriesArgs{Project: s(teamProject)}).Return(&testCase.repositories, testCase.getRepositoriesError) - clientFactoryMock := &AzureClientFactoryMock{mock: &mock.Mock{}} - clientFactoryMock.mock.On("GetClient", mock.Anything).Return(&gitClientMock) + clientFactoryMock := &mocks.AzureDevOpsClientFactory{} + clientFactoryMock.EXPECT().GetClient(mock.Anything).Return(gitClientMock, nil) provider := AzureDevOpsProvider{organization: organization, teamProject: teamProject, clientFactory: clientFactoryMock} - repositories, err := provider.ListRepos(ctx, "https") + repositories, err := provider.ListRepos(t.Context(), "https") if testCase.getRepositoriesError != nil { require.Error(t, err, "Expected an error from test case %v", testCase.name) @@ -497,31 +492,6 @@ func TestGetAzureDevopsRepositories(t *testing.T) { assert.NotEmpty(t, repositories) assert.Len(t, repositories, testCase.expectedNumberOfRepos) } - - gitClientMock.AssertExpectations(t) }) } } - -type AzureClientFactoryMock struct { - mock *mock.Mock -} - -func (m *AzureClientFactoryMock) GetClient(ctx context.Context) (azureGit.Client, error) { - args := m.mock.Called(ctx) - - var client azureGit.Client - c := args.Get(0) - if c != nil { - client = c.(azureGit.Client) - } - - var err error - if len(args) > 1 { - if e, ok := args.Get(1).(error); ok { - err = e - } - } - - return client, err -} diff --git a/applicationset/services/scm_provider/aws_codecommit/mocks/AWSCodeCommitClient.go b/applicationset/services/scm_provider/mocks/AWSCodeCommitClient.go similarity index 100% rename from applicationset/services/scm_provider/aws_codecommit/mocks/AWSCodeCommitClient.go rename to applicationset/services/scm_provider/mocks/AWSCodeCommitClient.go diff --git a/applicationset/services/scm_provider/aws_codecommit/mocks/AWSTaggingClient.go b/applicationset/services/scm_provider/mocks/AWSTaggingClient.go similarity index 100% rename from applicationset/services/scm_provider/aws_codecommit/mocks/AWSTaggingClient.go rename to applicationset/services/scm_provider/mocks/AWSTaggingClient.go diff --git a/applicationset/services/scm_provider/mocks/AzureDevOpsClientFactory.go b/applicationset/services/scm_provider/mocks/AzureDevOpsClientFactory.go new file mode 100644 index 0000000000..4b5e673821 --- /dev/null +++ b/applicationset/services/scm_provider/mocks/AzureDevOpsClientFactory.go @@ -0,0 +1,101 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package mocks + +import ( + "context" + + "github.com/microsoft/azure-devops-go-api/azuredevops/v7/git" + mock "github.com/stretchr/testify/mock" +) + +// NewAzureDevOpsClientFactory creates a new instance of AzureDevOpsClientFactory. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewAzureDevOpsClientFactory(t interface { + mock.TestingT + Cleanup(func()) +}) *AzureDevOpsClientFactory { + mock := &AzureDevOpsClientFactory{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// AzureDevOpsClientFactory is an autogenerated mock type for the AzureDevOpsClientFactory type +type AzureDevOpsClientFactory struct { + mock.Mock +} + +type AzureDevOpsClientFactory_Expecter struct { + mock *mock.Mock +} + +func (_m *AzureDevOpsClientFactory) EXPECT() *AzureDevOpsClientFactory_Expecter { + return &AzureDevOpsClientFactory_Expecter{mock: &_m.Mock} +} + +// GetClient provides a mock function for the type AzureDevOpsClientFactory +func (_mock *AzureDevOpsClientFactory) GetClient(ctx context.Context) (git.Client, error) { + ret := _mock.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for GetClient") + } + + var r0 git.Client + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context) (git.Client, error)); ok { + return returnFunc(ctx) + } + if returnFunc, ok := ret.Get(0).(func(context.Context) git.Client); ok { + r0 = returnFunc(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(git.Client) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = returnFunc(ctx) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// AzureDevOpsClientFactory_GetClient_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetClient' +type AzureDevOpsClientFactory_GetClient_Call struct { + *mock.Call +} + +// GetClient is a helper method to define mock.On call +// - ctx context.Context +func (_e *AzureDevOpsClientFactory_Expecter) GetClient(ctx interface{}) *AzureDevOpsClientFactory_GetClient_Call { + return &AzureDevOpsClientFactory_GetClient_Call{Call: _e.mock.On("GetClient", ctx)} +} + +func (_c *AzureDevOpsClientFactory_GetClient_Call) Run(run func(ctx context.Context)) *AzureDevOpsClientFactory_GetClient_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *AzureDevOpsClientFactory_GetClient_Call) Return(client git.Client, err error) *AzureDevOpsClientFactory_GetClient_Call { + _c.Call.Return(client, err) + return _c +} + +func (_c *AzureDevOpsClientFactory_GetClient_Call) RunAndReturn(run func(ctx context.Context) (git.Client, error)) *AzureDevOpsClientFactory_GetClient_Call { + _c.Call.Return(run) + return _c +} diff --git a/cmd/argocd/commands/admin/app_test.go b/cmd/argocd/commands/admin/app_test.go index 604c4faf7b..274bbe1148 100644 --- a/cmd/argocd/commands/admin/app_test.go +++ b/cmd/argocd/commands/admin/app_test.go @@ -105,26 +105,26 @@ func TestGetReconcileResults_Refresh(t *testing.T) { appClientset := appfake.NewSimpleClientset(app, proj) deployment := test.NewDeployment() kubeClientset := kubefake.NewClientset(deployment, argoCM, argoCDSecret) - clusterCache := clustermocks.ClusterCache{} - clusterCache.On("IsNamespaced", mock.Anything).Return(true, nil) - clusterCache.On("GetGVKParser", mock.Anything).Return(nil) - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("GenerateManifest", mock.Anything, mock.Anything).Return(&argocdclient.ManifestResponse{ + clusterCache := &clustermocks.ClusterCache{} + clusterCache.EXPECT().IsNamespaced(mock.Anything).Return(true, nil) + clusterCache.EXPECT().GetGVKParser().Return(nil) + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().GenerateManifest(mock.Anything, mock.Anything).Return(&argocdclient.ManifestResponse{ Manifests: []string{test.DeploymentManifest}, }, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} - liveStateCache := cachemocks.LiveStateCache{} - liveStateCache.On("GetManagedLiveObjs", mock.Anything, mock.Anything, mock.Anything).Return(map[kube.ResourceKey]*unstructured.Unstructured{ + repoServerClientset := &mocks.Clientset{RepoServerServiceClient: repoServerClient} + liveStateCache := &cachemocks.LiveStateCache{} + liveStateCache.EXPECT().GetManagedLiveObjs(mock.Anything, mock.Anything, mock.Anything).Return(map[kube.ResourceKey]*unstructured.Unstructured{ kube.GetResourceKey(deployment): deployment, }, nil) - liveStateCache.On("GetVersionsInfo", mock.Anything).Return("v1.2.3", nil, nil) - liveStateCache.On("Init").Return(nil, nil) - liveStateCache.On("GetClusterCache", mock.Anything).Return(&clusterCache, nil) - liveStateCache.On("IsNamespaced", mock.Anything, mock.Anything).Return(true, nil) + liveStateCache.EXPECT().GetVersionsInfo(mock.Anything).Return("v1.2.3", nil, nil) + liveStateCache.EXPECT().Init().Return(nil) + liveStateCache.EXPECT().GetClusterCache(mock.Anything).Return(clusterCache, nil) + liveStateCache.EXPECT().IsNamespaced(mock.Anything, mock.Anything).Return(true, nil) - result, err := reconcileApplications(ctx, kubeClientset, appClientset, "default", &repoServerClientset, "", + result, err := reconcileApplications(ctx, kubeClientset, appClientset, "default", repoServerClientset, "", func(_ db.ArgoDB, _ cache.SharedIndexInformer, _ *settings.SettingsManager, _ *metrics.MetricsServer) statecache.LiveStateCache { - return &liveStateCache + return liveStateCache }, false, normalizers.IgnoreNormalizerOpts{}, diff --git a/commitserver/commit/commit_test.go b/commitserver/commit/commit_test.go index 4acd6c03b0..21ace44ed2 100644 --- a/commitserver/commit/commit_test.go +++ b/commitserver/commit/commit_test.go @@ -82,7 +82,7 @@ func Test_CommitHydratedManifests(t *testing.T) { t.Parallel() service, mockRepoClientFactory := newServiceWithMocks(t) - mockRepoClientFactory.On("NewClient", mock.Anything, mock.Anything).Return(nil, assert.AnError).Once() + mockRepoClientFactory.EXPECT().NewClient(mock.Anything, mock.Anything).Return(nil, assert.AnError).Once() _, err := service.CommitHydratedManifests(t.Context(), validRequest) require.Error(t, err) @@ -94,14 +94,14 @@ func Test_CommitHydratedManifests(t *testing.T) { service, mockRepoClientFactory := newServiceWithMocks(t) mockGitClient := gitmocks.NewClient(t) - mockGitClient.On("Init").Return(nil).Once() - mockGitClient.On("Fetch", mock.Anything).Return(nil).Once() - mockGitClient.On("SetAuthor", "Argo CD", "argo-cd@example.com").Return("", nil).Once() - mockGitClient.On("CheckoutOrOrphan", "env/test", false).Return("", nil).Once() - mockGitClient.On("CheckoutOrNew", "main", "env/test", false).Return("", nil).Once() - mockGitClient.On("CommitAndPush", "main", "test commit message").Return("", nil).Once() - mockGitClient.On("CommitSHA").Return("it-worked!", nil).Once() - mockRepoClientFactory.On("NewClient", mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() + mockGitClient.EXPECT().Init().Return(nil).Once() + mockGitClient.EXPECT().Fetch(mock.Anything).Return(nil).Once() + mockGitClient.EXPECT().SetAuthor("Argo CD", "argo-cd@example.com").Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrOrphan("env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrNew("main", "env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().CommitAndPush("main", "test commit message").Return("", nil).Once() + mockGitClient.EXPECT().CommitSHA().Return("it-worked!", nil).Once() + mockRepoClientFactory.EXPECT().NewClient(mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() resp, err := service.CommitHydratedManifests(t.Context(), validRequest) require.NoError(t, err) @@ -114,14 +114,14 @@ func Test_CommitHydratedManifests(t *testing.T) { service, mockRepoClientFactory := newServiceWithMocks(t) mockGitClient := gitmocks.NewClient(t) - mockGitClient.On("Init").Return(nil).Once() - mockGitClient.On("Fetch", mock.Anything).Return(nil).Once() - mockGitClient.On("SetAuthor", "Argo CD", "argo-cd@example.com").Return("", nil).Once() - mockGitClient.On("CheckoutOrOrphan", "env/test", false).Return("", nil).Once() - mockGitClient.On("CheckoutOrNew", "main", "env/test", false).Return("", nil).Once() - mockGitClient.On("CommitAndPush", "main", "test commit message").Return("", nil).Once() - mockGitClient.On("CommitSHA").Return("root-and-blank-sha", nil).Once() - mockRepoClientFactory.On("NewClient", mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() + mockGitClient.EXPECT().Init().Return(nil).Once() + mockGitClient.EXPECT().Fetch(mock.Anything).Return(nil).Once() + mockGitClient.EXPECT().SetAuthor("Argo CD", "argo-cd@example.com").Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrOrphan("env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrNew("main", "env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().CommitAndPush("main", "test commit message").Return("", nil).Once() + mockGitClient.EXPECT().CommitSHA().Return("root-and-blank-sha", nil).Once() + mockRepoClientFactory.EXPECT().NewClient(mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() requestWithRootAndBlank := &apiclient.CommitHydratedManifestsRequest{ Repo: &v1alpha1.Repository{ @@ -161,15 +161,15 @@ func Test_CommitHydratedManifests(t *testing.T) { service, mockRepoClientFactory := newServiceWithMocks(t) mockGitClient := gitmocks.NewClient(t) - mockGitClient.On("Init").Return(nil).Once() - mockGitClient.On("Fetch", mock.Anything).Return(nil).Once() - mockGitClient.On("SetAuthor", "Argo CD", "argo-cd@example.com").Return("", nil).Once() - mockGitClient.On("CheckoutOrOrphan", "env/test", false).Return("", nil).Once() - mockGitClient.On("CheckoutOrNew", "main", "env/test", false).Return("", nil).Once() - mockGitClient.On("RemoveContents", []string{"apps/staging"}).Return("", nil).Once() - mockGitClient.On("CommitAndPush", "main", "test commit message").Return("", nil).Once() - mockGitClient.On("CommitSHA").Return("subdir-path-sha", nil).Once() - mockRepoClientFactory.On("NewClient", mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() + mockGitClient.EXPECT().Init().Return(nil).Once() + mockGitClient.EXPECT().Fetch(mock.Anything).Return(nil).Once() + mockGitClient.EXPECT().SetAuthor("Argo CD", "argo-cd@example.com").Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrOrphan("env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrNew("main", "env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().RemoveContents([]string{"apps/staging"}).Return("", nil).Once() + mockGitClient.EXPECT().CommitAndPush("main", "test commit message").Return("", nil).Once() + mockGitClient.EXPECT().CommitSHA().Return("subdir-path-sha", nil).Once() + mockRepoClientFactory.EXPECT().NewClient(mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() requestWithSubdirPath := &apiclient.CommitHydratedManifestsRequest{ Repo: &v1alpha1.Repository{ @@ -201,15 +201,15 @@ func Test_CommitHydratedManifests(t *testing.T) { service, mockRepoClientFactory := newServiceWithMocks(t) mockGitClient := gitmocks.NewClient(t) - mockGitClient.On("Init").Return(nil).Once() - mockGitClient.On("Fetch", mock.Anything).Return(nil).Once() - mockGitClient.On("SetAuthor", "Argo CD", "argo-cd@example.com").Return("", nil).Once() - mockGitClient.On("CheckoutOrOrphan", "env/test", false).Return("", nil).Once() - mockGitClient.On("CheckoutOrNew", "main", "env/test", false).Return("", nil).Once() - mockGitClient.On("RemoveContents", []string{"apps/production", "apps/staging"}).Return("", nil).Once() - mockGitClient.On("CommitAndPush", "main", "test commit message").Return("", nil).Once() - mockGitClient.On("CommitSHA").Return("mixed-paths-sha", nil).Once() - mockRepoClientFactory.On("NewClient", mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() + mockGitClient.EXPECT().Init().Return(nil).Once() + mockGitClient.EXPECT().Fetch(mock.Anything).Return(nil).Once() + mockGitClient.EXPECT().SetAuthor("Argo CD", "argo-cd@example.com").Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrOrphan("env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrNew("main", "env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().RemoveContents([]string{"apps/production", "apps/staging"}).Return("", nil).Once() + mockGitClient.EXPECT().CommitAndPush("main", "test commit message").Return("", nil).Once() + mockGitClient.EXPECT().CommitSHA().Return("mixed-paths-sha", nil).Once() + mockRepoClientFactory.EXPECT().NewClient(mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() requestWithMixedPaths := &apiclient.CommitHydratedManifestsRequest{ Repo: &v1alpha1.Repository{ @@ -257,14 +257,14 @@ func Test_CommitHydratedManifests(t *testing.T) { service, mockRepoClientFactory := newServiceWithMocks(t) mockGitClient := gitmocks.NewClient(t) - mockGitClient.On("Init").Return(nil).Once() - mockGitClient.On("Fetch", mock.Anything).Return(nil).Once() - mockGitClient.On("SetAuthor", "Argo CD", "argo-cd@example.com").Return("", nil).Once() - mockGitClient.On("CheckoutOrOrphan", "env/test", false).Return("", nil).Once() - mockGitClient.On("CheckoutOrNew", "main", "env/test", false).Return("", nil).Once() - mockGitClient.On("CommitAndPush", "main", "test commit message").Return("", nil).Once() - mockGitClient.On("CommitSHA").Return("it-worked!", nil).Once() - mockRepoClientFactory.On("NewClient", mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() + mockGitClient.EXPECT().Init().Return(nil).Once() + mockGitClient.EXPECT().Fetch(mock.Anything).Return(nil).Once() + mockGitClient.EXPECT().SetAuthor("Argo CD", "argo-cd@example.com").Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrOrphan("env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().CheckoutOrNew("main", "env/test", false).Return("", nil).Once() + mockGitClient.EXPECT().CommitAndPush("main", "test commit message").Return("", nil).Once() + mockGitClient.EXPECT().CommitSHA().Return("it-worked!", nil).Once() + mockRepoClientFactory.EXPECT().NewClient(mock.Anything, mock.Anything).Return(mockGitClient, nil).Once() requestWithEmptyPaths := &apiclient.CommitHydratedManifestsRequest{ Repo: &v1alpha1.Repository{ diff --git a/controller/appcontroller_test.go b/controller/appcontroller_test.go index 6a331bd50a..27a85c8fb2 100644 --- a/controller/appcontroller_test.go +++ b/controller/appcontroller_test.go @@ -107,33 +107,33 @@ func newFakeControllerWithResync(data *fakeData, appResyncPeriod time.Duration, } // Mock out call to GenerateManifest - mockRepoClient := mockrepoclient.RepoServerServiceClient{} + mockRepoClient := &mockrepoclient.RepoServerServiceClient{} if len(data.manifestResponses) > 0 { for _, response := range data.manifestResponses { if repoErr != nil { - mockRepoClient.On("GenerateManifest", mock.Anything, mock.Anything).Return(response, repoErr).Once() + mockRepoClient.EXPECT().GenerateManifest(mock.Anything, mock.Anything).Return(response, repoErr).Once() } else { - mockRepoClient.On("GenerateManifest", mock.Anything, mock.Anything).Return(response, nil).Once() + mockRepoClient.EXPECT().GenerateManifest(mock.Anything, mock.Anything).Return(response, nil).Once() } } } else { if repoErr != nil { - mockRepoClient.On("GenerateManifest", mock.Anything, mock.Anything).Return(data.manifestResponse, repoErr).Once() + mockRepoClient.EXPECT().GenerateManifest(mock.Anything, mock.Anything).Return(data.manifestResponse, repoErr).Once() } else { - mockRepoClient.On("GenerateManifest", mock.Anything, mock.Anything).Return(data.manifestResponse, nil).Once() + mockRepoClient.EXPECT().GenerateManifest(mock.Anything, mock.Anything).Return(data.manifestResponse, nil).Once() } } if revisionPathsErr != nil { - mockRepoClient.On("UpdateRevisionForPaths", mock.Anything, mock.Anything).Return(nil, revisionPathsErr) + mockRepoClient.EXPECT().UpdateRevisionForPaths(mock.Anything, mock.Anything).Return(nil, revisionPathsErr) } else { - mockRepoClient.On("UpdateRevisionForPaths", mock.Anything, mock.Anything).Return(data.updateRevisionForPathsResponse, nil) + mockRepoClient.EXPECT().UpdateRevisionForPaths(mock.Anything, mock.Anything).Return(data.updateRevisionForPathsResponse, nil) } - mockRepoClientset := mockrepoclient.Clientset{RepoServerServiceClient: &mockRepoClient} + mockRepoClientset := &mockrepoclient.Clientset{RepoServerServiceClient: mockRepoClient} - mockCommitClientset := mockcommitclient.Clientset{} + mockCommitClientset := &mockcommitclient.Clientset{} secret := corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ @@ -165,8 +165,8 @@ func newFakeControllerWithResync(data *fakeData, appResyncPeriod time.Duration, settingsMgr, kubeClient, appclientset.NewSimpleClientset(data.apps...), - &mockRepoClientset, - &mockCommitClientset, + mockRepoClientset, + mockCommitClientset, appstatecache.NewCache( cacheutil.NewCache(cacheutil.NewInMemoryCache(1*time.Minute)), 1*time.Minute, @@ -197,7 +197,7 @@ func newFakeControllerWithResync(data *fakeData, appResyncPeriod time.Duration, false, ) db := &dbmocks.ArgoDB{} - db.On("GetApplicationControllerReplicas").Return(1) + db.EXPECT().GetApplicationControllerReplicas().Return(1).Maybe() // Setting a default sharding algorithm for the tests where we cannot set it. ctrl.clusterSharding = sharding.NewClusterSharding(db, 0, 1, common.DefaultShardingAlgorithm) if err != nil { @@ -207,27 +207,25 @@ func newFakeControllerWithResync(data *fakeData, appResyncPeriod time.Duration, defer cancelProj() cancelApp := test.StartInformer(ctrl.appInformer) defer cancelApp() - clusterCacheMock := mocks.ClusterCache{} - clusterCacheMock.On("IsNamespaced", mock.Anything).Return(true, nil) - clusterCacheMock.On("GetOpenAPISchema").Return(nil, nil) - clusterCacheMock.On("GetGVKParser").Return(nil) + clusterCacheMock := &mocks.ClusterCache{} + clusterCacheMock.EXPECT().IsNamespaced(mock.Anything).Return(true, nil) + clusterCacheMock.EXPECT().GetOpenAPISchema().Return(nil) + clusterCacheMock.EXPECT().GetGVKParser().Return(nil) - mockStateCache := mockstatecache.LiveStateCache{} - ctrl.appStateManager.(*appStateManager).liveStateCache = &mockStateCache - ctrl.stateCache = &mockStateCache - mockStateCache.On("IsNamespaced", mock.Anything, mock.Anything).Return(true, nil) - mockStateCache.On("GetManagedLiveObjs", mock.Anything, mock.Anything, mock.Anything).Return(data.managedLiveObjs, nil) - mockStateCache.On("GetVersionsInfo", mock.Anything).Return("v1.2.3", nil, nil) + mockStateCache := &mockstatecache.LiveStateCache{} + ctrl.appStateManager.(*appStateManager).liveStateCache = mockStateCache + ctrl.stateCache = mockStateCache + mockStateCache.EXPECT().IsNamespaced(mock.Anything, mock.Anything).Return(true, nil) + mockStateCache.EXPECT().GetManagedLiveObjs(mock.Anything, mock.Anything, mock.Anything).Return(data.managedLiveObjs, nil) + mockStateCache.EXPECT().GetVersionsInfo(mock.Anything).Return("v1.2.3", nil, nil) response := make(map[kube.ResourceKey]v1alpha1.ResourceNode) for k, v := range data.namespacedResources { response[k] = v.ResourceNode } - mockStateCache.On("GetNamespaceTopLevelResources", mock.Anything, mock.Anything).Return(response, nil) - mockStateCache.On("IterateResources", mock.Anything, mock.Anything).Return(nil) - mockStateCache.On("GetClusterCache", mock.Anything).Return(&clusterCacheMock, nil) - mockStateCache.On("IterateHierarchyV2", mock.Anything, mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - keys := args[1].([]kube.ResourceKey) - action := args[2].(func(child v1alpha1.ResourceNode, appName string) bool) + mockStateCache.EXPECT().GetNamespaceTopLevelResources(mock.Anything, mock.Anything).Return(response, nil) + mockStateCache.EXPECT().IterateResources(mock.Anything, mock.Anything).Return(nil) + mockStateCache.EXPECT().GetClusterCache(mock.Anything).Return(clusterCacheMock, nil) + mockStateCache.EXPECT().IterateHierarchyV2(mock.Anything, mock.Anything, mock.Anything).Run(func(_ *v1alpha1.Cluster, keys []kube.ResourceKey, action func(_ v1alpha1.ResourceNode, _ string) bool) { for _, key := range keys { appName := "" if res, ok := data.namespacedResources[key]; ok { @@ -2531,7 +2529,7 @@ func TestGetAppHosts(t *testing.T) { } ctrl := newFakeController(data, nil) mockStateCache := &mockstatecache.LiveStateCache{} - mockStateCache.On("IterateResources", mock.Anything, mock.MatchedBy(func(callback func(res *clustercache.Resource, info *statecache.ResourceInfo)) bool { + mockStateCache.EXPECT().IterateResources(mock.Anything, mock.MatchedBy(func(callback func(res *clustercache.Resource, info *statecache.ResourceInfo)) bool { // node resource callback(&clustercache.Resource{ Ref: corev1.ObjectReference{Name: "minikube", Kind: "Node", APIVersion: "v1"}, @@ -2557,7 +2555,7 @@ func TestGetAppHosts(t *testing.T) { ResourceRequests: map[corev1.ResourceName]resource.Quantity{corev1.ResourceCPU: resource.MustParse("2")}, }}) return true - })).Return(nil) + })).Return(nil).Maybe() ctrl.stateCache = mockStateCache hosts, err := ctrl.getAppHosts(&v1alpha1.Cluster{Server: "test", Name: "test"}, app, []v1alpha1.ResourceNode{{ diff --git a/controller/cache/cache_test.go b/controller/cache/cache_test.go index 2072981cdd..8fdcdb7cf4 100644 --- a/controller/cache/cache_test.go +++ b/controller/cache/cache_test.go @@ -72,10 +72,10 @@ func fixtures(data map[string]string, opts ...func(secret *corev1.Secret)) (*fak func TestHandleModEvent_HasChanges(_ *testing.T) { clusterCache := &mocks.ClusterCache{} - clusterCache.On("Invalidate", mock.Anything, mock.Anything).Return(nil).Once() - clusterCache.On("EnsureSynced").Return(nil).Once() + clusterCache.EXPECT().Invalidate(mock.Anything, mock.Anything).Return().Once() + clusterCache.EXPECT().EnsureSynced().Return(nil).Once() db := &dbmocks.ArgoDB{} - db.On("GetApplicationControllerReplicas").Return(1) + db.EXPECT().GetApplicationControllerReplicas().Return(1) clustersCache := liveStateCache{ clusters: map[string]cache.ClusterCache{ "https://mycluster": clusterCache, @@ -95,10 +95,10 @@ func TestHandleModEvent_HasChanges(_ *testing.T) { func TestHandleModEvent_ClusterExcluded(t *testing.T) { clusterCache := &mocks.ClusterCache{} - clusterCache.On("Invalidate", mock.Anything, mock.Anything).Return(nil).Once() - clusterCache.On("EnsureSynced").Return(nil).Once() + clusterCache.EXPECT().Invalidate(mock.Anything, mock.Anything).Return().Once() + clusterCache.EXPECT().EnsureSynced().Return(nil).Once() db := &dbmocks.ArgoDB{} - db.On("GetApplicationControllerReplicas").Return(1) + db.EXPECT().GetApplicationControllerReplicas().Return(1).Maybe() clustersCache := liveStateCache{ db: nil, appInformer: nil, @@ -128,10 +128,10 @@ func TestHandleModEvent_ClusterExcluded(t *testing.T) { func TestHandleModEvent_NoChanges(_ *testing.T) { clusterCache := &mocks.ClusterCache{} - clusterCache.On("Invalidate", mock.Anything).Panic("should not invalidate") - clusterCache.On("EnsureSynced").Return(nil).Panic("should not re-sync") + clusterCache.EXPECT().Invalidate(mock.Anything).Panic("should not invalidate").Maybe() + clusterCache.EXPECT().EnsureSynced().Return(nil).Panic("should not re-sync").Maybe() db := &dbmocks.ArgoDB{} - db.On("GetApplicationControllerReplicas").Return(1) + db.EXPECT().GetApplicationControllerReplicas().Return(1).Maybe() clustersCache := liveStateCache{ clusters: map[string]cache.ClusterCache{ "https://mycluster": clusterCache, @@ -150,7 +150,7 @@ func TestHandleModEvent_NoChanges(_ *testing.T) { func TestHandleAddEvent_ClusterExcluded(t *testing.T) { db := &dbmocks.ArgoDB{} - db.On("GetApplicationControllerReplicas").Return(1) + db.EXPECT().GetApplicationControllerReplicas().Return(1).Maybe() clustersCache := liveStateCache{ clusters: map[string]cache.ClusterCache{}, clusterSharding: sharding.NewClusterSharding(db, 0, 2, common.DefaultShardingAlgorithm), @@ -169,7 +169,7 @@ func TestHandleDeleteEvent_CacheDeadlock(t *testing.T) { Config: appv1.ClusterConfig{Username: "bar"}, } db := &dbmocks.ArgoDB{} - db.On("GetApplicationControllerReplicas").Return(1) + db.EXPECT().GetApplicationControllerReplicas().Return(1) fakeClient := fake.NewClientset() settingsMgr := argosettings.NewSettingsManager(t.Context(), fakeClient, "argocd") gitopsEngineClusterCache := &mocks.ClusterCache{} @@ -200,7 +200,7 @@ func TestHandleDeleteEvent_CacheDeadlock(t *testing.T) { handleDeleteWasCalled.Lock() engineHoldsEngineLock.Lock() - gitopsEngineClusterCache.On("EnsureSynced").Run(func(_ mock.Arguments) { + gitopsEngineClusterCache.EXPECT().EnsureSynced().Run(func() { gitopsEngineClusterCacheLock.Lock() t.Log("EnsureSynced: Engine has engine lock") engineHoldsEngineLock.Unlock() @@ -214,7 +214,7 @@ func TestHandleDeleteEvent_CacheDeadlock(t *testing.T) { ensureSyncedCompleted.Unlock() }).Return(nil).Once() - gitopsEngineClusterCache.On("Invalidate").Run(func(_ mock.Arguments) { + gitopsEngineClusterCache.EXPECT().Invalidate().Run(func(_ ...cache.UpdateSettingsFunc) { // Allow EnsureSynced to continue now that we're in the deadlock condition handleDeleteWasCalled.Unlock() // Wait until gitops engine holds the gitops lock @@ -227,7 +227,7 @@ func TestHandleDeleteEvent_CacheDeadlock(t *testing.T) { t.Log("Invalidate: Invalidate has engine lock") gitopsEngineClusterCacheLock.Unlock() invalidateCompleted.Unlock() - }).Return() + }).Return().Maybe() go func() { // Start the gitops-engine lock holds go func() { diff --git a/controller/hydrator/hydrator_test.go b/controller/hydrator/hydrator_test.go index d36978ec0f..d1b3d71851 100644 --- a/controller/hydrator/hydrator_test.go +++ b/controller/hydrator/hydrator_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "google.golang.org/grpc" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -124,7 +125,7 @@ func Test_getAppsForHydrationKey_RepoURLNormalization(t *testing.T) { t.Parallel() d := mocks.NewDependencies(t) - d.On("GetProcessableApps").Return(&v1alpha1.ApplicationList{ + d.EXPECT().GetProcessableApps().Return(&v1alpha1.ApplicationList{ Items: []v1alpha1.Application{ { Spec: v1alpha1.ApplicationSpec{ @@ -276,7 +277,7 @@ func Test_validateApplications_RootPathSkipped(t *testing.T) { }, } - d.On("GetProcessableAppProj", mock.Anything).Return(&v1alpha1.AppProject{ + d.EXPECT().GetProcessableAppProj(mock.Anything).Return(&v1alpha1.AppProject{ Spec: v1alpha1.AppProjectSpec{ SourceRepos: []string{"https://example.com/*"}, }, @@ -394,10 +395,10 @@ func TestProcessAppHydrateQueueItem_HydrationNeeded(t *testing.T) { app.Status.SourceHydrator.CurrentOperation = nil var persistedStatus *v1alpha1.SourceHydratorStatus - d.On("PersistAppHydratorStatus", mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - persistedStatus = args.Get(1).(*v1alpha1.SourceHydratorStatus) + d.EXPECT().PersistAppHydratorStatus(mock.Anything, mock.Anything).Run(func(_ *v1alpha1.Application, newStatus *v1alpha1.SourceHydratorStatus) { + persistedStatus = newStatus }).Return().Once() - d.On("AddHydrationQueueItem", mock.Anything).Return().Once() + d.EXPECT().AddHydrationQueueItem(mock.Anything).Return().Once() h := &Hydrator{ dependencies: d, @@ -432,7 +433,7 @@ func TestProcessAppHydrateQueueItem_HydrationPassedTimeout(t *testing.T) { }, }, } - d.On("AddHydrationQueueItem", mock.Anything).Return().Once() + d.EXPECT().AddHydrationQueueItem(mock.Anything).Return().Once() h := &Hydrator{ dependencies: d, @@ -495,20 +496,21 @@ func TestProcessHydrationQueueItem_ValidationFails(t *testing.T) { hydrationKey := getHydrationQueueKey(app1) // getAppsForHydrationKey returns two apps - d.On("GetProcessableApps").Return(&v1alpha1.ApplicationList{Items: []v1alpha1.Application{*app1, *app2}}, nil) - d.On("GetProcessableAppProj", mock.Anything).Return(nil, errors.New("test error")).Once() - d.On("GetProcessableAppProj", mock.Anything).Return(newTestProject(), nil).Once() + d.EXPECT().GetProcessableApps().Return(&v1alpha1.ApplicationList{Items: []v1alpha1.Application{*app1, *app2}}, nil) + d.EXPECT().GetProcessableAppProj(mock.Anything).Return(nil, errors.New("test error")).Once() + d.EXPECT().GetProcessableAppProj(mock.Anything).Return(newTestProject(), nil).Once() h := &Hydrator{dependencies: d} // Expect setAppHydratorError to be called var persistedStatus1 *v1alpha1.SourceHydratorStatus var persistedStatus2 *v1alpha1.SourceHydratorStatus - d.On("PersistAppHydratorStatus", mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - if args.Get(0).(*v1alpha1.Application).Name == app1.Name { - persistedStatus1 = args.Get(1).(*v1alpha1.SourceHydratorStatus) - } else if args.Get(0).(*v1alpha1.Application).Name == app2.Name { - persistedStatus2 = args.Get(1).(*v1alpha1.SourceHydratorStatus) + d.EXPECT().PersistAppHydratorStatus(mock.Anything, mock.Anything).Run(func(orig *v1alpha1.Application, newStatus *v1alpha1.SourceHydratorStatus) { + switch orig.Name { + case app1.Name: + persistedStatus1 = newStatus + case app2.Name: + persistedStatus2 = newStatus } }).Return().Twice() @@ -536,22 +538,23 @@ func TestProcessHydrationQueueItem_HydrateFails_AppSpecificError(t *testing.T) { app2 = setTestAppPhase(app2, v1alpha1.HydrateOperationPhaseHydrating) hydrationKey := getHydrationQueueKey(app1) - d.On("GetProcessableApps").Return(&v1alpha1.ApplicationList{Items: []v1alpha1.Application{*app1, *app2}}, nil) - d.On("GetProcessableAppProj", mock.Anything).Return(newTestProject(), nil) + d.EXPECT().GetProcessableApps().Return(&v1alpha1.ApplicationList{Items: []v1alpha1.Application{*app1, *app2}}, nil) + d.EXPECT().GetProcessableAppProj(mock.Anything).Return(newTestProject(), nil) h := &Hydrator{dependencies: d} // Make hydrate return app-specific error - d.On("GetRepoObjs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, errors.New("hydrate error")) + d.EXPECT().GetRepoObjs(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil, errors.New("hydrate error")) // Expect setAppHydratorError to be called var persistedStatus1 *v1alpha1.SourceHydratorStatus var persistedStatus2 *v1alpha1.SourceHydratorStatus - d.On("PersistAppHydratorStatus", mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - if args.Get(0).(*v1alpha1.Application).Name == app1.Name { - persistedStatus1 = args.Get(1).(*v1alpha1.SourceHydratorStatus) - } else if args.Get(0).(*v1alpha1.Application).Name == app2.Name { - persistedStatus2 = args.Get(1).(*v1alpha1.SourceHydratorStatus) + d.EXPECT().PersistAppHydratorStatus(mock.Anything, mock.Anything).Run(func(orig *v1alpha1.Application, newStatus *v1alpha1.SourceHydratorStatus) { + switch orig.Name { + case app1.Name: + persistedStatus1 = newStatus + case app2.Name: + persistedStatus2 = newStatus } }).Return().Twice() @@ -579,23 +582,24 @@ func TestProcessHydrationQueueItem_HydrateFails_CommonError(t *testing.T) { app2.Spec.SourceHydrator.SyncSource.Path = "something/else" app2 = setTestAppPhase(app2, v1alpha1.HydrateOperationPhaseHydrating) hydrationKey := getHydrationQueueKey(app1) - d.On("GetProcessableApps").Return(&v1alpha1.ApplicationList{Items: []v1alpha1.Application{*app1, *app2}}, nil) - d.On("GetProcessableAppProj", mock.Anything).Return(newTestProject(), nil) + d.EXPECT().GetProcessableApps().Return(&v1alpha1.ApplicationList{Items: []v1alpha1.Application{*app1, *app2}}, nil) + d.EXPECT().GetProcessableAppProj(mock.Anything).Return(newTestProject(), nil) h := &Hydrator{dependencies: d, repoGetter: r} - d.On("GetRepoObjs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, &repoclient.ManifestResponse{ + d.EXPECT().GetRepoObjs(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, &repoclient.ManifestResponse{ Revision: "abc123", }, nil) - r.On("GetRepository", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("repo error")) + r.EXPECT().GetRepository(mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("repo error")) // Expect setAppHydratorError to be called var persistedStatus1 *v1alpha1.SourceHydratorStatus var persistedStatus2 *v1alpha1.SourceHydratorStatus - d.On("PersistAppHydratorStatus", mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - if args.Get(0).(*v1alpha1.Application).Name == app1.Name { - persistedStatus1 = args.Get(1).(*v1alpha1.SourceHydratorStatus) - } else if args.Get(0).(*v1alpha1.Application).Name == app2.Name { - persistedStatus2 = args.Get(1).(*v1alpha1.SourceHydratorStatus) + d.EXPECT().PersistAppHydratorStatus(mock.Anything, mock.Anything).Run(func(orig *v1alpha1.Application, newStatus *v1alpha1.SourceHydratorStatus) { + switch orig.Name { + case app1.Name: + persistedStatus1 = newStatus + case app2.Name: + persistedStatus2 = newStatus } }).Return().Twice() @@ -624,24 +628,24 @@ func TestProcessHydrationQueueItem_SuccessfulHydration(t *testing.T) { cc := commitservermocks.NewCommitServiceClient(t) app := setTestAppPhase(newTestApp("test-app"), v1alpha1.HydrateOperationPhaseHydrating) hydrationKey := getHydrationQueueKey(app) - d.On("GetProcessableApps").Return(&v1alpha1.ApplicationList{Items: []v1alpha1.Application{*app}}, nil) - d.On("GetProcessableAppProj", mock.Anything).Return(newTestProject(), nil) + d.EXPECT().GetProcessableApps().Return(&v1alpha1.ApplicationList{Items: []v1alpha1.Application{*app}}, nil) + d.EXPECT().GetProcessableAppProj(mock.Anything).Return(newTestProject(), nil) h := &Hydrator{dependencies: d, repoGetter: r, commitClientset: &commitservermocks.Clientset{CommitServiceClient: cc}, repoClientset: &reposervermocks.Clientset{RepoServerServiceClient: rc}} // Expect setAppHydratorError to be called var persistedStatus *v1alpha1.SourceHydratorStatus - d.On("PersistAppHydratorStatus", mock.Anything, mock.Anything).Run(func(args mock.Arguments) { - persistedStatus = args.Get(1).(*v1alpha1.SourceHydratorStatus) + d.EXPECT().PersistAppHydratorStatus(mock.Anything, mock.Anything).Run(func(_ *v1alpha1.Application, newStatus *v1alpha1.SourceHydratorStatus) { + persistedStatus = newStatus }).Return().Once() - d.On("RequestAppRefresh", app.Name, app.Namespace).Return(nil).Once() - d.On("GetRepoObjs", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, &repoclient.ManifestResponse{ + d.EXPECT().RequestAppRefresh(app.Name, app.Namespace).Return(nil).Once() + d.EXPECT().GetRepoObjs(mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, &repoclient.ManifestResponse{ Revision: "abc123", }, nil).Once() - r.On("GetRepository", mock.Anything, "https://example.com/repo", "test-project").Return(nil, nil).Once() - rc.On("GetRevisionMetadata", mock.Anything, mock.Anything).Return(nil, nil).Once() - d.On("GetWriteCredentials", mock.Anything, "https://example.com/repo", "test-project").Return(nil, nil).Once() - d.On("GetHydratorCommitMessageTemplate").Return("commit message", nil).Once() - cc.On("CommitHydratedManifests", mock.Anything, mock.Anything).Return(&commitclient.CommitHydratedManifestsResponse{HydratedSha: "def456"}, nil).Once() + r.EXPECT().GetRepository(mock.Anything, "https://example.com/repo", "test-project").Return(nil, nil).Once() + rc.EXPECT().GetRevisionMetadata(mock.Anything, mock.Anything).Return(nil, nil).Once() + d.EXPECT().GetWriteCredentials(mock.Anything, "https://example.com/repo", "test-project").Return(nil, nil).Once() + d.EXPECT().GetHydratorCommitMessageTemplate().Return("commit message", nil).Once() + cc.EXPECT().CommitHydratedManifests(mock.Anything, mock.Anything).Return(&commitclient.CommitHydratedManifestsResponse{HydratedSha: "def456"}, nil).Once() h.ProcessHydrationQueueItem(hydrationKey) @@ -665,7 +669,7 @@ func TestValidateApplications_ProjectError(t *testing.T) { t.Parallel() d := mocks.NewDependencies(t) app := newTestApp("test-app") - d.On("GetProcessableAppProj", app).Return(nil, errors.New("project error")).Once() + d.EXPECT().GetProcessableAppProj(app).Return(nil, errors.New("project error")).Once() h := &Hydrator{dependencies: d} projects, errs := h.validateApplications([]*v1alpha1.Application{app}) @@ -680,7 +684,7 @@ func TestValidateApplications_SourceNotPermitted(t *testing.T) { app := newTestApp("test-app") proj := newTestProject() proj.Spec.SourceRepos = []string{"not-allowed"} - d.On("GetProcessableAppProj", app).Return(proj, nil).Once() + d.EXPECT().GetProcessableAppProj(app).Return(proj, nil).Once() h := &Hydrator{dependencies: d} projects, errs := h.validateApplications([]*v1alpha1.Application{app}) @@ -695,7 +699,7 @@ func TestValidateApplications_RootPath(t *testing.T) { app := newTestApp("test-app") app.Spec.SourceHydrator.SyncSource.Path = "." proj := newTestProject() - d.On("GetProcessableAppProj", app).Return(proj, nil).Once() + d.EXPECT().GetProcessableAppProj(app).Return(proj, nil).Once() h := &Hydrator{dependencies: d} projects, errs := h.validateApplications([]*v1alpha1.Application{app}) @@ -711,8 +715,8 @@ func TestValidateApplications_DuplicateDestination(t *testing.T) { app2 := newTestApp("app2") app2.Spec.SourceHydrator.SyncSource.Path = app1.Spec.SourceHydrator.SyncSource.Path // duplicate path proj := newTestProject() - d.On("GetProcessableAppProj", app1).Return(proj, nil).Once() - d.On("GetProcessableAppProj", app2).Return(proj, nil).Once() + d.EXPECT().GetProcessableAppProj(app1).Return(proj, nil).Once() + d.EXPECT().GetProcessableAppProj(app2).Return(proj, nil).Once() h := &Hydrator{dependencies: d} projects, errs := h.validateApplications([]*v1alpha1.Application{app1, app2}) @@ -729,8 +733,8 @@ func TestValidateApplications_Success(t *testing.T) { app2 := newTestApp("app2") app2.Spec.SourceHydrator.SyncSource.Path = "other-path" proj := newTestProject() - d.On("GetProcessableAppProj", app1).Return(proj, nil).Once() - d.On("GetProcessableAppProj", app2).Return(proj, nil).Once() + d.EXPECT().GetProcessableAppProj(app1).Return(proj, nil).Once() + d.EXPECT().GetProcessableAppProj(app2).Return(proj, nil).Once() h := &Hydrator{dependencies: d} projects, errs := h.validateApplications([]*v1alpha1.Application{app1, app2}) @@ -791,27 +795,25 @@ func TestHydrator_hydrate_Success(t *testing.T) { readRepo := &v1alpha1.Repository{Repo: "https://example.com/repo"} writeRepo := &v1alpha1.Repository{Repo: "https://example.com/repo"} - d.On("GetRepoObjs", mock.Anything, app1, app1.Spec.SourceHydrator.GetDrySource(), "main", proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) - d.On("GetRepoObjs", mock.Anything, app2, app2.Spec.SourceHydrator.GetDrySource(), "sha123", proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) - r.On("GetRepository", mock.Anything, readRepo.Repo, proj.Name).Return(readRepo, nil) - rc.On("GetRevisionMetadata", mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{Message: "metadata"}, nil).Run(func(args mock.Arguments) { - r := args.Get(1).(*repoclient.RepoServerRevisionMetadataRequest) - assert.Equal(t, readRepo, r.Repo) - assert.Equal(t, "sha123", r.Revision) + d.EXPECT().GetRepoObjs(mock.Anything, app1, app1.Spec.SourceHydrator.GetDrySource(), "main", proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) + d.EXPECT().GetRepoObjs(mock.Anything, app2, app2.Spec.SourceHydrator.GetDrySource(), "sha123", proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) + r.EXPECT().GetRepository(mock.Anything, readRepo.Repo, proj.Name).Return(readRepo, nil) + rc.EXPECT().GetRevisionMetadata(mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{Message: "metadata"}, nil).Run(func(_ context.Context, in *repoclient.RepoServerRevisionMetadataRequest, _ ...grpc.CallOption) { + assert.Equal(t, readRepo, in.Repo) + assert.Equal(t, "sha123", in.Revision) }) - d.On("GetWriteCredentials", mock.Anything, readRepo.Repo, proj.Name).Return(writeRepo, nil) - d.On("GetHydratorCommitMessageTemplate").Return("commit message", nil) - cc.On("CommitHydratedManifests", mock.Anything, mock.Anything).Return(&commitclient.CommitHydratedManifestsResponse{HydratedSha: "hydrated123"}, nil).Run(func(args mock.Arguments) { - r := args.Get(1).(*commitclient.CommitHydratedManifestsRequest) - assert.Equal(t, "commit message", r.CommitMessage) - assert.Equal(t, "hydrated", r.SyncBranch) - assert.Equal(t, "hydrated-next", r.TargetBranch) - assert.Equal(t, "sha123", r.DrySha) - assert.Equal(t, writeRepo, r.Repo) - assert.Len(t, r.Paths, 2) - assert.Equal(t, app1.Spec.SourceHydrator.SyncSource.Path, r.Paths[0].Path) - assert.Equal(t, app2.Spec.SourceHydrator.SyncSource.Path, r.Paths[1].Path) - assert.Equal(t, "metadata", r.DryCommitMetadata.Message) + d.EXPECT().GetWriteCredentials(mock.Anything, readRepo.Repo, proj.Name).Return(writeRepo, nil) + d.EXPECT().GetHydratorCommitMessageTemplate().Return("commit message", nil) + cc.EXPECT().CommitHydratedManifests(mock.Anything, mock.Anything).Return(&commitclient.CommitHydratedManifestsResponse{HydratedSha: "hydrated123"}, nil).Run(func(_ context.Context, in *commitclient.CommitHydratedManifestsRequest, _ ...grpc.CallOption) { + assert.Equal(t, "commit message", in.CommitMessage) + assert.Equal(t, "hydrated", in.SyncBranch) + assert.Equal(t, "hydrated-next", in.TargetBranch) + assert.Equal(t, "sha123", in.DrySha) + assert.Equal(t, writeRepo, in.Repo) + assert.Len(t, in.Paths, 2) + assert.Equal(t, app1.Spec.SourceHydrator.SyncSource.Path, in.Paths[0].Path) + assert.Equal(t, app2.Spec.SourceHydrator.SyncSource.Path, in.Paths[1].Path) + assert.Equal(t, "metadata", in.DryCommitMetadata.Message) }) logCtx := log.NewEntry(log.StandardLogger()) @@ -841,7 +843,7 @@ func TestHydrator_hydrate_GetManifestsError(t *testing.T) { proj := newTestProject() projects := map[string]*v1alpha1.AppProject{app.Spec.Project: proj} - d.On("GetRepoObjs", mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, nil, errors.New("manifests error")) + d.EXPECT().GetRepoObjs(mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, nil, errors.New("manifests error")) logCtx := log.NewEntry(log.StandardLogger()) sha, hydratedSha, errs, err := h.hydrate(logCtx, []*v1alpha1.Application{app}, projects) @@ -871,9 +873,9 @@ func TestHydrator_hydrate_RevisionMetadataError(t *testing.T) { proj := newTestProject() projects := map[string]*v1alpha1.AppProject{app.Spec.Project: proj} - d.On("GetRepoObjs", mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) - r.On("GetRepository", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) - rc.On("GetRevisionMetadata", mock.Anything, mock.Anything).Return(nil, errors.New("metadata error")) + d.EXPECT().GetRepoObjs(mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) + r.EXPECT().GetRepository(mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) + rc.EXPECT().GetRevisionMetadata(mock.Anything, mock.Anything).Return(nil, errors.New("metadata error")) logCtx := log.NewEntry(log.StandardLogger()) sha, hydratedSha, errs, err := h.hydrate(logCtx, []*v1alpha1.Application{app}, projects) @@ -903,10 +905,10 @@ func TestHydrator_hydrate_GetWriteCredentialsError(t *testing.T) { proj := newTestProject() projects := map[string]*v1alpha1.AppProject{app.Spec.Project: proj} - d.On("GetRepoObjs", mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) - r.On("GetRepository", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) - rc.On("GetRevisionMetadata", mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) - d.On("GetWriteCredentials", mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("creds error")) + d.EXPECT().GetRepoObjs(mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) + r.EXPECT().GetRepository(mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) + rc.EXPECT().GetRevisionMetadata(mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) + d.EXPECT().GetWriteCredentials(mock.Anything, mock.Anything, mock.Anything).Return(nil, errors.New("creds error")) logCtx := log.NewEntry(log.StandardLogger()) sha, hydratedSha, errs, err := h.hydrate(logCtx, []*v1alpha1.Application{app}, projects) @@ -936,11 +938,11 @@ func TestHydrator_hydrate_CommitMessageTemplateError(t *testing.T) { proj := newTestProject() projects := map[string]*v1alpha1.AppProject{app.Spec.Project: proj} - d.On("GetRepoObjs", mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) - r.On("GetRepository", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) - rc.On("GetRevisionMetadata", mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) - d.On("GetWriteCredentials", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) - d.On("GetHydratorCommitMessageTemplate").Return("", errors.New("template error")) + d.EXPECT().GetRepoObjs(mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) + r.EXPECT().GetRepository(mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) + rc.EXPECT().GetRevisionMetadata(mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) + d.EXPECT().GetWriteCredentials(mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) + d.EXPECT().GetHydratorCommitMessageTemplate().Return("", errors.New("template error")) logCtx := log.NewEntry(log.StandardLogger()) sha, hydratedSha, errs, err := h.hydrate(logCtx, []*v1alpha1.Application{app}, projects) @@ -970,11 +972,11 @@ func TestHydrator_hydrate_TemplatedCommitMessageError(t *testing.T) { proj := newTestProject() projects := map[string]*v1alpha1.AppProject{app.Spec.Project: proj} - d.On("GetRepoObjs", mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) - r.On("GetRepository", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) - rc.On("GetRevisionMetadata", mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) - d.On("GetWriteCredentials", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) - d.On("GetHydratorCommitMessageTemplate").Return("{{ notAFunction }} template", nil) + d.EXPECT().GetRepoObjs(mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) + r.EXPECT().GetRepository(mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) + rc.EXPECT().GetRevisionMetadata(mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) + d.EXPECT().GetWriteCredentials(mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) + d.EXPECT().GetHydratorCommitMessageTemplate().Return("{{ notAFunction }} template", nil) logCtx := log.NewEntry(log.StandardLogger()) sha, hydratedSha, errs, err := h.hydrate(logCtx, []*v1alpha1.Application{app}, projects) @@ -1004,12 +1006,12 @@ func TestHydrator_hydrate_CommitHydratedManifestsError(t *testing.T) { proj := newTestProject() projects := map[string]*v1alpha1.AppProject{app.Spec.Project: proj} - d.On("GetRepoObjs", mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) - r.On("GetRepository", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) - rc.On("GetRevisionMetadata", mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) - d.On("GetWriteCredentials", mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) - d.On("GetHydratorCommitMessageTemplate").Return("commit message", nil) - cc.On("CommitHydratedManifests", mock.Anything, mock.Anything).Return(nil, errors.New("commit error")) + d.EXPECT().GetRepoObjs(mock.Anything, app, mock.Anything, mock.Anything, proj).Return(nil, &repoclient.ManifestResponse{Revision: "sha123"}, nil) + r.EXPECT().GetRepository(mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) + rc.EXPECT().GetRevisionMetadata(mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) + d.EXPECT().GetWriteCredentials(mock.Anything, mock.Anything, mock.Anything).Return(&v1alpha1.Repository{Repo: "https://example.com/repo"}, nil) + d.EXPECT().GetHydratorCommitMessageTemplate().Return("commit message", nil) + cc.EXPECT().CommitHydratedManifests(mock.Anything, mock.Anything).Return(nil, errors.New("commit error")) logCtx := log.NewEntry(log.StandardLogger()) sha, hydratedSha, errs, err := h.hydrate(logCtx, []*v1alpha1.Application{app}, projects) @@ -1048,7 +1050,7 @@ func TestHydrator_getManifests_Success(t *testing.T) { }, }) - d.On("GetRepoObjs", mock.Anything, app, app.Spec.SourceHydrator.GetDrySource(), "sha123", proj).Return([]*unstructured.Unstructured{cm}, &repoclient.ManifestResponse{ + d.EXPECT().GetRepoObjs(mock.Anything, app, app.Spec.SourceHydrator.GetDrySource(), "sha123", proj).Return([]*unstructured.Unstructured{cm}, &repoclient.ManifestResponse{ Revision: "sha123", Commands: []string{"cmd1", "cmd2"}, }, nil) @@ -1069,7 +1071,7 @@ func TestHydrator_getManifests_EmptyTargetRevision(t *testing.T) { app := newTestApp("test-app") proj := newTestProject() - d.On("GetRepoObjs", mock.Anything, app, mock.Anything, "main", proj).Return([]*unstructured.Unstructured{}, &repoclient.ManifestResponse{Revision: "sha123"}, nil) + d.EXPECT().GetRepoObjs(mock.Anything, app, mock.Anything, "main", proj).Return([]*unstructured.Unstructured{}, &repoclient.ManifestResponse{Revision: "sha123"}, nil) rev, pathDetails, err := h.getManifests(context.Background(), app, "", proj) require.NoError(t, err) @@ -1084,7 +1086,7 @@ func TestHydrator_getManifests_GetRepoObjsError(t *testing.T) { app := newTestApp("test-app") proj := newTestProject() - d.On("GetRepoObjs", mock.Anything, app, mock.Anything, "main", proj).Return(nil, nil, errors.New("repo error")) + d.EXPECT().GetRepoObjs(mock.Anything, app, mock.Anything, "main", proj).Return(nil, nil, errors.New("repo error")) rev, pathDetails, err := h.getManifests(context.Background(), app, "main", proj) require.Error(t, err) diff --git a/controller/metrics/clustercollector_test.go b/controller/metrics/clustercollector_test.go index 3f1881447b..5aff5a71fa 100644 --- a/controller/metrics/clustercollector_test.go +++ b/controller/metrics/clustercollector_test.go @@ -13,12 +13,12 @@ import ( ) func TestMetricClusterConnectivity(t *testing.T) { - db := dbmocks.ArgoDB{} + db := &dbmocks.ArgoDB{} cluster1 := v1alpha1.Cluster{Name: "cluster1", Server: "server1", Labels: map[string]string{"env": "dev", "team": "team1"}} cluster2 := v1alpha1.Cluster{Name: "cluster2", Server: "server2", Labels: map[string]string{"env": "staging", "team": "team2"}} cluster3 := v1alpha1.Cluster{Name: "cluster3", Server: "server3", Labels: map[string]string{"env": "production", "team": "team3"}} clusterList := &v1alpha1.ClusterList{Items: []v1alpha1.Cluster{cluster1, cluster2, cluster3}} - db.On("ListClusters", mock.Anything).Return(clusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(clusterList, nil) type testCases struct { testCombination diff --git a/controller/metrics/metrics_test.go b/controller/metrics/metrics_test.go index c63d777d11..c69b62c12a 100644 --- a/controller/metrics/metrics_test.go +++ b/controller/metrics/metrics_test.go @@ -322,8 +322,8 @@ func runTest(t *testing.T, cfg TestMetricServerConfig) { cancel, appLister := newFakeLister(cfg.FakeAppYAMLs...) defer cancel() mockDB := mocks.NewArgoDB(t) - mockDB.On("GetClusterServersByName", mock.Anything, "cluster1").Return([]string{"https://localhost:6443"}, nil) - mockDB.On("GetCluster", mock.Anything, "https://localhost:6443").Return(&argoappv1.Cluster{Name: "cluster1", Server: "https://localhost:6443"}, nil) + mockDB.EXPECT().GetClusterServersByName(mock.Anything, "cluster1").Return([]string{"https://localhost:6443"}, nil).Maybe() + mockDB.EXPECT().GetCluster(mock.Anything, "https://localhost:6443").Return(&argoappv1.Cluster{Name: "cluster1", Server: "https://localhost:6443"}, nil).Maybe() metricsServ, err := NewMetricsServer("localhost:8082", appLister, appFilter, noOpHealthCheck, cfg.AppLabels, cfg.AppConditions, mockDB) require.NoError(t, err) diff --git a/controller/sharding/sharding_test.go b/controller/sharding/sharding_test.go index 64aa2010aa..0afd3c865c 100644 --- a/controller/sharding/sharding_test.go +++ b/controller/sharding/sharding_test.go @@ -28,7 +28,7 @@ import ( func TestGetShardByID_NotEmptyID(t *testing.T) { db := &dbmocks.ArgoDB{} replicasCount := 1 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Maybe() assert.Equal(t, 0, LegacyDistributionFunction(replicasCount)(&v1alpha1.Cluster{ID: "1"})) assert.Equal(t, 0, LegacyDistributionFunction(replicasCount)(&v1alpha1.Cluster{ID: "2"})) assert.Equal(t, 0, LegacyDistributionFunction(replicasCount)(&v1alpha1.Cluster{ID: "3"})) @@ -38,7 +38,7 @@ func TestGetShardByID_NotEmptyID(t *testing.T) { func TestGetShardByID_EmptyID(t *testing.T) { db := &dbmocks.ArgoDB{} replicasCount := 1 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Maybe() distributionFunction := LegacyDistributionFunction shard := distributionFunction(replicasCount)(&v1alpha1.Cluster{}) assert.Equal(t, 0, shard) @@ -46,7 +46,7 @@ func TestGetShardByID_EmptyID(t *testing.T) { func TestGetShardByID_NoReplicas(t *testing.T) { db := &dbmocks.ArgoDB{} - db.On("GetApplicationControllerReplicas").Return(0) + db.EXPECT().GetApplicationControllerReplicas().Return(0).Maybe() distributionFunction := LegacyDistributionFunction shard := distributionFunction(0)(&v1alpha1.Cluster{}) assert.Equal(t, -1, shard) @@ -54,7 +54,7 @@ func TestGetShardByID_NoReplicas(t *testing.T) { func TestGetShardByID_NoReplicasUsingHashDistributionFunction(t *testing.T) { db := &dbmocks.ArgoDB{} - db.On("GetApplicationControllerReplicas").Return(0) + db.EXPECT().GetApplicationControllerReplicas().Return(0).Maybe() distributionFunction := LegacyDistributionFunction shard := distributionFunction(0)(&v1alpha1.Cluster{}) assert.Equal(t, -1, shard) @@ -63,7 +63,7 @@ func TestGetShardByID_NoReplicasUsingHashDistributionFunction(t *testing.T) { func TestGetShardByID_NoReplicasUsingHashDistributionFunctionWithClusters(t *testing.T) { clusters, db, cluster1, cluster2, cluster3, cluster4, cluster5 := createTestClusters() // Test with replicas set to 0 - db.On("GetApplicationControllerReplicas").Return(0) + db.EXPECT().GetApplicationControllerReplicas().Return(0).Maybe() t.Setenv(common.EnvControllerShardingAlgorithm, common.RoundRobinShardingAlgorithm) distributionFunction := RoundRobinDistributionFunction(clusters, 0) assert.Equal(t, -1, distributionFunction(nil)) @@ -91,7 +91,7 @@ func TestGetClusterFilterLegacy(t *testing.T) { // shardIndex := 1 // ensuring that a shard with index 1 will process all the clusters with an "even" id (2,4,6,...) clusterAccessor, db, cluster1, cluster2, cluster3, cluster4, _ := createTestClusters() replicasCount := 2 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Maybe() t.Setenv(common.EnvControllerShardingAlgorithm, common.LegacyShardingAlgorithm) distributionFunction := RoundRobinDistributionFunction(clusterAccessor, replicasCount) assert.Equal(t, 0, distributionFunction(nil)) @@ -109,7 +109,7 @@ func TestGetClusterFilterUnknown(t *testing.T) { os.Unsetenv(common.EnvControllerShardingAlgorithm) t.Setenv(common.EnvControllerShardingAlgorithm, "unknown") replicasCount := 2 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Maybe() distributionFunction := GetDistributionFunction(clusterAccessor, appAccessor, "unknown", replicasCount) assert.Equal(t, 0, distributionFunction(nil)) assert.Equal(t, 0, distributionFunction(&cluster1)) @@ -124,7 +124,7 @@ func TestLegacyGetClusterFilterWithFixedShard(t *testing.T) { clusterAccessor, db, cluster1, cluster2, cluster3, cluster4, _ := createTestClusters() appAccessor, _, _, _, _, _ := createTestApps() replicasCount := 5 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Maybe() filter := GetDistributionFunction(clusterAccessor, appAccessor, common.DefaultShardingAlgorithm, replicasCount) assert.Equal(t, 0, filter(nil)) assert.Equal(t, 4, filter(&cluster1)) @@ -151,7 +151,7 @@ func TestRoundRobinGetClusterFilterWithFixedShard(t *testing.T) { clusterAccessor, db, cluster1, cluster2, cluster3, cluster4, _ := createTestClusters() appAccessor, _, _, _, _, _ := createTestApps() replicasCount := 4 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Maybe() filter := GetDistributionFunction(clusterAccessor, appAccessor, common.RoundRobinShardingAlgorithm, replicasCount) assert.Equal(t, 0, filter(nil)) @@ -182,7 +182,7 @@ func TestGetShardByIndexModuloReplicasCountDistributionFunction2(t *testing.T) { t.Run("replicas set to 1", func(t *testing.T) { replicasCount := 1 - db.On("GetApplicationControllerReplicas").Return(replicasCount).Once() + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Once() distributionFunction := RoundRobinDistributionFunction(clusters, replicasCount) assert.Equal(t, 0, distributionFunction(nil)) assert.Equal(t, 0, distributionFunction(&cluster1)) @@ -194,7 +194,7 @@ func TestGetShardByIndexModuloReplicasCountDistributionFunction2(t *testing.T) { t.Run("replicas set to 2", func(t *testing.T) { replicasCount := 2 - db.On("GetApplicationControllerReplicas").Return(replicasCount).Once() + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Once() distributionFunction := RoundRobinDistributionFunction(clusters, replicasCount) assert.Equal(t, 0, distributionFunction(nil)) assert.Equal(t, 0, distributionFunction(&cluster1)) @@ -206,7 +206,7 @@ func TestGetShardByIndexModuloReplicasCountDistributionFunction2(t *testing.T) { t.Run("replicas set to 3", func(t *testing.T) { replicasCount := 3 - db.On("GetApplicationControllerReplicas").Return(replicasCount).Once() + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Once() distributionFunction := RoundRobinDistributionFunction(clusters, replicasCount) assert.Equal(t, 0, distributionFunction(nil)) assert.Equal(t, 0, distributionFunction(&cluster1)) @@ -232,7 +232,7 @@ func TestGetShardByIndexModuloReplicasCountDistributionFunctionWhenClusterNumber t.Setenv(common.EnvControllerReplicas, strconv.Itoa(replicasCount)) _, db, _, _, _, _, _ := createTestClusters() clusterAccessor := func() []*v1alpha1.Cluster { return clusterPointers } - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Maybe() distributionFunction := RoundRobinDistributionFunction(clusterAccessor, replicasCount) for i, c := range clusterPointers { assert.Equal(t, i%2, distributionFunction(c)) @@ -240,7 +240,7 @@ func TestGetShardByIndexModuloReplicasCountDistributionFunctionWhenClusterNumber } func TestGetShardByIndexModuloReplicasCountDistributionFunctionWhenClusterIsAddedAndRemoved(t *testing.T) { - db := dbmocks.ArgoDB{} + db := &dbmocks.ArgoDB{} cluster1 := createCluster("cluster1", "1") cluster2 := createCluster("cluster2", "2") cluster3 := createCluster("cluster3", "3") @@ -252,10 +252,10 @@ func TestGetShardByIndexModuloReplicasCountDistributionFunctionWhenClusterIsAdde clusterAccessor := getClusterAccessor(clusters) clusterList := &v1alpha1.ClusterList{Items: []v1alpha1.Cluster{cluster1, cluster2, cluster3, cluster4, cluster5}} - db.On("ListClusters", mock.Anything).Return(clusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(clusterList, nil) // Test with replicas set to 2 replicasCount := 2 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount) distributionFunction := RoundRobinDistributionFunction(clusterAccessor, replicasCount) assert.Equal(t, 0, distributionFunction(nil)) assert.Equal(t, 0, distributionFunction(&cluster1)) @@ -277,7 +277,7 @@ func TestGetShardByIndexModuloReplicasCountDistributionFunctionWhenClusterIsAdde } func TestConsistentHashingWhenClusterIsAddedAndRemoved(t *testing.T) { - db := dbmocks.ArgoDB{} + db := &dbmocks.ArgoDB{} clusterCount := 133 prefix := "cluster" @@ -290,10 +290,10 @@ func TestConsistentHashingWhenClusterIsAddedAndRemoved(t *testing.T) { clusterAccessor := getClusterAccessor(clusters) appAccessor, _, _, _, _, _ := createTestApps() clusterList := &v1alpha1.ClusterList{Items: clusters} - db.On("ListClusters", mock.Anything).Return(clusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(clusterList, nil) // Test with replicas set to 3 replicasCount := 3 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount) distributionFunction := ConsistentHashingWithBoundedLoadsDistributionFunction(clusterAccessor, appAccessor, replicasCount) assert.Equal(t, 0, distributionFunction(nil)) distributionMap := map[int]int{} @@ -347,32 +347,32 @@ func TestConsistentHashingWhenClusterIsAddedAndRemoved(t *testing.T) { } func TestConsistentHashingWhenClusterWithZeroReplicas(t *testing.T) { - db := dbmocks.ArgoDB{} + db := &dbmocks.ArgoDB{} clusters := []v1alpha1.Cluster{createCluster("cluster-01", "01")} clusterAccessor := getClusterAccessor(clusters) clusterList := &v1alpha1.ClusterList{Items: clusters} - db.On("ListClusters", mock.Anything).Return(clusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(clusterList, nil) appAccessor, _, _, _, _, _ := createTestApps() // Test with replicas set to 0 replicasCount := 0 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount) distributionFunction := ConsistentHashingWithBoundedLoadsDistributionFunction(clusterAccessor, appAccessor, replicasCount) assert.Equal(t, -1, distributionFunction(nil)) } func TestConsistentHashingWhenClusterWithFixedShard(t *testing.T) { - db := dbmocks.ArgoDB{} + db := &dbmocks.ArgoDB{} var fixedShard int64 = 1 cluster := &v1alpha1.Cluster{ID: "1", Shard: &fixedShard} clusters := []v1alpha1.Cluster{*cluster} clusterAccessor := getClusterAccessor(clusters) clusterList := &v1alpha1.ClusterList{Items: clusters} - db.On("ListClusters", mock.Anything).Return(clusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(clusterList, nil) // Test with replicas set to 5 replicasCount := 5 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount) appAccessor, _, _, _, _, _ := createTestApps() distributionFunction := ConsistentHashingWithBoundedLoadsDistributionFunction(clusterAccessor, appAccessor, replicasCount) assert.Equal(t, fixedShard, int64(distributionFunction(cluster))) @@ -381,7 +381,7 @@ func TestConsistentHashingWhenClusterWithFixedShard(t *testing.T) { func TestGetShardByIndexModuloReplicasCountDistributionFunction(t *testing.T) { clusters, db, cluster1, cluster2, _, _, _ := createTestClusters() replicasCount := 2 - db.On("GetApplicationControllerReplicas").Return(replicasCount) + db.EXPECT().GetApplicationControllerReplicas().Return(replicasCount).Maybe() distributionFunction := RoundRobinDistributionFunction(clusters, replicasCount) // Test that the function returns the correct shard for cluster1 and cluster2 @@ -419,7 +419,7 @@ func TestInferShard(t *testing.T) { } func createTestClusters() (clusterAccessor, *dbmocks.ArgoDB, v1alpha1.Cluster, v1alpha1.Cluster, v1alpha1.Cluster, v1alpha1.Cluster, v1alpha1.Cluster) { - db := dbmocks.ArgoDB{} + db := &dbmocks.ArgoDB{} cluster1 := createCluster("cluster1", "1") cluster2 := createCluster("cluster2", "2") cluster3 := createCluster("cluster3", "3") @@ -428,10 +428,10 @@ func createTestClusters() (clusterAccessor, *dbmocks.ArgoDB, v1alpha1.Cluster, v clusters := []v1alpha1.Cluster{cluster1, cluster2, cluster3, cluster4, cluster5} - db.On("ListClusters", mock.Anything).Return(&v1alpha1.ClusterList{Items: []v1alpha1.Cluster{ + db.EXPECT().ListClusters(mock.Anything).Return(&v1alpha1.ClusterList{Items: []v1alpha1.Cluster{ cluster1, cluster2, cluster3, cluster4, cluster5, }}, nil) - return getClusterAccessor(clusters), &db, cluster1, cluster2, cluster3, cluster4, cluster5 + return getClusterAccessor(clusters), db, cluster1, cluster2, cluster3, cluster4, cluster5 } func getClusterAccessor(clusters []v1alpha1.Cluster) clusterAccessor { diff --git a/controller/sharding/shuffle_test.go b/controller/sharding/shuffle_test.go index 0fa6f5f548..37039f50ec 100644 --- a/controller/sharding/shuffle_test.go +++ b/controller/sharding/shuffle_test.go @@ -16,14 +16,14 @@ import ( func TestLargeShuffle(t *testing.T) { t.Skip() - db := dbmocks.ArgoDB{} + db := &dbmocks.ArgoDB{} clusterList := &v1alpha1.ClusterList{Items: []v1alpha1.Cluster{}} for i := 0; i < math.MaxInt/4096; i += 256 { // fmt.Fprintf(os.Stdout, "%d", i) cluster := createCluster(fmt.Sprintf("cluster-%d", i), strconv.Itoa(i)) clusterList.Items = append(clusterList.Items, cluster) } - db.On("ListClusters", mock.Anything).Return(clusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(clusterList, nil) clusterAccessor := getClusterAccessor(clusterList.Items) // Test with replicas set to 256 replicasCount := 256 @@ -36,7 +36,7 @@ func TestLargeShuffle(t *testing.T) { func TestShuffle(t *testing.T) { t.Skip() - db := dbmocks.ArgoDB{} + db := &dbmocks.ArgoDB{} cluster1 := createCluster("cluster1", "10") cluster2 := createCluster("cluster2", "20") cluster3 := createCluster("cluster3", "30") @@ -46,7 +46,7 @@ func TestShuffle(t *testing.T) { cluster25 := createCluster("cluster6", "25") clusterList := &v1alpha1.ClusterList{Items: []v1alpha1.Cluster{cluster1, cluster2, cluster3, cluster4, cluster5, cluster6}} - db.On("ListClusters", mock.Anything).Return(clusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(clusterList, nil) clusterAccessor := getClusterAccessor(clusterList.Items) // Test with replicas set to 3 t.Setenv(common.EnvControllerReplicas, "3") diff --git a/controller/state_test.go b/controller/state_test.go index 2fd6112979..8831ed700e 100644 --- a/controller/state_test.go +++ b/controller/state_test.go @@ -1807,10 +1807,10 @@ func Test_normalizeClusterScopeTracking(t *testing.T) { Namespace: "test", }, }) - c := cachemocks.ClusterCache{} - c.On("IsNamespaced", mock.Anything).Return(false, nil) + c := &cachemocks.ClusterCache{} + c.EXPECT().IsNamespaced(mock.Anything).Return(false, nil) var called bool - err := normalizeClusterScopeTracking([]*unstructured.Unstructured{obj}, &c, func(u *unstructured.Unstructured) error { + err := normalizeClusterScopeTracking([]*unstructured.Unstructured{obj}, c, func(u *unstructured.Unstructured) error { // We expect that the normalization function will call this callback with an obj that has had the namespace set // to empty. called = true diff --git a/gitops-engine/pkg/cache/mocks/ClusterCache.go b/gitops-engine/pkg/cache/mocks/ClusterCache.go index b0179f85ab..e51c162af5 100644 --- a/gitops-engine/pkg/cache/mocks/ClusterCache.go +++ b/gitops-engine/pkg/cache/mocks/ClusterCache.go @@ -1,302 +1,19 @@ -// Code generated by mockery v2.43.2. DO NOT EDIT. +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify package mocks import ( - cache "github.com/argoproj/gitops-engine/pkg/cache" - kube "github.com/argoproj/gitops-engine/pkg/utils/kube" - - managedfields "k8s.io/apimachinery/pkg/util/managedfields" - + "github.com/argoproj/gitops-engine/pkg/cache" + "github.com/argoproj/gitops-engine/pkg/utils/kube" mock "github.com/stretchr/testify/mock" - - openapi "k8s.io/kubectl/pkg/util/openapi" - - schema "k8s.io/apimachinery/pkg/runtime/schema" - - unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/managedfields" + "k8s.io/kubectl/pkg/util/openapi" ) -// ClusterCache is an autogenerated mock type for the ClusterCache type -type ClusterCache struct { - mock.Mock -} - -// EnsureSynced provides a mock function with given fields: -func (_m *ClusterCache) EnsureSynced() error { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for EnsureSynced") - } - - var r0 error - if rf, ok := ret.Get(0).(func() error); ok { - r0 = rf() - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// FindResources provides a mock function with given fields: namespace, predicates -func (_m *ClusterCache) FindResources(namespace string, predicates ...func(*cache.Resource) bool) map[kube.ResourceKey]*cache.Resource { - _va := make([]interface{}, len(predicates)) - for _i := range predicates { - _va[_i] = predicates[_i] - } - var _ca []interface{} - _ca = append(_ca, namespace) - _ca = append(_ca, _va...) - ret := _m.Called(_ca...) - - if len(ret) == 0 { - panic("no return value specified for FindResources") - } - - var r0 map[kube.ResourceKey]*cache.Resource - if rf, ok := ret.Get(0).(func(string, ...func(*cache.Resource) bool) map[kube.ResourceKey]*cache.Resource); ok { - r0 = rf(namespace, predicates...) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(map[kube.ResourceKey]*cache.Resource) - } - } - - return r0 -} - -// GetAPIResources provides a mock function with given fields: -func (_m *ClusterCache) GetAPIResources() []kube.APIResourceInfo { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetAPIResources") - } - - var r0 []kube.APIResourceInfo - if rf, ok := ret.Get(0).(func() []kube.APIResourceInfo); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]kube.APIResourceInfo) - } - } - - return r0 -} - -// GetClusterInfo provides a mock function with given fields: -func (_m *ClusterCache) GetClusterInfo() cache.ClusterInfo { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetClusterInfo") - } - - var r0 cache.ClusterInfo - if rf, ok := ret.Get(0).(func() cache.ClusterInfo); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(cache.ClusterInfo) - } - - return r0 -} - -// GetGVKParser provides a mock function with given fields: -func (_m *ClusterCache) GetGVKParser() *managedfields.GvkParser { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetGVKParser") - } - - var r0 *managedfields.GvkParser - if rf, ok := ret.Get(0).(func() *managedfields.GvkParser); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*managedfields.GvkParser) - } - } - - return r0 -} - -// GetManagedLiveObjs provides a mock function with given fields: targetObjs, isManaged -func (_m *ClusterCache) GetManagedLiveObjs(targetObjs []*unstructured.Unstructured, isManaged func(*cache.Resource) bool) (map[kube.ResourceKey]*unstructured.Unstructured, error) { - ret := _m.Called(targetObjs, isManaged) - - if len(ret) == 0 { - panic("no return value specified for GetManagedLiveObjs") - } - - var r0 map[kube.ResourceKey]*unstructured.Unstructured - var r1 error - if rf, ok := ret.Get(0).(func([]*unstructured.Unstructured, func(*cache.Resource) bool) (map[kube.ResourceKey]*unstructured.Unstructured, error)); ok { - return rf(targetObjs, isManaged) - } - if rf, ok := ret.Get(0).(func([]*unstructured.Unstructured, func(*cache.Resource) bool) map[kube.ResourceKey]*unstructured.Unstructured); ok { - r0 = rf(targetObjs, isManaged) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(map[kube.ResourceKey]*unstructured.Unstructured) - } - } - - if rf, ok := ret.Get(1).(func([]*unstructured.Unstructured, func(*cache.Resource) bool) error); ok { - r1 = rf(targetObjs, isManaged) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetOpenAPISchema provides a mock function with given fields: -func (_m *ClusterCache) GetOpenAPISchema() openapi.Resources { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetOpenAPISchema") - } - - var r0 openapi.Resources - if rf, ok := ret.Get(0).(func() openapi.Resources); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(openapi.Resources) - } - } - - return r0 -} - -// GetServerVersion provides a mock function with given fields: -func (_m *ClusterCache) GetServerVersion() string { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetServerVersion") - } - - var r0 string - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - return r0 -} - -// Invalidate provides a mock function with given fields: opts -func (_m *ClusterCache) Invalidate(opts ...cache.UpdateSettingsFunc) { - _va := make([]interface{}, len(opts)) - for _i := range opts { - _va[_i] = opts[_i] - } - var _ca []interface{} - _ca = append(_ca, _va...) - _m.Called(_ca...) -} - -// IsNamespaced provides a mock function with given fields: gk -func (_m *ClusterCache) IsNamespaced(gk schema.GroupKind) (bool, error) { - ret := _m.Called(gk) - - if len(ret) == 0 { - panic("no return value specified for IsNamespaced") - } - - var r0 bool - var r1 error - if rf, ok := ret.Get(0).(func(schema.GroupKind) (bool, error)); ok { - return rf(gk) - } - if rf, ok := ret.Get(0).(func(schema.GroupKind) bool); ok { - r0 = rf(gk) - } else { - r0 = ret.Get(0).(bool) - } - - if rf, ok := ret.Get(1).(func(schema.GroupKind) error); ok { - r1 = rf(gk) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// IterateHierarchyV2 provides a mock function with given fields: keys, action -func (_m *ClusterCache) IterateHierarchyV2(keys []kube.ResourceKey, action func(*cache.Resource, map[kube.ResourceKey]*cache.Resource) bool) { - _m.Called(keys, action) -} - -// OnEvent provides a mock function with given fields: handler -func (_m *ClusterCache) OnEvent(handler cache.OnEventHandler) cache.Unsubscribe { - ret := _m.Called(handler) - - if len(ret) == 0 { - panic("no return value specified for OnEvent") - } - - var r0 cache.Unsubscribe - if rf, ok := ret.Get(0).(func(cache.OnEventHandler) cache.Unsubscribe); ok { - r0 = rf(handler) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(cache.Unsubscribe) - } - } - - return r0 -} - -// OnProcessEventsHandler provides a mock function with given fields: handler -func (_m *ClusterCache) OnProcessEventsHandler(handler cache.OnProcessEventsHandler) cache.Unsubscribe { - ret := _m.Called(handler) - - if len(ret) == 0 { - panic("no return value specified for OnProcessEventsHandler") - } - - var r0 cache.Unsubscribe - if rf, ok := ret.Get(0).(func(cache.OnProcessEventsHandler) cache.Unsubscribe); ok { - r0 = rf(handler) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(cache.Unsubscribe) - } - } - - return r0 -} - -// OnResourceUpdated provides a mock function with given fields: handler -func (_m *ClusterCache) OnResourceUpdated(handler cache.OnResourceUpdatedHandler) cache.Unsubscribe { - ret := _m.Called(handler) - - if len(ret) == 0 { - panic("no return value specified for OnResourceUpdated") - } - - var r0 cache.Unsubscribe - if rf, ok := ret.Get(0).(func(cache.OnResourceUpdatedHandler) cache.Unsubscribe); ok { - r0 = rf(handler) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(cache.Unsubscribe) - } - } - - return r0 -} - // NewClusterCache creates a new instance of ClusterCache. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewClusterCache(t interface { @@ -310,3 +27,743 @@ func NewClusterCache(t interface { return mock } + +// ClusterCache is an autogenerated mock type for the ClusterCache type +type ClusterCache struct { + mock.Mock +} + +type ClusterCache_Expecter struct { + mock *mock.Mock +} + +func (_m *ClusterCache) EXPECT() *ClusterCache_Expecter { + return &ClusterCache_Expecter{mock: &_m.Mock} +} + +// EnsureSynced provides a mock function for the type ClusterCache +func (_mock *ClusterCache) EnsureSynced() error { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for EnsureSynced") + } + + var r0 error + if returnFunc, ok := ret.Get(0).(func() error); ok { + r0 = returnFunc() + } else { + r0 = ret.Error(0) + } + return r0 +} + +// ClusterCache_EnsureSynced_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'EnsureSynced' +type ClusterCache_EnsureSynced_Call struct { + *mock.Call +} + +// EnsureSynced is a helper method to define mock.On call +func (_e *ClusterCache_Expecter) EnsureSynced() *ClusterCache_EnsureSynced_Call { + return &ClusterCache_EnsureSynced_Call{Call: _e.mock.On("EnsureSynced")} +} + +func (_c *ClusterCache_EnsureSynced_Call) Run(run func()) *ClusterCache_EnsureSynced_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ClusterCache_EnsureSynced_Call) Return(err error) *ClusterCache_EnsureSynced_Call { + _c.Call.Return(err) + return _c +} + +func (_c *ClusterCache_EnsureSynced_Call) RunAndReturn(run func() error) *ClusterCache_EnsureSynced_Call { + _c.Call.Return(run) + return _c +} + +// FindResources provides a mock function for the type ClusterCache +func (_mock *ClusterCache) FindResources(namespace string, predicates ...func(r *cache.Resource) bool) map[kube.ResourceKey]*cache.Resource { + // func(r *cache.Resource) bool + _va := make([]interface{}, len(predicates)) + for _i := range predicates { + _va[_i] = predicates[_i] + } + var _ca []interface{} + _ca = append(_ca, namespace) + _ca = append(_ca, _va...) + ret := _mock.Called(_ca...) + + if len(ret) == 0 { + panic("no return value specified for FindResources") + } + + var r0 map[kube.ResourceKey]*cache.Resource + if returnFunc, ok := ret.Get(0).(func(string, ...func(r *cache.Resource) bool) map[kube.ResourceKey]*cache.Resource); ok { + r0 = returnFunc(namespace, predicates...) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[kube.ResourceKey]*cache.Resource) + } + } + return r0 +} + +// ClusterCache_FindResources_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'FindResources' +type ClusterCache_FindResources_Call struct { + *mock.Call +} + +// FindResources is a helper method to define mock.On call +// - namespace string +// - predicates ...func(r *cache.Resource) bool +func (_e *ClusterCache_Expecter) FindResources(namespace interface{}, predicates ...interface{}) *ClusterCache_FindResources_Call { + return &ClusterCache_FindResources_Call{Call: _e.mock.On("FindResources", + append([]interface{}{namespace}, predicates...)...)} +} + +func (_c *ClusterCache_FindResources_Call) Run(run func(namespace string, predicates ...func(r *cache.Resource) bool)) *ClusterCache_FindResources_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 string + if args[0] != nil { + arg0 = args[0].(string) + } + var arg1 []func(r *cache.Resource) bool + variadicArgs := make([]func(r *cache.Resource) bool, len(args)-1) + for i, a := range args[1:] { + if a != nil { + variadicArgs[i] = a.(func(r *cache.Resource) bool) + } + } + arg1 = variadicArgs + run( + arg0, + arg1..., + ) + }) + return _c +} + +func (_c *ClusterCache_FindResources_Call) Return(resourceKeyToResource map[kube.ResourceKey]*cache.Resource) *ClusterCache_FindResources_Call { + _c.Call.Return(resourceKeyToResource) + return _c +} + +func (_c *ClusterCache_FindResources_Call) RunAndReturn(run func(namespace string, predicates ...func(r *cache.Resource) bool) map[kube.ResourceKey]*cache.Resource) *ClusterCache_FindResources_Call { + _c.Call.Return(run) + return _c +} + +// GetAPIResources provides a mock function for the type ClusterCache +func (_mock *ClusterCache) GetAPIResources() []kube.APIResourceInfo { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for GetAPIResources") + } + + var r0 []kube.APIResourceInfo + if returnFunc, ok := ret.Get(0).(func() []kube.APIResourceInfo); ok { + r0 = returnFunc() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]kube.APIResourceInfo) + } + } + return r0 +} + +// ClusterCache_GetAPIResources_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetAPIResources' +type ClusterCache_GetAPIResources_Call struct { + *mock.Call +} + +// GetAPIResources is a helper method to define mock.On call +func (_e *ClusterCache_Expecter) GetAPIResources() *ClusterCache_GetAPIResources_Call { + return &ClusterCache_GetAPIResources_Call{Call: _e.mock.On("GetAPIResources")} +} + +func (_c *ClusterCache_GetAPIResources_Call) Run(run func()) *ClusterCache_GetAPIResources_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ClusterCache_GetAPIResources_Call) Return(aPIResourceInfos []kube.APIResourceInfo) *ClusterCache_GetAPIResources_Call { + _c.Call.Return(aPIResourceInfos) + return _c +} + +func (_c *ClusterCache_GetAPIResources_Call) RunAndReturn(run func() []kube.APIResourceInfo) *ClusterCache_GetAPIResources_Call { + _c.Call.Return(run) + return _c +} + +// GetClusterInfo provides a mock function for the type ClusterCache +func (_mock *ClusterCache) GetClusterInfo() cache.ClusterInfo { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for GetClusterInfo") + } + + var r0 cache.ClusterInfo + if returnFunc, ok := ret.Get(0).(func() cache.ClusterInfo); ok { + r0 = returnFunc() + } else { + r0 = ret.Get(0).(cache.ClusterInfo) + } + return r0 +} + +// ClusterCache_GetClusterInfo_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetClusterInfo' +type ClusterCache_GetClusterInfo_Call struct { + *mock.Call +} + +// GetClusterInfo is a helper method to define mock.On call +func (_e *ClusterCache_Expecter) GetClusterInfo() *ClusterCache_GetClusterInfo_Call { + return &ClusterCache_GetClusterInfo_Call{Call: _e.mock.On("GetClusterInfo")} +} + +func (_c *ClusterCache_GetClusterInfo_Call) Run(run func()) *ClusterCache_GetClusterInfo_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ClusterCache_GetClusterInfo_Call) Return(clusterInfo cache.ClusterInfo) *ClusterCache_GetClusterInfo_Call { + _c.Call.Return(clusterInfo) + return _c +} + +func (_c *ClusterCache_GetClusterInfo_Call) RunAndReturn(run func() cache.ClusterInfo) *ClusterCache_GetClusterInfo_Call { + _c.Call.Return(run) + return _c +} + +// GetGVKParser provides a mock function for the type ClusterCache +func (_mock *ClusterCache) GetGVKParser() *managedfields.GvkParser { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for GetGVKParser") + } + + var r0 *managedfields.GvkParser + if returnFunc, ok := ret.Get(0).(func() *managedfields.GvkParser); ok { + r0 = returnFunc() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*managedfields.GvkParser) + } + } + return r0 +} + +// ClusterCache_GetGVKParser_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetGVKParser' +type ClusterCache_GetGVKParser_Call struct { + *mock.Call +} + +// GetGVKParser is a helper method to define mock.On call +func (_e *ClusterCache_Expecter) GetGVKParser() *ClusterCache_GetGVKParser_Call { + return &ClusterCache_GetGVKParser_Call{Call: _e.mock.On("GetGVKParser")} +} + +func (_c *ClusterCache_GetGVKParser_Call) Run(run func()) *ClusterCache_GetGVKParser_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ClusterCache_GetGVKParser_Call) Return(gvkParser *managedfields.GvkParser) *ClusterCache_GetGVKParser_Call { + _c.Call.Return(gvkParser) + return _c +} + +func (_c *ClusterCache_GetGVKParser_Call) RunAndReturn(run func() *managedfields.GvkParser) *ClusterCache_GetGVKParser_Call { + _c.Call.Return(run) + return _c +} + +// GetManagedLiveObjs provides a mock function for the type ClusterCache +func (_mock *ClusterCache) GetManagedLiveObjs(targetObjs []*unstructured.Unstructured, isManaged func(r *cache.Resource) bool) (map[kube.ResourceKey]*unstructured.Unstructured, error) { + ret := _mock.Called(targetObjs, isManaged) + + if len(ret) == 0 { + panic("no return value specified for GetManagedLiveObjs") + } + + var r0 map[kube.ResourceKey]*unstructured.Unstructured + var r1 error + if returnFunc, ok := ret.Get(0).(func([]*unstructured.Unstructured, func(r *cache.Resource) bool) (map[kube.ResourceKey]*unstructured.Unstructured, error)); ok { + return returnFunc(targetObjs, isManaged) + } + if returnFunc, ok := ret.Get(0).(func([]*unstructured.Unstructured, func(r *cache.Resource) bool) map[kube.ResourceKey]*unstructured.Unstructured); ok { + r0 = returnFunc(targetObjs, isManaged) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(map[kube.ResourceKey]*unstructured.Unstructured) + } + } + if returnFunc, ok := ret.Get(1).(func([]*unstructured.Unstructured, func(r *cache.Resource) bool) error); ok { + r1 = returnFunc(targetObjs, isManaged) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// ClusterCache_GetManagedLiveObjs_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetManagedLiveObjs' +type ClusterCache_GetManagedLiveObjs_Call struct { + *mock.Call +} + +// GetManagedLiveObjs is a helper method to define mock.On call +// - targetObjs []*unstructured.Unstructured +// - isManaged func(r *cache.Resource) bool +func (_e *ClusterCache_Expecter) GetManagedLiveObjs(targetObjs interface{}, isManaged interface{}) *ClusterCache_GetManagedLiveObjs_Call { + return &ClusterCache_GetManagedLiveObjs_Call{Call: _e.mock.On("GetManagedLiveObjs", targetObjs, isManaged)} +} + +func (_c *ClusterCache_GetManagedLiveObjs_Call) Run(run func(targetObjs []*unstructured.Unstructured, isManaged func(r *cache.Resource) bool)) *ClusterCache_GetManagedLiveObjs_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 []*unstructured.Unstructured + if args[0] != nil { + arg0 = args[0].([]*unstructured.Unstructured) + } + var arg1 func(r *cache.Resource) bool + if args[1] != nil { + arg1 = args[1].(func(r *cache.Resource) bool) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *ClusterCache_GetManagedLiveObjs_Call) Return(resourceKeyToUnstructured map[kube.ResourceKey]*unstructured.Unstructured, err error) *ClusterCache_GetManagedLiveObjs_Call { + _c.Call.Return(resourceKeyToUnstructured, err) + return _c +} + +func (_c *ClusterCache_GetManagedLiveObjs_Call) RunAndReturn(run func(targetObjs []*unstructured.Unstructured, isManaged func(r *cache.Resource) bool) (map[kube.ResourceKey]*unstructured.Unstructured, error)) *ClusterCache_GetManagedLiveObjs_Call { + _c.Call.Return(run) + return _c +} + +// GetOpenAPISchema provides a mock function for the type ClusterCache +func (_mock *ClusterCache) GetOpenAPISchema() openapi.Resources { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for GetOpenAPISchema") + } + + var r0 openapi.Resources + if returnFunc, ok := ret.Get(0).(func() openapi.Resources); ok { + r0 = returnFunc() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(openapi.Resources) + } + } + return r0 +} + +// ClusterCache_GetOpenAPISchema_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetOpenAPISchema' +type ClusterCache_GetOpenAPISchema_Call struct { + *mock.Call +} + +// GetOpenAPISchema is a helper method to define mock.On call +func (_e *ClusterCache_Expecter) GetOpenAPISchema() *ClusterCache_GetOpenAPISchema_Call { + return &ClusterCache_GetOpenAPISchema_Call{Call: _e.mock.On("GetOpenAPISchema")} +} + +func (_c *ClusterCache_GetOpenAPISchema_Call) Run(run func()) *ClusterCache_GetOpenAPISchema_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ClusterCache_GetOpenAPISchema_Call) Return(resources openapi.Resources) *ClusterCache_GetOpenAPISchema_Call { + _c.Call.Return(resources) + return _c +} + +func (_c *ClusterCache_GetOpenAPISchema_Call) RunAndReturn(run func() openapi.Resources) *ClusterCache_GetOpenAPISchema_Call { + _c.Call.Return(run) + return _c +} + +// GetServerVersion provides a mock function for the type ClusterCache +func (_mock *ClusterCache) GetServerVersion() string { + ret := _mock.Called() + + if len(ret) == 0 { + panic("no return value specified for GetServerVersion") + } + + var r0 string + if returnFunc, ok := ret.Get(0).(func() string); ok { + r0 = returnFunc() + } else { + r0 = ret.Get(0).(string) + } + return r0 +} + +// ClusterCache_GetServerVersion_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetServerVersion' +type ClusterCache_GetServerVersion_Call struct { + *mock.Call +} + +// GetServerVersion is a helper method to define mock.On call +func (_e *ClusterCache_Expecter) GetServerVersion() *ClusterCache_GetServerVersion_Call { + return &ClusterCache_GetServerVersion_Call{Call: _e.mock.On("GetServerVersion")} +} + +func (_c *ClusterCache_GetServerVersion_Call) Run(run func()) *ClusterCache_GetServerVersion_Call { + _c.Call.Run(func(args mock.Arguments) { + run() + }) + return _c +} + +func (_c *ClusterCache_GetServerVersion_Call) Return(s string) *ClusterCache_GetServerVersion_Call { + _c.Call.Return(s) + return _c +} + +func (_c *ClusterCache_GetServerVersion_Call) RunAndReturn(run func() string) *ClusterCache_GetServerVersion_Call { + _c.Call.Return(run) + return _c +} + +// Invalidate provides a mock function for the type ClusterCache +func (_mock *ClusterCache) Invalidate(opts ...cache.UpdateSettingsFunc) { + // cache.UpdateSettingsFunc + _va := make([]interface{}, len(opts)) + for _i := range opts { + _va[_i] = opts[_i] + } + var _ca []interface{} + _ca = append(_ca, _va...) + _mock.Called(_ca...) + return +} + +// ClusterCache_Invalidate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Invalidate' +type ClusterCache_Invalidate_Call struct { + *mock.Call +} + +// Invalidate is a helper method to define mock.On call +// - opts ...cache.UpdateSettingsFunc +func (_e *ClusterCache_Expecter) Invalidate(opts ...interface{}) *ClusterCache_Invalidate_Call { + return &ClusterCache_Invalidate_Call{Call: _e.mock.On("Invalidate", + append([]interface{}{}, opts...)...)} +} + +func (_c *ClusterCache_Invalidate_Call) Run(run func(opts ...cache.UpdateSettingsFunc)) *ClusterCache_Invalidate_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 []cache.UpdateSettingsFunc + variadicArgs := make([]cache.UpdateSettingsFunc, len(args)-0) + for i, a := range args[0:] { + if a != nil { + variadicArgs[i] = a.(cache.UpdateSettingsFunc) + } + } + arg0 = variadicArgs + run( + arg0..., + ) + }) + return _c +} + +func (_c *ClusterCache_Invalidate_Call) Return() *ClusterCache_Invalidate_Call { + _c.Call.Return() + return _c +} + +func (_c *ClusterCache_Invalidate_Call) RunAndReturn(run func(opts ...cache.UpdateSettingsFunc)) *ClusterCache_Invalidate_Call { + _c.Run(run) + return _c +} + +// IsNamespaced provides a mock function for the type ClusterCache +func (_mock *ClusterCache) IsNamespaced(gk schema.GroupKind) (bool, error) { + ret := _mock.Called(gk) + + if len(ret) == 0 { + panic("no return value specified for IsNamespaced") + } + + var r0 bool + var r1 error + if returnFunc, ok := ret.Get(0).(func(schema.GroupKind) (bool, error)); ok { + return returnFunc(gk) + } + if returnFunc, ok := ret.Get(0).(func(schema.GroupKind) bool); ok { + r0 = returnFunc(gk) + } else { + r0 = ret.Get(0).(bool) + } + if returnFunc, ok := ret.Get(1).(func(schema.GroupKind) error); ok { + r1 = returnFunc(gk) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// ClusterCache_IsNamespaced_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IsNamespaced' +type ClusterCache_IsNamespaced_Call struct { + *mock.Call +} + +// IsNamespaced is a helper method to define mock.On call +// - gk schema.GroupKind +func (_e *ClusterCache_Expecter) IsNamespaced(gk interface{}) *ClusterCache_IsNamespaced_Call { + return &ClusterCache_IsNamespaced_Call{Call: _e.mock.On("IsNamespaced", gk)} +} + +func (_c *ClusterCache_IsNamespaced_Call) Run(run func(gk schema.GroupKind)) *ClusterCache_IsNamespaced_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 schema.GroupKind + if args[0] != nil { + arg0 = args[0].(schema.GroupKind) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *ClusterCache_IsNamespaced_Call) Return(b bool, err error) *ClusterCache_IsNamespaced_Call { + _c.Call.Return(b, err) + return _c +} + +func (_c *ClusterCache_IsNamespaced_Call) RunAndReturn(run func(gk schema.GroupKind) (bool, error)) *ClusterCache_IsNamespaced_Call { + _c.Call.Return(run) + return _c +} + +// IterateHierarchyV2 provides a mock function for the type ClusterCache +func (_mock *ClusterCache) IterateHierarchyV2(keys []kube.ResourceKey, action func(resource *cache.Resource, namespaceResources map[kube.ResourceKey]*cache.Resource) bool) { + _mock.Called(keys, action) + return +} + +// ClusterCache_IterateHierarchyV2_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'IterateHierarchyV2' +type ClusterCache_IterateHierarchyV2_Call struct { + *mock.Call +} + +// IterateHierarchyV2 is a helper method to define mock.On call +// - keys []kube.ResourceKey +// - action func(resource *cache.Resource, namespaceResources map[kube.ResourceKey]*cache.Resource) bool +func (_e *ClusterCache_Expecter) IterateHierarchyV2(keys interface{}, action interface{}) *ClusterCache_IterateHierarchyV2_Call { + return &ClusterCache_IterateHierarchyV2_Call{Call: _e.mock.On("IterateHierarchyV2", keys, action)} +} + +func (_c *ClusterCache_IterateHierarchyV2_Call) Run(run func(keys []kube.ResourceKey, action func(resource *cache.Resource, namespaceResources map[kube.ResourceKey]*cache.Resource) bool)) *ClusterCache_IterateHierarchyV2_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 []kube.ResourceKey + if args[0] != nil { + arg0 = args[0].([]kube.ResourceKey) + } + var arg1 func(resource *cache.Resource, namespaceResources map[kube.ResourceKey]*cache.Resource) bool + if args[1] != nil { + arg1 = args[1].(func(resource *cache.Resource, namespaceResources map[kube.ResourceKey]*cache.Resource) bool) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *ClusterCache_IterateHierarchyV2_Call) Return() *ClusterCache_IterateHierarchyV2_Call { + _c.Call.Return() + return _c +} + +func (_c *ClusterCache_IterateHierarchyV2_Call) RunAndReturn(run func(keys []kube.ResourceKey, action func(resource *cache.Resource, namespaceResources map[kube.ResourceKey]*cache.Resource) bool)) *ClusterCache_IterateHierarchyV2_Call { + _c.Run(run) + return _c +} + +// OnEvent provides a mock function for the type ClusterCache +func (_mock *ClusterCache) OnEvent(handler cache.OnEventHandler) cache.Unsubscribe { + ret := _mock.Called(handler) + + if len(ret) == 0 { + panic("no return value specified for OnEvent") + } + + var r0 cache.Unsubscribe + if returnFunc, ok := ret.Get(0).(func(cache.OnEventHandler) cache.Unsubscribe); ok { + r0 = returnFunc(handler) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(cache.Unsubscribe) + } + } + return r0 +} + +// ClusterCache_OnEvent_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'OnEvent' +type ClusterCache_OnEvent_Call struct { + *mock.Call +} + +// OnEvent is a helper method to define mock.On call +// - handler cache.OnEventHandler +func (_e *ClusterCache_Expecter) OnEvent(handler interface{}) *ClusterCache_OnEvent_Call { + return &ClusterCache_OnEvent_Call{Call: _e.mock.On("OnEvent", handler)} +} + +func (_c *ClusterCache_OnEvent_Call) Run(run func(handler cache.OnEventHandler)) *ClusterCache_OnEvent_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 cache.OnEventHandler + if args[0] != nil { + arg0 = args[0].(cache.OnEventHandler) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *ClusterCache_OnEvent_Call) Return(unsubscribe cache.Unsubscribe) *ClusterCache_OnEvent_Call { + _c.Call.Return(unsubscribe) + return _c +} + +func (_c *ClusterCache_OnEvent_Call) RunAndReturn(run func(handler cache.OnEventHandler) cache.Unsubscribe) *ClusterCache_OnEvent_Call { + _c.Call.Return(run) + return _c +} + +// OnProcessEventsHandler provides a mock function for the type ClusterCache +func (_mock *ClusterCache) OnProcessEventsHandler(handler cache.OnProcessEventsHandler) cache.Unsubscribe { + ret := _mock.Called(handler) + + if len(ret) == 0 { + panic("no return value specified for OnProcessEventsHandler") + } + + var r0 cache.Unsubscribe + if returnFunc, ok := ret.Get(0).(func(cache.OnProcessEventsHandler) cache.Unsubscribe); ok { + r0 = returnFunc(handler) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(cache.Unsubscribe) + } + } + return r0 +} + +// ClusterCache_OnProcessEventsHandler_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'OnProcessEventsHandler' +type ClusterCache_OnProcessEventsHandler_Call struct { + *mock.Call +} + +// OnProcessEventsHandler is a helper method to define mock.On call +// - handler cache.OnProcessEventsHandler +func (_e *ClusterCache_Expecter) OnProcessEventsHandler(handler interface{}) *ClusterCache_OnProcessEventsHandler_Call { + return &ClusterCache_OnProcessEventsHandler_Call{Call: _e.mock.On("OnProcessEventsHandler", handler)} +} + +func (_c *ClusterCache_OnProcessEventsHandler_Call) Run(run func(handler cache.OnProcessEventsHandler)) *ClusterCache_OnProcessEventsHandler_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 cache.OnProcessEventsHandler + if args[0] != nil { + arg0 = args[0].(cache.OnProcessEventsHandler) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *ClusterCache_OnProcessEventsHandler_Call) Return(unsubscribe cache.Unsubscribe) *ClusterCache_OnProcessEventsHandler_Call { + _c.Call.Return(unsubscribe) + return _c +} + +func (_c *ClusterCache_OnProcessEventsHandler_Call) RunAndReturn(run func(handler cache.OnProcessEventsHandler) cache.Unsubscribe) *ClusterCache_OnProcessEventsHandler_Call { + _c.Call.Return(run) + return _c +} + +// OnResourceUpdated provides a mock function for the type ClusterCache +func (_mock *ClusterCache) OnResourceUpdated(handler cache.OnResourceUpdatedHandler) cache.Unsubscribe { + ret := _mock.Called(handler) + + if len(ret) == 0 { + panic("no return value specified for OnResourceUpdated") + } + + var r0 cache.Unsubscribe + if returnFunc, ok := ret.Get(0).(func(cache.OnResourceUpdatedHandler) cache.Unsubscribe); ok { + r0 = returnFunc(handler) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(cache.Unsubscribe) + } + } + return r0 +} + +// ClusterCache_OnResourceUpdated_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'OnResourceUpdated' +type ClusterCache_OnResourceUpdated_Call struct { + *mock.Call +} + +// OnResourceUpdated is a helper method to define mock.On call +// - handler cache.OnResourceUpdatedHandler +func (_e *ClusterCache_Expecter) OnResourceUpdated(handler interface{}) *ClusterCache_OnResourceUpdated_Call { + return &ClusterCache_OnResourceUpdated_Call{Call: _e.mock.On("OnResourceUpdated", handler)} +} + +func (_c *ClusterCache_OnResourceUpdated_Call) Run(run func(handler cache.OnResourceUpdatedHandler)) *ClusterCache_OnResourceUpdated_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 cache.OnResourceUpdatedHandler + if args[0] != nil { + arg0 = args[0].(cache.OnResourceUpdatedHandler) + } + run( + arg0, + ) + }) + return _c +} + +func (_c *ClusterCache_OnResourceUpdated_Call) Return(unsubscribe cache.Unsubscribe) *ClusterCache_OnResourceUpdated_Call { + _c.Call.Return(unsubscribe) + return _c +} + +func (_c *ClusterCache_OnResourceUpdated_Call) RunAndReturn(run func(handler cache.OnResourceUpdatedHandler) cache.Unsubscribe) *ClusterCache_OnResourceUpdated_Call { + _c.Call.Return(run) + return _c +} diff --git a/gitops-engine/pkg/diff/diff_test.go b/gitops-engine/pkg/diff/diff_test.go index 95c354dc28..5f6177d9c4 100644 --- a/gitops-engine/pkg/diff/diff_test.go +++ b/gitops-engine/pkg/diff/diff_test.go @@ -891,10 +891,8 @@ func TestServerSideDiff(t *testing.T) { manager := "argocd-controller" dryRunner := mocks.NewServerSideDryRunner(t) - dryRunner.On("Run", mock.Anything, mock.AnythingOfType("*unstructured.Unstructured"), manager). - Return(func(_ context.Context, _ *unstructured.Unstructured, _ string) (string, error) { - return predictedLive, nil - }) + dryRunner.EXPECT().Run(mock.Anything, mock.AnythingOfType("*unstructured.Unstructured"), manager). + Return(predictedLive, nil) opts := []Option{ WithGVKParser(gvkParser), WithManager(manager), diff --git a/gitops-engine/pkg/diff/mocks/ServerSideDryRunner.go b/gitops-engine/pkg/diff/mocks/ServerSideDryRunner.go index 321ecf5fc9..b21bb1cb26 100644 --- a/gitops-engine/pkg/diff/mocks/ServerSideDryRunner.go +++ b/gitops-engine/pkg/diff/mocks/ServerSideDryRunner.go @@ -1,48 +1,16 @@ -// Code generated by mockery v2.38.0. DO NOT EDIT. +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify package mocks import ( - context "context" + "context" mock "github.com/stretchr/testify/mock" - - unstructured "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" ) -// ServerSideDryRunner is an autogenerated mock type for the ServerSideDryRunner type -type ServerSideDryRunner struct { - mock.Mock -} - -// Run provides a mock function with given fields: ctx, obj, manager -func (_m *ServerSideDryRunner) Run(ctx context.Context, obj *unstructured.Unstructured, manager string) (string, error) { - ret := _m.Called(ctx, obj, manager) - - if len(ret) == 0 { - panic("no return value specified for Run") - } - - var r0 string - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, *unstructured.Unstructured, string) (string, error)); ok { - return rf(ctx, obj, manager) - } - if rf, ok := ret.Get(0).(func(context.Context, *unstructured.Unstructured, string) string); ok { - r0 = rf(ctx, obj, manager) - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func(context.Context, *unstructured.Unstructured, string) error); ok { - r1 = rf(ctx, obj, manager) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // NewServerSideDryRunner creates a new instance of ServerSideDryRunner. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewServerSideDryRunner(t interface { @@ -56,3 +24,88 @@ func NewServerSideDryRunner(t interface { return mock } + +// ServerSideDryRunner is an autogenerated mock type for the ServerSideDryRunner type +type ServerSideDryRunner struct { + mock.Mock +} + +type ServerSideDryRunner_Expecter struct { + mock *mock.Mock +} + +func (_m *ServerSideDryRunner) EXPECT() *ServerSideDryRunner_Expecter { + return &ServerSideDryRunner_Expecter{mock: &_m.Mock} +} + +// Run provides a mock function for the type ServerSideDryRunner +func (_mock *ServerSideDryRunner) Run(ctx context.Context, obj *unstructured.Unstructured, manager string) (string, error) { + ret := _mock.Called(ctx, obj, manager) + + if len(ret) == 0 { + panic("no return value specified for Run") + } + + var r0 string + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, *unstructured.Unstructured, string) (string, error)); ok { + return returnFunc(ctx, obj, manager) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, *unstructured.Unstructured, string) string); ok { + r0 = returnFunc(ctx, obj, manager) + } else { + r0 = ret.Get(0).(string) + } + if returnFunc, ok := ret.Get(1).(func(context.Context, *unstructured.Unstructured, string) error); ok { + r1 = returnFunc(ctx, obj, manager) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// ServerSideDryRunner_Run_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Run' +type ServerSideDryRunner_Run_Call struct { + *mock.Call +} + +// Run is a helper method to define mock.On call +// - ctx context.Context +// - obj *unstructured.Unstructured +// - manager string +func (_e *ServerSideDryRunner_Expecter) Run(ctx interface{}, obj interface{}, manager interface{}) *ServerSideDryRunner_Run_Call { + return &ServerSideDryRunner_Run_Call{Call: _e.mock.On("Run", ctx, obj, manager)} +} + +func (_c *ServerSideDryRunner_Run_Call) Run(run func(ctx context.Context, obj *unstructured.Unstructured, manager string)) *ServerSideDryRunner_Run_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 *unstructured.Unstructured + if args[1] != nil { + arg1 = args[1].(*unstructured.Unstructured) + } + var arg2 string + if args[2] != nil { + arg2 = args[2].(string) + } + run( + arg0, + arg1, + arg2, + ) + }) + return _c +} + +func (_c *ServerSideDryRunner_Run_Call) Return(s string, err error) *ServerSideDryRunner_Run_Call { + _c.Call.Return(s, err) + return _c +} + +func (_c *ServerSideDryRunner_Run_Call) RunAndReturn(run func(ctx context.Context, obj *unstructured.Unstructured, manager string) (string, error)) *ServerSideDryRunner_Run_Call { + _c.Call.Return(run) + return _c +} diff --git a/reposerver/repository/repository_test.go b/reposerver/repository/repository_test.go index 7980b15e46..2afbd5de13 100644 --- a/reposerver/repository/repository_test.go +++ b/reposerver/repository/repository_test.go @@ -109,42 +109,41 @@ func newServiceWithMocks(t *testing.T, root string, signed bool) (*Service, *git panic(err) } return newServiceWithOpt(t, func(gitClient *gitmocks.Client, helmClient *helmmocks.Client, ociClient *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", mock.Anything).Return(false) - gitClient.On("Fetch", mock.Anything).Return(nil) - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("LsRemote", mock.Anything).Return(mock.Anything, nil) - gitClient.On("CommitSHA").Return(mock.Anything, nil) - gitClient.On("Root").Return(root) - gitClient.On("IsAnnotatedTag").Return(false) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent(mock.Anything).Return(false) + gitClient.EXPECT().Fetch(mock.Anything).Return(nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().LsRemote(mock.Anything).Return(mock.Anything, nil) + gitClient.EXPECT().CommitSHA().Return(mock.Anything, nil) + gitClient.EXPECT().Root().Return(root) + gitClient.EXPECT().IsAnnotatedTag(mock.Anything).Return(false) if signed { - gitClient.On("VerifyCommitSignature", mock.Anything).Return(testSignature, nil) + gitClient.EXPECT().VerifyCommitSignature(mock.Anything).Return(testSignature, nil) } else { - gitClient.On("VerifyCommitSignature", mock.Anything).Return("", nil) + gitClient.EXPECT().VerifyCommitSignature(mock.Anything).Return("", nil) } chart := "my-chart" oobChart := "out-of-bounds-chart" version := "1.1.0" - helmClient.On("GetIndex", mock.AnythingOfType("bool"), mock.Anything).Return(&helm.Index{Entries: map[string]helm.Entries{ + helmClient.EXPECT().GetIndex(mock.AnythingOfType("bool"), mock.Anything).Return(&helm.Index{Entries: map[string]helm.Entries{ chart: {{Version: "1.0.0"}, {Version: version}}, oobChart: {{Version: "1.0.0"}, {Version: version}}, }}, nil) - helmClient.On("GetTags", mock.Anything, mock.Anything).Return(nil, nil) - helmClient.On("ExtractChart", chart, version, false, int64(0), false).Return("./testdata/my-chart", utilio.NopCloser, nil) - helmClient.On("ExtractChart", oobChart, version, false, int64(0), false).Return("./testdata2/out-of-bounds-chart", utilio.NopCloser, nil) - helmClient.On("CleanChartCache", chart, version).Return(nil) - helmClient.On("CleanChartCache", oobChart, version).Return(nil) - helmClient.On("DependencyBuild").Return(nil) + helmClient.EXPECT().GetTags(mock.Anything, mock.Anything).Return(nil, nil) + helmClient.EXPECT().ExtractChart(chart, version, false, int64(0), false).Return("./testdata/my-chart", utilio.NopCloser, nil) + helmClient.EXPECT().ExtractChart(oobChart, version, false, int64(0), false).Return("./testdata2/out-of-bounds-chart", utilio.NopCloser, nil) + helmClient.EXPECT().CleanChartCache(chart, version).Return(nil) + helmClient.EXPECT().CleanChartCache(oobChart, version).Return(nil) - ociClient.On("GetTags", mock.Anything, mock.Anything).Return(nil) - ociClient.On("ResolveRevision", mock.Anything, mock.Anything, mock.Anything).Return("", nil) - ociClient.On("Extract", mock.Anything, mock.Anything).Return("./testdata/my-chart", utilio.NopCloser, nil) + ociClient.EXPECT().GetTags(mock.Anything, mock.Anything).Return(nil, nil) + ociClient.EXPECT().ResolveRevision(mock.Anything, mock.Anything, mock.Anything).Return("", nil) + ociClient.EXPECT().Extract(mock.Anything, mock.Anything).Return("./testdata/my-chart", utilio.NopCloser, nil) - paths.On("Add", mock.Anything, mock.Anything).Return(root, nil) - paths.On("GetPath", mock.Anything).Return(root, nil) - paths.On("GetPathIfExists", mock.Anything).Return(root, nil) - paths.On("GetPaths").Return(map[string]string{"fake-nonce": root}) + paths.EXPECT().Add(mock.Anything, mock.Anything).Return() + paths.EXPECT().GetPath(mock.Anything).Return(root, nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(root) + paths.EXPECT().GetPaths().Return(map[string]string{"fake-nonce": root}) }, root) } @@ -197,15 +196,15 @@ func newServiceWithCommitSHA(t *testing.T, root, revision string) *Service { } service, gitClient, _ := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", mock.Anything).Return(false) - gitClient.On("Fetch", mock.Anything).Return(nil) - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("LsRemote", revision).Return(revision, revisionErr) - gitClient.On("CommitSHA").Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("Root").Return(root) - paths.On("GetPath", mock.Anything).Return(root, nil) - paths.On("GetPathIfExists", mock.Anything).Return(root, nil) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent(mock.Anything).Return(false) + gitClient.EXPECT().Fetch(mock.Anything).Return(nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().LsRemote(revision).Return(revision, revisionErr) + gitClient.EXPECT().CommitSHA().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().Root().Return(root) + paths.EXPECT().GetPath(mock.Anything).Return(root, nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(root) }, root) service.newGitClient = func(_ string, _ string, _ git.Creds, _ bool, _ bool, _ string, _ string, _ ...git.ClientOpts) (client git.Client, e error) { @@ -1778,7 +1777,7 @@ func TestGetRevisionMetadata(t *testing.T) { service, gitClient, _ := newServiceWithMocks(t, "../..", false) now := time.Now() - gitClient.On("RevisionMetadata", mock.Anything).Return(&git.RevisionMetadata{ + gitClient.EXPECT().RevisionMetadata(mock.Anything).Return(&git.RevisionMetadata{ Message: "test", Author: "author", Date: now, @@ -3185,9 +3184,9 @@ func TestCheckoutRevisionPresentSkipFetch(t *testing.T) { revision := "0123456789012345678901234567890123456789" gitClient := &gitmocks.Client{} - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", revision).Return(true) - gitClient.On("Checkout", revision, mock.Anything).Return("", nil) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent(revision).Return(true) + gitClient.EXPECT().Checkout(revision, mock.Anything).Return("", nil) err := checkoutRevision(gitClient, revision, false) require.NoError(t, err) @@ -3197,10 +3196,10 @@ func TestCheckoutRevisionNotPresentCallFetch(t *testing.T) { revision := "0123456789012345678901234567890123456789" gitClient := &gitmocks.Client{} - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", revision).Return(false) - gitClient.On("Fetch", "").Return(nil) - gitClient.On("Checkout", revision, mock.Anything).Return("", nil) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent(revision).Return(false) + gitClient.EXPECT().Fetch("").Return(nil) + gitClient.EXPECT().Checkout(revision, mock.Anything).Return("", nil) err := checkoutRevision(gitClient, revision, false) require.NoError(t, err) @@ -3211,12 +3210,12 @@ func TestFetch(t *testing.T) { revision2 := "abcdefabcdefabcdefabcdefabcdefabcdefabcd" gitClient := &gitmocks.Client{} - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", revision1).Once().Return(true) - gitClient.On("IsRevisionPresent", revision2).Once().Return(false) - gitClient.On("Fetch", "").Return(nil) - gitClient.On("IsRevisionPresent", revision1).Once().Return(true) - gitClient.On("IsRevisionPresent", revision2).Once().Return(true) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent(revision1).Once().Return(true) + gitClient.EXPECT().IsRevisionPresent(revision2).Once().Return(false) + gitClient.EXPECT().Fetch("").Return(nil) + gitClient.EXPECT().IsRevisionPresent(revision1).Once().Return(true) + gitClient.EXPECT().IsRevisionPresent(revision2).Once().Return(true) err := fetch(gitClient, []string{revision1, revision2}) require.NoError(t, err) @@ -3608,11 +3607,11 @@ func TestErrorGetGitDirectories(t *testing.T) { }, want: nil, wantErr: assert.Error}, {name: "InvalidResolveRevision", fields: fields{service: func() *Service { s, _, _ := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("LsRemote", mock.Anything).Return("", errors.New("ah error")) - gitClient.On("Root").Return(root) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().LsRemote(mock.Anything).Return("", errors.New("ah error")) + gitClient.EXPECT().Root().Return(root) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") }, ".") return s }()}, args: args{ @@ -3625,12 +3624,12 @@ func TestErrorGetGitDirectories(t *testing.T) { }, want: nil, wantErr: assert.Error}, {name: "ErrorVerifyCommit", fields: fields{service: func() *Service { s, _, _ := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("LsRemote", mock.Anything).Return("", errors.New("ah error")) - gitClient.On("VerifyCommitSignature", mock.Anything).Return("", fmt.Errorf("revision %s is not signed", "sadfsadf")) - gitClient.On("Root").Return(root) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().LsRemote(mock.Anything).Return("", errors.New("ah error")) + gitClient.EXPECT().VerifyCommitSignature(mock.Anything).Return("", fmt.Errorf("revision %s is not signed", "sadfsadf")) + gitClient.EXPECT().Root().Return(root) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") }, ".") return s }()}, args: args{ @@ -3659,14 +3658,14 @@ func TestGetGitDirectories(t *testing.T) { // test not using the cache root := "./testdata/git-files-dirs" s, _, cacheMocks := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", mock.Anything).Return(false) - gitClient.On("Fetch", mock.Anything).Return(nil) - gitClient.On("Checkout", mock.Anything, mock.Anything).Once().Return("", nil) - gitClient.On("LsRemote", "HEAD").Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("Root").Return(root) - paths.On("GetPath", mock.Anything).Return(root, nil) - paths.On("GetPathIfExists", mock.Anything).Return(root, nil) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent(mock.Anything).Return(false) + gitClient.EXPECT().Fetch(mock.Anything).Return(nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Once().Return("", nil) + gitClient.EXPECT().LsRemote("HEAD").Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().Root().Return(root) + paths.EXPECT().GetPath(mock.Anything).Return(root, nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(root) }, root) dirRequest := &apiclient.GitDirectoriesRequest{ Repo: &v1alpha1.Repository{Repo: "a-url.com"}, @@ -3692,14 +3691,14 @@ func TestGetGitDirectoriesWithHiddenDirSupported(t *testing.T) { // test not using the cache root := "./testdata/git-files-dirs" s, _, cacheMocks := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", mock.Anything).Return(false) - gitClient.On("Fetch", mock.Anything).Return(nil) - gitClient.On("Checkout", mock.Anything, mock.Anything).Once().Return("", nil) - gitClient.On("LsRemote", "HEAD").Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("Root").Return(root) - paths.On("GetPath", mock.Anything).Return(root, nil) - paths.On("GetPathIfExists", mock.Anything).Return(root, nil) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent(mock.Anything).Return(false) + gitClient.EXPECT().Fetch(mock.Anything).Return(nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Once().Return("", nil) + gitClient.EXPECT().LsRemote("HEAD").Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().Root().Return(root) + paths.EXPECT().GetPath(mock.Anything).Return(root, nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(root) }, root) s.initConstants.IncludeHiddenDirectories = true dirRequest := &apiclient.GitDirectoriesRequest{ @@ -3750,11 +3749,11 @@ func TestErrorGetGitFiles(t *testing.T) { }, want: nil, wantErr: assert.Error}, {name: "InvalidResolveRevision", fields: fields{service: func() *Service { s, _, _ := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("LsRemote", mock.Anything).Return("", errors.New("ah error")) - gitClient.On("Root").Return(root) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().LsRemote(mock.Anything).Return("", errors.New("ah error")) + gitClient.EXPECT().Root().Return(root) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") }, ".") return s }()}, args: args{ @@ -3786,15 +3785,15 @@ func TestGetGitFiles(t *testing.T) { } root := "" s, _, cacheMocks := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", mock.Anything).Return(false) - gitClient.On("Fetch", mock.Anything).Return(nil) - gitClient.On("Checkout", mock.Anything, mock.Anything).Once().Return("", nil) - gitClient.On("LsRemote", "HEAD").Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("Root").Return(root) - gitClient.On("LsFiles", mock.Anything, mock.Anything).Once().Return(files, nil) - paths.On("GetPath", mock.Anything).Return(root, nil) - paths.On("GetPathIfExists", mock.Anything).Return(root, nil) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent(mock.Anything).Return(false) + gitClient.EXPECT().Fetch(mock.Anything).Return(nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Once().Return("", nil) + gitClient.EXPECT().LsRemote("HEAD").Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().Root().Return(root) + gitClient.EXPECT().LsFiles(mock.Anything, mock.Anything).Once().Return(files, nil) + paths.EXPECT().GetPath(mock.Anything).Return(root, nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(root) }, root) filesRequest := &apiclient.GitFilesRequest{ Repo: &v1alpha1.Repository{Repo: "a-url.com"}, @@ -3853,11 +3852,11 @@ func TestErrorUpdateRevisionForPaths(t *testing.T) { }, want: nil, wantErr: assert.Error}, {name: "InvalidResolveRevision", fields: fields{service: func() *Service { s, _, _ := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("LsRemote", mock.Anything).Return("", errors.New("ah error")) - gitClient.On("Root").Return(root) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().LsRemote(mock.Anything).Return("", errors.New("ah error")) + gitClient.EXPECT().Root().Return(root) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") }, ".") return s }()}, args: args{ @@ -3871,12 +3870,12 @@ func TestErrorUpdateRevisionForPaths(t *testing.T) { }, want: nil, wantErr: assert.Error}, {name: "InvalidResolveSyncedRevision", fields: fields{service: func() *Service { s, _, _ := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("LsRemote", "HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("LsRemote", mock.Anything).Return("", errors.New("ah error")) - gitClient.On("Root").Return(root) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().LsRemote("HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().LsRemote(mock.Anything).Return("", errors.New("ah error")) + gitClient.EXPECT().Root().Return(root) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") }, ".") return s }()}, args: args{ @@ -3924,7 +3923,7 @@ func TestUpdateRevisionForPaths(t *testing.T) { }{ {name: "NoPathAbort", fields: func() fields { s, _, c := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, _ *iomocks.TempPaths) { - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) }, ".") return fields{ service: s, @@ -3939,11 +3938,11 @@ func TestUpdateRevisionForPaths(t *testing.T) { }, want: &apiclient.UpdateRevisionForPathsResponse{}, wantErr: assert.NoError}, {name: "SameResolvedRevisionAbort", fields: func() fields { s, _, c := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("LsRemote", "HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("LsRemote", "SYNCEDHEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().LsRemote("HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().LsRemote("SYNCEDHEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") }, ".") return fields{ service: s, @@ -3962,20 +3961,20 @@ func TestUpdateRevisionForPaths(t *testing.T) { }, wantErr: assert.NoError}, {name: "ChangedFilesDoNothing", fields: func() fields { s, _, c := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Init").Return(nil) - gitClient.On("Fetch", mock.Anything).Once().Return(nil) - gitClient.On("IsRevisionPresent", "632039659e542ed7de0c170a4fcc1c571b288fc0").Once().Return(false) - gitClient.On("Checkout", "632039659e542ed7de0c170a4fcc1c571b288fc0", mock.Anything).Once().Return("", nil) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().Fetch(mock.Anything).Once().Return(nil) + gitClient.EXPECT().IsRevisionPresent("632039659e542ed7de0c170a4fcc1c571b288fc0").Once().Return(false) + gitClient.EXPECT().Checkout("632039659e542ed7de0c170a4fcc1c571b288fc0", mock.Anything).Once().Return("", nil) // fetch - gitClient.On("IsRevisionPresent", "1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(false) - gitClient.On("Fetch", mock.Anything).Once().Return(nil) - gitClient.On("IsRevisionPresent", "1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(true) - gitClient.On("LsRemote", "HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("LsRemote", "SYNCEDHEAD").Once().Return("1e67a504d03def3a6a1125d934cb511680f72555", nil) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) - gitClient.On("Root").Return("") - gitClient.On("ChangedFiles", mock.Anything, mock.Anything).Return([]string{"app.yaml"}, nil) + gitClient.EXPECT().IsRevisionPresent("1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(false) + gitClient.EXPECT().Fetch(mock.Anything).Once().Return(nil) + gitClient.EXPECT().IsRevisionPresent("1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(true) + gitClient.EXPECT().LsRemote("HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().LsRemote("SYNCEDHEAD").Once().Return("1e67a504d03def3a6a1125d934cb511680f72555", nil) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") + gitClient.EXPECT().Root().Return("") + gitClient.EXPECT().ChangedFiles(mock.Anything, mock.Anything).Return([]string{"app.yaml"}, nil) }, ".") return fields{ service: s, @@ -3995,20 +3994,20 @@ func TestUpdateRevisionForPaths(t *testing.T) { }, wantErr: assert.NoError}, {name: "NoChangesUpdateCache", fields: func() fields { s, _, c := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Init").Return(nil) - gitClient.On("Fetch", mock.Anything).Once().Return(nil) - gitClient.On("IsRevisionPresent", "632039659e542ed7de0c170a4fcc1c571b288fc0").Once().Return(false) - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) - gitClient.On("IsRevisionPresent", "1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(false) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().Fetch(mock.Anything).Once().Return(nil) + gitClient.EXPECT().IsRevisionPresent("632039659e542ed7de0c170a4fcc1c571b288fc0").Once().Return(false) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().IsRevisionPresent("1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(false) // fetch - gitClient.On("Fetch", mock.Anything).Once().Return(nil) - gitClient.On("IsRevisionPresent", "1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(true) - gitClient.On("LsRemote", "HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("LsRemote", "SYNCEDHEAD").Once().Return("1e67a504d03def3a6a1125d934cb511680f72555", nil) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) - gitClient.On("Root").Return("") - gitClient.On("ChangedFiles", mock.Anything, mock.Anything).Return([]string{}, nil) + gitClient.EXPECT().Fetch(mock.Anything).Once().Return(nil) + gitClient.EXPECT().IsRevisionPresent("1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(true) + gitClient.EXPECT().LsRemote("HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().LsRemote("SYNCEDHEAD").Once().Return("1e67a504d03def3a6a1125d934cb511680f72555", nil) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") + gitClient.EXPECT().Root().Return("") + gitClient.EXPECT().ChangedFiles(mock.Anything, mock.Anything).Return([]string{}, nil) }, ".") return fields{ service: s, @@ -4037,19 +4036,19 @@ func TestUpdateRevisionForPaths(t *testing.T) { }}, {name: "NoChangesHelmMultiSourceUpdateCache", fields: func() fields { s, _, c := newServiceWithOpt(t, func(gitClient *gitmocks.Client, _ *helmmocks.Client, _ *ocimocks.Client, paths *iomocks.TempPaths) { - gitClient.On("Init").Return(nil) - gitClient.On("IsRevisionPresent", "632039659e542ed7de0c170a4fcc1c571b288fc0").Once().Return(false) - gitClient.On("Fetch", mock.Anything).Once().Return(nil) - gitClient.On("Checkout", mock.Anything, mock.Anything).Return("", nil) + gitClient.EXPECT().Init().Return(nil) + gitClient.EXPECT().IsRevisionPresent("632039659e542ed7de0c170a4fcc1c571b288fc0").Once().Return(false) + gitClient.EXPECT().Fetch(mock.Anything).Once().Return(nil) + gitClient.EXPECT().Checkout(mock.Anything, mock.Anything).Return("", nil) // fetch - gitClient.On("IsRevisionPresent", "1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(true) - gitClient.On("Fetch", mock.Anything).Once().Return(nil) - gitClient.On("LsRemote", "HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) - gitClient.On("LsRemote", "SYNCEDHEAD").Once().Return("1e67a504d03def3a6a1125d934cb511680f72555", nil) - paths.On("GetPath", mock.Anything).Return(".", nil) - paths.On("GetPathIfExists", mock.Anything).Return(".", nil) - gitClient.On("Root").Return("") - gitClient.On("ChangedFiles", mock.Anything, mock.Anything).Return([]string{}, nil) + gitClient.EXPECT().IsRevisionPresent("1e67a504d03def3a6a1125d934cb511680f72555").Once().Return(true) + gitClient.EXPECT().Fetch(mock.Anything).Once().Return(nil) + gitClient.EXPECT().LsRemote("HEAD").Once().Return("632039659e542ed7de0c170a4fcc1c571b288fc0", nil) + gitClient.EXPECT().LsRemote("SYNCEDHEAD").Once().Return("1e67a504d03def3a6a1125d934cb511680f72555", nil) + paths.EXPECT().GetPath(mock.Anything).Return(".", nil) + paths.EXPECT().GetPathIfExists(mock.Anything).Return(".") + gitClient.EXPECT().Root().Return("") + gitClient.EXPECT().ChangedFiles(mock.Anything, mock.Anything).Return([]string{}, nil) }, ".") return fields{ service: s, @@ -4307,7 +4306,7 @@ func TestVerifyCommitSignature(t *testing.T) { t.Run("VerifyCommitSignature with valid signature", func(t *testing.T) { t.Setenv("ARGOCD_GPG_ENABLED", "true") mockGitClient := &gitmocks.Client{} - mockGitClient.On("VerifyCommitSignature", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + mockGitClient.EXPECT().VerifyCommitSignature(mock.Anything). Return(testSignature, nil) err := verifyCommitSignature(true, mockGitClient, "abcd1234", repo) require.NoError(t, err) @@ -4316,7 +4315,7 @@ func TestVerifyCommitSignature(t *testing.T) { t.Run("VerifyCommitSignature with invalid signature", func(t *testing.T) { t.Setenv("ARGOCD_GPG_ENABLED", "true") mockGitClient := &gitmocks.Client{} - mockGitClient.On("VerifyCommitSignature", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + mockGitClient.EXPECT().VerifyCommitSignature(mock.Anything). Return("", nil) err := verifyCommitSignature(true, mockGitClient, "abcd1234", repo) assert.EqualError(t, err, "revision abcd1234 is not signed") @@ -4325,7 +4324,7 @@ func TestVerifyCommitSignature(t *testing.T) { t.Run("VerifyCommitSignature with unknown signature", func(t *testing.T) { t.Setenv("ARGOCD_GPG_ENABLED", "true") mockGitClient := &gitmocks.Client{} - mockGitClient.On("VerifyCommitSignature", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + mockGitClient.EXPECT().VerifyCommitSignature(mock.Anything). Return("", errors.New("UNKNOWN signature: gpg: Unknown signature from ABCDEFGH")) err := verifyCommitSignature(true, mockGitClient, "abcd1234", repo) assert.EqualError(t, err, "UNKNOWN signature: gpg: Unknown signature from ABCDEFGH") @@ -4334,7 +4333,7 @@ func TestVerifyCommitSignature(t *testing.T) { t.Run("VerifyCommitSignature with error verifying signature", func(t *testing.T) { t.Setenv("ARGOCD_GPG_ENABLED", "true") mockGitClient := &gitmocks.Client{} - mockGitClient.On("VerifyCommitSignature", mock.Anything, mock.Anything, mock.Anything, mock.Anything). + mockGitClient.EXPECT().VerifyCommitSignature(mock.Anything). Return("", errors.New("error verifying signature of commit 'abcd1234' in repo 'https://github.com/example/repo.git': failed to verify signature")) err := verifyCommitSignature(true, mockGitClient, "abcd1234", repo) assert.EqualError(t, err, "error verifying signature of commit 'abcd1234' in repo 'https://github.com/example/repo.git': failed to verify signature") diff --git a/server/application/application_test.go b/server/application/application_test.go index 5f9a4e984d..c1c20fe53d 100644 --- a/server/application/application_test.go +++ b/server/application/application_test.go @@ -111,14 +111,6 @@ func fakeCluster() *v1alpha1.Cluster { } } -func fakeAppList() *apiclient.AppList { - return &apiclient.AppList{ - Apps: map[string]string{ - "some/path": "Ksonnet", - }, - } -} - func fakeResolveRevisionResponse() *apiclient.ResolveRevisionResponse { return &apiclient.ResolveRevisionResponse{ Revision: "f9ba9e98119bf8c1176fbd65dbae26a71d044add", @@ -134,25 +126,24 @@ func fakeResolveRevisionResponseHelm() *apiclient.ResolveRevisionResponse { } func fakeRepoServerClient(isHelm bool) *mocks.RepoServerServiceClient { - mockRepoServiceClient := mocks.RepoServerServiceClient{} - mockRepoServiceClient.On("GetProcessableApps", mock.Anything, mock.Anything).Return(fakeAppList(), nil) - mockRepoServiceClient.On("GenerateManifest", mock.Anything, mock.Anything).Return(&apiclient.ManifestResponse{}, nil) - mockRepoServiceClient.On("GetAppDetails", mock.Anything, mock.Anything).Return(&apiclient.RepoAppDetailsResponse{}, nil) - mockRepoServiceClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - mockRepoServiceClient.On("GetRevisionMetadata", mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) + mockRepoServiceClient := &mocks.RepoServerServiceClient{} + mockRepoServiceClient.EXPECT().GenerateManifest(mock.Anything, mock.Anything).Return(&apiclient.ManifestResponse{}, nil) + mockRepoServiceClient.EXPECT().GetAppDetails(mock.Anything, mock.Anything).Return(&apiclient.RepoAppDetailsResponse{}, nil) + mockRepoServiceClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + mockRepoServiceClient.EXPECT().GetRevisionMetadata(mock.Anything, mock.Anything).Return(&v1alpha1.RevisionMetadata{}, nil) mockWithFilesClient := &mocks.RepoServerService_GenerateManifestWithFilesClient{} - mockWithFilesClient.On("Send", mock.Anything).Return(nil) - mockWithFilesClient.On("CloseAndRecv").Return(&apiclient.ManifestResponse{}, nil) - mockRepoServiceClient.On("GenerateManifestWithFiles", mock.Anything, mock.Anything).Return(mockWithFilesClient, nil) - mockRepoServiceClient.On("GetRevisionChartDetails", mock.Anything, mock.Anything).Return(&v1alpha1.ChartDetails{}, nil) + mockWithFilesClient.EXPECT().Send(mock.Anything).Return(nil).Maybe() + mockWithFilesClient.EXPECT().CloseAndRecv().Return(&apiclient.ManifestResponse{}, nil).Maybe() + mockRepoServiceClient.EXPECT().GenerateManifestWithFiles(mock.Anything, mock.Anything).Return(mockWithFilesClient, nil) + mockRepoServiceClient.EXPECT().GetRevisionChartDetails(mock.Anything, mock.Anything).Return(&v1alpha1.ChartDetails{}, nil) if isHelm { - mockRepoServiceClient.On("ResolveRevision", mock.Anything, mock.Anything).Return(fakeResolveRevisionResponseHelm(), nil) + mockRepoServiceClient.EXPECT().ResolveRevision(mock.Anything, mock.Anything).Return(fakeResolveRevisionResponseHelm(), nil) } else { - mockRepoServiceClient.On("ResolveRevision", mock.Anything, mock.Anything).Return(fakeResolveRevisionResponse(), nil) + mockRepoServiceClient.EXPECT().ResolveRevision(mock.Anything, mock.Anything).Return(fakeResolveRevisionResponse(), nil) } - return &mockRepoServiceClient + return mockRepoServiceClient } // return an ApplicationServiceServer which returns fake data @@ -2721,20 +2712,18 @@ func TestGetManifests_WithNoCache(t *testing.T) { testApp := newTestApp() appServer := newTestAppServer(t, testApp) - mockRepoServiceClient := mocks.RepoServerServiceClient{} - mockRepoServiceClient.On("GenerateManifest", mock.Anything, mock.MatchedBy(func(mr *apiclient.ManifestRequest) bool { - // expected to be true because given NoCache in the ApplicationManifestQuery + mockRepoServiceClient := mocks.NewRepoServerServiceClient(t) + mockRepoServiceClient.EXPECT().GenerateManifest(mock.Anything, mock.MatchedBy(func(mr *apiclient.ManifestRequest) bool { return mr.NoCache })).Return(&apiclient.ManifestResponse{}, nil) - appServer.repoClientset = &mocks.Clientset{RepoServerServiceClient: &mockRepoServiceClient} + appServer.repoClientset = &mocks.Clientset{RepoServerServiceClient: mockRepoServiceClient} _, err := appServer.GetManifests(t.Context(), &application.ApplicationManifestQuery{ Name: &testApp.Name, NoCache: ptr.To(true), }) require.NoError(t, err) - mockRepoServiceClient.AssertExpectations(t) } func TestRollbackApp(t *testing.T) { @@ -3243,12 +3232,12 @@ func TestGetAppRefresh_HardRefresh(t *testing.T) { appServer := newTestAppServer(t, testApp) var getAppDetailsQuery *apiclient.RepoServerAppDetailsQuery - mockRepoServiceClient := mocks.RepoServerServiceClient{} - mockRepoServiceClient.On("GetAppDetails", mock.Anything, mock.MatchedBy(func(q *apiclient.RepoServerAppDetailsQuery) bool { + mockRepoServiceClient := &mocks.RepoServerServiceClient{} + mockRepoServiceClient.EXPECT().GetAppDetails(mock.Anything, mock.MatchedBy(func(q *apiclient.RepoServerAppDetailsQuery) bool { getAppDetailsQuery = q return true })).Return(&apiclient.RepoAppDetailsResponse{}, nil) - appServer.repoClientset = &mocks.Clientset{RepoServerServiceClient: &mockRepoServiceClient} + appServer.repoClientset = &mocks.Clientset{RepoServerServiceClient: mockRepoServiceClient} var patched int32 diff --git a/server/application/deepinformer_test.go b/server/application/deepinformer_test.go index fb317196fd..c08e7555df 100644 --- a/server/application/deepinformer_test.go +++ b/server/application/deepinformer_test.go @@ -39,9 +39,9 @@ func Test_deepCopyAppProjectClient_Get(t *testing.T) { name: "Error getting an app project", fields: fields{ AppProjectInterface: func() clientset.AppProjectInterface { - appProject := mocks.AppProjectInterface{} - appProject.On("Get", t.Context(), "appproject2", metav1.GetOptions{}).Return(nil, errors.New("error")) - return &appProject + appProject := &mocks.AppProjectInterface{} + appProject.EXPECT().Get(t.Context(), "appproject2", metav1.GetOptions{}).Return(nil, errors.New("error")) + return appProject }(), }, args: args{ @@ -84,9 +84,9 @@ func Test_deepCopyAppProjectClient_List(t *testing.T) { }, {name: "Error listing app project", fields: fields{ AppProjectInterface: func() clientset.AppProjectInterface { - appProject := mocks.AppProjectInterface{} - appProject.On("List", t.Context(), metav1.ListOptions{}).Return(nil, errors.New("error")) - return &appProject + appProject := &mocks.AppProjectInterface{} + appProject.EXPECT().List(t.Context(), metav1.ListOptions{}).Return(nil, errors.New("error")) + return appProject }(), }, want: nil, wantErr: assert.Error}, } diff --git a/server/cluster/cluster_test.go b/server/cluster/cluster_test.go index dda8e50542..c9d55bc0bf 100644 --- a/server/cluster/cluster_test.go +++ b/server/cluster/cluster_test.go @@ -178,51 +178,30 @@ func TestUpdateCluster_RejectInvalidParams(t *testing.T) { }, } - db.On("ListClusters", mock.Anything).Return( - func(_ context.Context) *appv1.ClusterList { - return &appv1.ClusterList{ - ListMeta: metav1.ListMeta{}, - Items: clusters, - } - }, - func(_ context.Context) error { - return nil - }, + db.EXPECT().ListClusters(mock.Anything).Return( + &appv1.ClusterList{ + ListMeta: metav1.ListMeta{}, + Items: clusters, + }, nil, ) - db.On("UpdateCluster", mock.Anything, mock.Anything).Return( - func(_ context.Context, c *appv1.Cluster) *appv1.Cluster { + db.EXPECT().UpdateCluster(mock.Anything, mock.Anything).RunAndReturn( + func(_ context.Context, c *appv1.Cluster) (*appv1.Cluster, error) { for _, cluster := range clusters { if c.Server == cluster.Server { - return c + return c, nil } } - return nil - }, - func(_ context.Context, c *appv1.Cluster) error { - for _, cluster := range clusters { - if c.Server == cluster.Server { - return nil - } - } - return fmt.Errorf("cluster '%s' not found", c.Server) + return nil, fmt.Errorf("cluster '%s' not found", c.Server) }, ) - db.On("GetCluster", mock.Anything, mock.Anything).Return( - func(_ context.Context, server string) *appv1.Cluster { + db.EXPECT().GetCluster(mock.Anything, mock.Anything).RunAndReturn( + func(_ context.Context, server string) (*appv1.Cluster, error) { for _, cluster := range clusters { if server == cluster.Server { - return &cluster + return &cluster, nil } } - return nil - }, - func(_ context.Context, server string) error { - for _, cluster := range clusters { - if server == cluster.Server { - return nil - } - } - return fmt.Errorf("cluster '%s' not found", server) + return nil, fmt.Errorf("cluster '%s' not found", server) }, ) @@ -258,7 +237,7 @@ func TestGetCluster_UrlEncodedName(t *testing.T) { }, } - db.On("ListClusters", mock.Anything).Return(&mockClusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(&mockClusterList, nil) server := NewServer(db, newNoopEnforcer(), newServerInMemoryCache(), &kubetest.MockKubectlCmd{}) @@ -288,7 +267,7 @@ func TestGetCluster_NameWithUrlEncodingButShouldNotBeUnescaped(t *testing.T) { }, } - db.On("ListClusters", mock.Anything).Return(&mockClusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(&mockClusterList, nil) server := NewServer(db, newNoopEnforcer(), newServerInMemoryCache(), &kubetest.MockKubectlCmd{}) @@ -356,8 +335,8 @@ func TestUpdateCluster_NoFieldsPaths(t *testing.T) { Items: clusters, } - db.On("ListClusters", mock.Anything).Return(&clusterList, nil) - db.On("UpdateCluster", mock.Anything, mock.MatchedBy(func(c *appv1.Cluster) bool { + db.EXPECT().ListClusters(mock.Anything).Return(&clusterList, nil) + db.EXPECT().UpdateCluster(mock.Anything, mock.MatchedBy(func(c *appv1.Cluster) bool { updated = c return true })).Return(&appv1.Cluster{}, nil) @@ -380,12 +359,12 @@ func TestUpdateCluster_NoFieldsPaths(t *testing.T) { func TestUpdateCluster_FieldsPathSet(t *testing.T) { db := &dbmocks.ArgoDB{} var updated *appv1.Cluster - db.On("GetCluster", mock.Anything, "https://127.0.0.1").Return(&appv1.Cluster{ + db.EXPECT().GetCluster(mock.Anything, "https://127.0.0.1").Return(&appv1.Cluster{ Name: "minikube", Server: "https://127.0.0.1", Namespaces: []string{"default", "kube-system"}, }, nil) - db.On("UpdateCluster", mock.Anything, mock.MatchedBy(func(c *appv1.Cluster) bool { + db.EXPECT().UpdateCluster(mock.Anything, mock.MatchedBy(func(c *appv1.Cluster) bool { updated = c return true })).Return(&appv1.Cluster{}, nil) @@ -632,7 +611,7 @@ func TestListCluster(t *testing.T) { Items: []appv1.Cluster{fooCluster, barCluster, bazCluster}, } - db.On("ListClusters", mock.Anything).Return(&mockClusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(&mockClusterList, nil) s := NewServer(db, newNoopEnforcer(), newServerInMemoryCache(), &kubetest.MockKubectlCmd{}) @@ -735,7 +714,7 @@ func TestGetClusterAndVerifyAccess(t *testing.T) { }, } - db.On("ListClusters", mock.Anything).Return(&mockClusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(&mockClusterList, nil) server := NewServer(db, newNoopEnforcer(), newServerInMemoryCache(), &kubetest.MockKubectlCmd{}) localCluster, err := server.getClusterAndVerifyAccess(t.Context(), &cluster.ClusterQuery{ @@ -761,7 +740,7 @@ func TestGetClusterAndVerifyAccess(t *testing.T) { }, } - db.On("ListClusters", mock.Anything).Return(&mockClusterList, nil) + db.EXPECT().ListClusters(mock.Anything).Return(&mockClusterList, nil) server := NewServer(db, newEnforcer(), newServerInMemoryCache(), &kubetest.MockKubectlCmd{}) localCluster, err := server.getClusterAndVerifyAccess(t.Context(), &cluster.ClusterQuery{ @@ -788,8 +767,8 @@ func TestNoClusterEnumeration(t *testing.T) { }, } - db.On("ListClusters", mock.Anything).Return(&mockClusterList, nil) - db.On("GetCluster", mock.Anything, mock.Anything).Return(&mockCluster, nil) + db.EXPECT().ListClusters(mock.Anything).Return(&mockClusterList, nil) + db.EXPECT().GetCluster(mock.Anything, mock.Anything).Return(&mockCluster, nil) server := NewServer(db, newEnforcer(), newServerInMemoryCache(), &kubetest.MockKubectlCmd{}) diff --git a/server/extension/extension_test.go b/server/extension/extension_test.go index 2e00b33780..b267cb53bf 100644 --- a/server/extension/extension_test.go +++ b/server/extension/extension_test.go @@ -156,7 +156,7 @@ func TestRegisterExtensions(t *testing.T) { "another-ext": getSingleExtensionConfigString(), }, } - f.settingsGetterMock.On("Get", mock.Anything).Return(settings, nil) + f.settingsGetterMock.EXPECT().Get().Return(settings, nil) expectedProxyRegistries := []string{ "external-backend", "some-backend", @@ -220,7 +220,7 @@ func TestRegisterExtensions(t *testing.T) { "": tc.configYaml, }, } - f.settingsGetterMock.On("Get", mock.Anything).Return(settings, nil) + f.settingsGetterMock.EXPECT().Get().Return(settings, nil) // when err := f.manager.RegisterExtensions() @@ -257,8 +257,8 @@ func TestCallExtension(t *testing.T) { userMock := &mocks.UserGetter{} dbMock := &dbmocks.ArgoDB{} - dbMock.On("GetClusterServersByName", mock.Anything, mock.Anything).Return([]string{"cluster1"}, nil) - dbMock.On("GetCluster", mock.Anything, mock.Anything).Return(&v1alpha1.Cluster{Server: "some-url", Name: "cluster1"}, nil) + dbMock.EXPECT().GetClusterServersByName(mock.Anything, mock.Anything).Return([]string{"cluster1"}, nil).Maybe() + dbMock.EXPECT().GetCluster(mock.Anything, mock.Anything).Return(&v1alpha1.Cluster{Server: "some-url", Name: "cluster1"}, nil).Maybe() logger, _ := test.NewNullLogger() logEntry := logger.WithContext(t.Context()) @@ -331,12 +331,12 @@ func TestCallExtension(t *testing.T) { } withProject := func(prj *v1alpha1.AppProject, f *fixture) { - f.projMock.On("Get", prj.GetName()).Return(prj, nil) + f.projMock.EXPECT().Get(prj.GetName()).Return(prj, nil).Maybe() } withMetrics := func(f *fixture) { - f.metricsMock.On("IncExtensionRequestCounter", mock.Anything, mock.Anything) - f.metricsMock.On("ObserveExtensionRequestDuration", mock.Anything, mock.Anything) + f.metricsMock.EXPECT().IncExtensionRequestCounter(mock.Anything, mock.Anything).Maybe() + f.metricsMock.EXPECT().ObserveExtensionRequestDuration(mock.Anything, mock.Anything).Maybe() } withRbac := func(f *fixture, allowApp, allowExt bool) { @@ -348,14 +348,14 @@ func TestCallExtension(t *testing.T) { if !allowExt { extAccessError = errors.New("no extension permission") } - f.rbacMock.On("EnforceErr", mock.Anything, rbac.ResourceApplications, rbac.ActionGet, mock.Anything).Return(appAccessError) - f.rbacMock.On("EnforceErr", mock.Anything, rbac.ResourceExtensions, rbac.ActionInvoke, mock.Anything).Return(extAccessError) + f.rbacMock.EXPECT().EnforceErr(mock.Anything, rbac.ResourceApplications, rbac.ActionGet, mock.Anything).Return(appAccessError).Maybe() + f.rbacMock.EXPECT().EnforceErr(mock.Anything, rbac.ResourceExtensions, rbac.ActionInvoke, mock.Anything).Return(extAccessError).Maybe() } withUser := func(f *fixture, userId string, username string, groups []string) { - f.userMock.On("GetUserId", mock.Anything).Return(userId) - f.userMock.On("GetUsername", mock.Anything).Return(username) - f.userMock.On("GetGroups", mock.Anything).Return(groups) + f.userMock.EXPECT().GetUserId(mock.Anything).Return(userId).Maybe() + f.userMock.EXPECT().GetUsername(mock.Anything).Return(username).Maybe() + f.userMock.EXPECT().GetGroups(mock.Anything).Return(groups).Maybe() } withExtensionConfig := func(configYaml string, f *fixture) { @@ -370,7 +370,7 @@ func TestCallExtension(t *testing.T) { }, Secrets: secrets, } - f.settingsGetterMock.On("Get", mock.Anything).Return(settings, nil) + f.settingsGetterMock.EXPECT().Get().Return(settings, nil).Maybe() } startTestServer := func(t *testing.T, f *fixture) *httptest.Server { @@ -419,7 +419,7 @@ func TestCallExtension(t *testing.T) { r := newExtensionRequest(t, "Get", fmt.Sprintf("%s/extensions/%s/", ts.URL, backendEndpoint)) app := getApp("", clusterURL, defaultProjectName) proj := getProjectWithDestinations("project-name", nil, []string{clusterURL}) - f.appGetterMock.On("Get", mock.Anything, mock.Anything).Return(app, nil) + f.appGetterMock.EXPECT().Get(mock.Anything, mock.Anything).Return(app, nil).Maybe() withProject(proj, f) var wg sync.WaitGroup wg.Add(2) @@ -468,7 +468,7 @@ func TestCallExtension(t *testing.T) { withMetrics(f) withUser(f, "some-user-id", "some-user", []string{"group1", "group2"}) cluster1Name := "cluster1" - f.appGetterMock.On("Get", "namespace", "app-name").Return(getApp(cluster1Name, "", defaultProjectName), nil) + f.appGetterMock.EXPECT().Get("namespace", "app-name").Return(getApp(cluster1Name, "", defaultProjectName), nil).Maybe() withProject(getProjectWithDestinations("project-name", []string{cluster1Name}, []string{"some-url"}), f) ts := startTestServer(t, f) @@ -502,8 +502,8 @@ func TestCallExtension(t *testing.T) { beSrv2 := startBackendTestSrv(response2) defer beSrv2.Close() - f.appGetterMock.On("Get", "ns1", "app1").Return(getApp(cluster1Name, "", defaultProjectName), nil) - f.appGetterMock.On("Get", "ns2", "app2").Return(getApp("", cluster2URL, defaultProjectName), nil) + f.appGetterMock.EXPECT().Get("ns1", "app1").Return(getApp(cluster1Name, "", defaultProjectName), nil).Maybe() + f.appGetterMock.EXPECT().Get("ns2", "app2").Return(getApp("", cluster2URL, defaultProjectName), nil).Maybe() withRbac(f, true, true) withExtensionConfig(getExtensionConfigWith2Backends(extName, beSrv1.URL, cluster1Name, cluster1URL, beSrv2.URL, cluster2Name, cluster2URL), f) @@ -560,7 +560,7 @@ func TestCallExtension(t *testing.T) { ts := startTestServer(t, f) defer ts.Close() r := newExtensionRequest(t, "Get", fmt.Sprintf("%s/extensions/%s/", ts.URL, extName)) - f.appGetterMock.On("Get", mock.Anything, mock.Anything).Return(getApp("", "", defaultProjectName), nil) + f.appGetterMock.EXPECT().Get(mock.Anything, mock.Anything).Return(getApp("", "", defaultProjectName), nil).Maybe() // when resp, err := http.DefaultClient.Do(r) @@ -584,7 +584,7 @@ func TestCallExtension(t *testing.T) { ts := startTestServer(t, f) defer ts.Close() r := newExtensionRequest(t, "Get", fmt.Sprintf("%s/extensions/%s/", ts.URL, extName)) - f.appGetterMock.On("Get", mock.Anything, mock.Anything).Return(getApp("", "", defaultProjectName), nil) + f.appGetterMock.EXPECT().Get(mock.Anything, mock.Anything).Return(getApp("", "", defaultProjectName), nil).Maybe() // when resp, err := http.DefaultClient.Do(r) @@ -609,7 +609,7 @@ func TestCallExtension(t *testing.T) { ts := startTestServer(t, f) defer ts.Close() r := newExtensionRequest(t, "Get", fmt.Sprintf("%s/extensions/%s/", ts.URL, extName)) - f.appGetterMock.On("Get", mock.Anything, mock.Anything).Return(getApp("", "", defaultProjectName), nil) + f.appGetterMock.EXPECT().Get(mock.Anything, mock.Anything).Return(getApp("", "", defaultProjectName), nil).Maybe() proj := getProjectWithDestinations("project-name", nil, noCluster) withProject(proj, f) @@ -635,8 +635,8 @@ func TestCallExtension(t *testing.T) { ts := startTestServer(t, f) defer ts.Close() r := newExtensionRequest(t, "Get", fmt.Sprintf("%s/extensions/%s/", ts.URL, extName)) - f.appGetterMock.On("Get", mock.Anything, mock.Anything).Return(getApp("", "", defaultProjectName), nil) - f.projMock.On("Get", defaultProjectName).Return(nil, nil) + f.appGetterMock.EXPECT().Get(mock.Anything, mock.Anything).Return(getApp("", "", defaultProjectName), nil).Maybe() + f.projMock.EXPECT().Get(defaultProjectName).Return(nil, nil).Maybe() // when resp, err := http.DefaultClient.Do(r) @@ -661,7 +661,7 @@ func TestCallExtension(t *testing.T) { ts := startTestServer(t, f) defer ts.Close() r := newExtensionRequest(t, "Get", fmt.Sprintf("%s/extensions/%s/", ts.URL, extName)) - f.appGetterMock.On("Get", mock.Anything, mock.Anything).Return(getApp("", "", differentProject), nil) + f.appGetterMock.EXPECT().Get(mock.Anything, mock.Anything).Return(getApp("", "", differentProject), nil).Maybe() // when resp, err := http.DefaultClient.Do(r) @@ -683,7 +683,7 @@ func TestCallExtension(t *testing.T) { maliciousName := "srv1" destinationServer := "some-valid-server" - f.appGetterMock.On("Get", "ns1", "app1").Return(getApp(maliciousName, destinationServer, defaultProjectName), nil) + f.appGetterMock.EXPECT().Get("ns1", "app1").Return(getApp(maliciousName, destinationServer, defaultProjectName), nil).Maybe() withRbac(f, true, true) withExtensionConfig(getExtensionConfigWith2Backends(extName, "url1", "cluster1Name", "cluster1URL", "url2", "cluster2Name", "cluster2URL"), f) @@ -727,7 +727,7 @@ func TestCallExtension(t *testing.T) { ts := startTestServer(t, f) defer ts.Close() r := newExtensionRequest(t, "Get", ts.URL+"/extensions/") - f.appGetterMock.On("Get", mock.Anything, mock.Anything).Return(getApp("", "", differentProject), nil) + f.appGetterMock.EXPECT().Get(mock.Anything, mock.Anything).Return(getApp("", "", differentProject), nil).Maybe() // when resp, err := http.DefaultClient.Do(r) diff --git a/server/repository/repository_test.go b/server/repository/repository_test.go index 0f596519c5..c98ff4088b 100644 --- a/server/repository/repository_test.go +++ b/server/repository/repository_test.go @@ -272,9 +272,9 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_validateAccess", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} s := NewServer(&repoServerClientset, argoDB, enforcer, nil, appLister, projInformer, testNamespace, settingsMgr, false) url := "https://test" @@ -285,15 +285,15 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_Get", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} url := "https://test" db := &dbmocks.ArgoDB{} - db.On("ListRepositories", t.Context()).Return([]*appsv1.Repository{{Repo: url}}, nil) - db.On("GetRepository", t.Context(), url, "").Return(&appsv1.Repository{Repo: url}, nil) - db.On("RepositoryExists", t.Context(), url, "").Return(true, nil) + db.EXPECT().ListRepositories(mock.Anything).Return([]*appsv1.Repository{{Repo: url}}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().RepositoryExists(mock.Anything, url, "").Return(true, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) repo, err := s.Get(t.Context(), &repository.RepoQuery{ @@ -304,9 +304,9 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_GetInherited", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} url := "https://test" db := &dbmocks.ArgoDB{} @@ -316,9 +316,9 @@ func TestRepositoryServer(t *testing.T) { Username: "", InheritedCreds: true, } - db.On("ListRepositories", t.Context()).Return([]*appsv1.Repository{testRepo}, nil) - db.On("GetRepository", t.Context(), url, "").Return(testRepo, nil) - db.On("RepositoryExists", t.Context(), url, "").Return(true, nil) + db.EXPECT().ListRepositories(mock.Anything).Return([]*appsv1.Repository{testRepo}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "").Return(testRepo, nil) + db.EXPECT().RepositoryExists(mock.Anything, url, "").Return(true, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) repo, err := s.Get(t.Context(), &repository.RepoQuery{ @@ -337,9 +337,9 @@ func TestRepositoryServer(t *testing.T) { url := "https://test" db := &dbmocks.ArgoDB{} - db.On("ListRepositories", t.Context()).Return(nil, nil) - db.On("GetRepository", t.Context(), url, "").Return(nil, errors.New("some error")) - db.On("RepositoryExists", t.Context(), url, "").Return(true, nil) + db.EXPECT().ListRepositories(mock.Anything).Return(nil, nil) + db.EXPECT().GetRepository(mock.Anything, url, "").Return(nil, errors.New("some error")) + db.EXPECT().RepositoryExists(mock.Anything, url, "").Return(true, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) repo, err := s.Get(t.Context(), &repository.RepoQuery{ @@ -350,15 +350,15 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_GetWithNotExistRepoShouldReturn404", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) url := "https://test" db := &dbmocks.ArgoDB{} - db.On("ListRepositories", t.Context()).Return([]*appsv1.Repository{{Repo: url}}, nil) - db.On("GetRepository", t.Context(), url, "").Return(&appsv1.Repository{Repo: url}, nil) - db.On("RepositoryExists", t.Context(), url, "").Return(false, nil) + db.EXPECT().ListRepositories(mock.Anything).Return([]*appsv1.Repository{{Repo: url}}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().RepositoryExists(mock.Anything, url, "").Return(false, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) repo, err := s.Get(t.Context(), &repository.RepoQuery{ @@ -369,15 +369,15 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_GetRepoIsSanitized", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} url := "https://test" db := &dbmocks.ArgoDB{} - db.On("ListRepositories", t.Context()).Return([]*appsv1.Repository{{Repo: url, Username: "test", Password: "it's a secret", GitHubAppEnterpriseBaseURL: "https://ghe.example.com/api/v3", GithubAppId: 123456, GithubAppInstallationId: 789}}, nil) - db.On("GetRepository", t.Context(), url, "").Return(&appsv1.Repository{Repo: url, Username: "test", Password: "it's a secret"}, nil) - db.On("RepositoryExists", t.Context(), url, "").Return(true, nil) + db.EXPECT().ListRepositories(mock.Anything).Return([]*appsv1.Repository{{Repo: url, Username: "test", Password: "it's a secret", GitHubAppEnterpriseBaseURL: "https://ghe.example.com/api/v3", GithubAppId: 123456, GithubAppInstallationId: 789}}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "").Return(&appsv1.Repository{Repo: url, Username: "test", Password: "it's a secret"}, nil) + db.EXPECT().RepositoryExists(mock.Anything, url, "").Return(true, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) repo, err := s.Get(t.Context(), &repository.RepoQuery{ @@ -392,15 +392,15 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_GetRepoIsNormalized", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} url := "https://test" db := &dbmocks.ArgoDB{} - db.On("ListRepositories", t.Context()).Return([]*appsv1.Repository{{Repo: url}}, nil) - db.On("GetRepository", t.Context(), url, "").Return(&appsv1.Repository{Repo: url, Username: "test"}, nil) - db.On("RepositoryExists", t.Context(), url, "").Return(true, nil) + db.EXPECT().ListRepositories(mock.Anything).Return([]*appsv1.Repository{{Repo: url}}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "").Return(&appsv1.Repository{Repo: url, Username: "test"}, nil) + db.EXPECT().RepositoryExists(mock.Anything, url, "").Return(true, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) repo, err := s.Get(t.Context(), &repository.RepoQuery{ @@ -412,17 +412,17 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_GetRepoHasConnectionState", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{ + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{ VerifiedRepository: true, }, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} url := "https://test" db := &dbmocks.ArgoDB{} - db.On("ListRepositories", t.Context()).Return([]*appsv1.Repository{{Repo: url}}, nil) - db.On("GetRepository", t.Context(), url, "").Return(&appsv1.Repository{Repo: url}, nil) - db.On("RepositoryExists", t.Context(), url, "").Return(true, nil) + db.EXPECT().ListRepositories(mock.Anything).Return([]*appsv1.Repository{{Repo: url}}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().RepositoryExists(mock.Anything, url, "").Return(true, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) repo, err := s.Get(t.Context(), &repository.RepoQuery{ @@ -434,13 +434,13 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_CreateRepositoryWithoutUpsert", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), "test").Return(nil, errors.New("not found")) - db.On("CreateRepository", t.Context(), mock.Anything).Return(&apiclient.TestRepositoryResponse{}).Return(&appsv1.Repository{ + db.EXPECT().GetRepository(mock.Anything, "test", mock.Anything).Return(nil, errors.New("not found")) + db.EXPECT().CreateRepository(mock.Anything, mock.Anything).Return(&appsv1.Repository{ Repo: "repo", Project: "proj", }, nil) @@ -457,9 +457,9 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_CreateRepositoryWithUpsert", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} r := &appsv1.Repository{ Repo: "test", @@ -467,12 +467,12 @@ func TestRepositoryServer(t *testing.T) { } db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), "test", "").Return(&appsv1.Repository{ + db.EXPECT().GetRepository(mock.Anything, "test", "").Return(&appsv1.Repository{ Repo: "test", Username: "test", }, nil) - db.On("CreateRepository", t.Context(), mock.Anything).Return(nil, status.Errorf(codes.AlreadyExists, "repository already exists")) - db.On("UpdateRepository", t.Context(), mock.Anything).Return(r, nil) + db.EXPECT().CreateRepository(mock.Anything, mock.Anything).Return(nil, status.Errorf(codes.AlreadyExists, "repository already exists")) + db.EXPECT().UpdateRepository(mock.Anything, mock.Anything).Return(r, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) repo, err := s.CreateRepository(t.Context(), &repository.RepoCreateRequest{ @@ -486,16 +486,16 @@ func TestRepositoryServer(t *testing.T) { }) t.Run("Test_ListRepositories", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "argocd").Return(nil, nil) - db.On("ListHelmRepositories", t.Context(), mock.Anything).Return(nil, nil) - db.On("ListRepositories", t.Context()).Return([]*appsv1.Repository{&fakeRepo, &fakeRepo}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "argocd").Return(nil, nil) + db.EXPECT().ListHelmRepositories(mock.Anything).Return(nil, nil) + db.EXPECT().ListRepositories(mock.Anything).Return([]*appsv1.Repository{&fakeRepo, &fakeRepo}, nil) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projInformer, testNamespace, settingsMgr, false) resp, err := s.ListRepositories(t.Context(), &repository.RepoQuery{}) @@ -516,7 +516,7 @@ func TestRepositoryServerListApps(t *testing.T) { url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) appLister, projLister := newAppAndProjLister(defaultProj) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -531,18 +531,18 @@ func TestRepositoryServerListApps(t *testing.T) { }) t.Run("Test_WithAppCreateUpdatePrivileges", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) enforcer.SetDefaultRole("role:admin") appLister, projLister := newAppAndProjLister(defaultProj) url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) - repoServerClient.On("ListApps", t.Context(), mock.Anything).Return(&apiclient.AppList{ + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) + repoServerClient.EXPECT().ListApps(mock.Anything, mock.Anything).Return(&apiclient.AppList{ Apps: map[string]string{ "path/to/dir": "Kustomize", }, @@ -562,18 +562,18 @@ func TestRepositoryServerListApps(t *testing.T) { }) t.Run("Test_WithAppCreateUpdatePrivilegesRepoNotAllowed", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) enforcer.SetDefaultRole("role:admin") appLister, projLister := newAppAndProjLister(defaultProjNoSources) url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) - repoServerClient.On("ListApps", t.Context(), mock.Anything).Return(&apiclient.AppList{ + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) + repoServerClient.EXPECT().ListApps(mock.Anything, mock.Anything).Return(&apiclient.AppList{ Apps: map[string]string{ "path/to/dir": "Kustomize", }, @@ -603,7 +603,7 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) appLister, projLister := newAppAndProjLister(defaultProj) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -626,7 +626,7 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) appLister, projLister := newAppAndProjLister(defaultProj) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -648,7 +648,7 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) appLister, projLister := newAppAndProjLister(defaultProj) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -663,18 +663,18 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { require.Error(t, err, "rpc error: code = PermissionDenied desc = permission denied: applications, create, default/newapp") }) t.Run("Test_WithCreatePrivileges", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url := "https://test" db := &dbmocks.ArgoDB{} - db.On("ListHelmRepositories", t.Context(), mock.Anything).Return(nil, nil) - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) + db.EXPECT().ListHelmRepositories(mock.Anything).Return(nil, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) expectedResp := apiclient.RepoAppDetailsResponse{Type: "Directory"} - repoServerClient.On("GetAppDetails", t.Context(), mock.Anything).Return(&expectedResp, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.Anything).Return(&expectedResp, nil) appLister, projLister := newAppAndProjLister(defaultProj) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -689,17 +689,17 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { assert.Equal(t, expectedResp, *resp) }) t.Run("Test_RepoNotPermitted", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) expectedResp := apiclient.RepoAppDetailsResponse{Type: "Directory"} - repoServerClient.On("GetAppDetails", t.Context(), mock.Anything).Return(&expectedResp, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.Anything).Return(&expectedResp, nil) appLister, projLister := newAppAndProjLister(defaultProjNoSources) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -714,18 +714,18 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { assert.Nil(t, resp) }) t.Run("Test_ExistingApp", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url := "https://test" db := &dbmocks.ArgoDB{} - db.On("ListHelmRepositories", t.Context(), mock.Anything).Return(nil, nil) - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) + db.EXPECT().ListHelmRepositories(mock.Anything).Return(nil, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) expectedResp := apiclient.RepoAppDetailsResponse{Type: "Directory"} - repoServerClient.On("GetAppDetails", t.Context(), mock.Anything).Return(&expectedResp, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.Anything).Return(&expectedResp, nil) appLister, projLister := newAppAndProjLister(defaultProj, guestbookApp) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -738,19 +738,19 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { assert.Equal(t, expectedResp, *resp) }) t.Run("Test_ExistingMultiSourceApp001", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url := "https://helm.elastic.co" helmRepos := []*appsv1.Repository{{Repo: url}, {Repo: url}} db := &dbmocks.ArgoDB{} - db.On("ListHelmRepositories", t.Context(), mock.Anything).Return(helmRepos, nil) - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) + db.EXPECT().ListHelmRepositories(mock.Anything).Return(helmRepos, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) expectedResp := apiclient.RepoAppDetailsResponse{Type: "Helm"} - repoServerClient.On("GetAppDetails", t.Context(), mock.Anything).Return(&expectedResp, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.Anything).Return(&expectedResp, nil) appLister, projLister := newAppAndProjLister(defaultProj, multiSourceApp001) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -775,23 +775,23 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { assert.Equal(t, "Helm", resp.Type) }) t.Run("Test_ExistingMultiSourceApp002", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url0 := "https://github.com/argoproj/argocd-example-apps.git" url1 := "https://helm.elastic.co" helmRepos := []*appsv1.Repository{{Repo: url0}, {Repo: url1}} db := &dbmocks.ArgoDB{} - db.On("ListHelmRepositories", t.Context(), mock.Anything).Return(helmRepos, nil) - db.On("GetRepository", t.Context(), url0, "default").Return(&appsv1.Repository{Repo: url0}, nil) - db.On("GetRepository", t.Context(), url1, "default").Return(&appsv1.Repository{Repo: url1}, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) + db.EXPECT().ListHelmRepositories(mock.Anything).Return(helmRepos, nil) + db.EXPECT().GetRepository(mock.Anything, url0, "default").Return(&appsv1.Repository{Repo: url0}, nil) + db.EXPECT().GetRepository(mock.Anything, url1, "default").Return(&appsv1.Repository{Repo: url1}, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) expectedResp0 := apiclient.RepoAppDetailsResponse{Type: "Plugin"} expectedResp1 := apiclient.RepoAppDetailsResponse{Type: "Helm"} - repoServerClient.On("GetAppDetails", t.Context(), mock.MatchedBy(func(req *apiclient.RepoServerAppDetailsQuery) bool { return req.Source.RepoURL == url0 })).Return(&expectedResp0, nil) - repoServerClient.On("GetAppDetails", t.Context(), mock.MatchedBy(func(req *apiclient.RepoServerAppDetailsQuery) bool { return req.Source.RepoURL == url1 })).Return(&expectedResp1, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.MatchedBy(func(req *apiclient.RepoServerAppDetailsQuery) bool { return req.Source.RepoURL == url0 })).Return(&expectedResp0, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.MatchedBy(func(req *apiclient.RepoServerAppDetailsQuery) bool { return req.Source.RepoURL == url1 })).Return(&expectedResp1, nil) appLister, projLister := newAppAndProjLister(defaultProj, multiSourceApp002) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -823,7 +823,7 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "mismatch").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "mismatch").Return(&appsv1.Repository{Repo: url}, nil) appLister, projLister := newAppAndProjLister(defaultProj, guestbookApp) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) @@ -842,7 +842,7 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) appLister, projLister := newAppAndProjLister(defaultProj, guestbookApp) differentSource := guestbookApp.Spec.Source.DeepCopy() differentSource.Helm.ValueFiles = []string{"/etc/passwd"} @@ -857,18 +857,18 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { assert.Nil(t, resp) }) t.Run("Test_ExistingAppSourceInHistory", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url := "https://test" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("ListHelmRepositories", t.Context(), mock.Anything).Return(nil, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().ListHelmRepositories(mock.Anything).Return(nil, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) expectedResp := apiclient.RepoAppDetailsResponse{Type: "Directory"} - repoServerClient.On("GetAppDetails", t.Context(), mock.Anything).Return(&expectedResp, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.Anything).Return(&expectedResp, nil) appLister, projLister := newAppAndProjLister(defaultProj, guestbookApp) previousSource := guestbookApp.Status.History[0].Source.DeepCopy() previousSource.TargetRevision = guestbookApp.Status.History[0].Revision @@ -884,19 +884,19 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { }) t.Run("Test_ExistingAppMultiSourceNotInHistory", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url := "https://helm.elastic.co" helmRepos := []*appsv1.Repository{{Repo: url}, {Repo: url}} db := &dbmocks.ArgoDB{} - db.On("ListHelmRepositories", t.Context(), mock.Anything).Return(helmRepos, nil) - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) + db.EXPECT().ListHelmRepositories(mock.Anything).Return(helmRepos, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) expectedResp := apiclient.RepoAppDetailsResponse{Type: "Helm"} - repoServerClient.On("GetAppDetails", t.Context(), mock.Anything).Return(&expectedResp, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.Anything).Return(&expectedResp, nil) appLister, projLister := newAppAndProjLister(defaultProj, multiSourceApp001) differentSource := multiSourceApp001.Spec.Sources[0].DeepCopy() @@ -914,18 +914,18 @@ func TestRepositoryServerGetAppDetails(t *testing.T) { assert.Nil(t, resp) }) t.Run("Test_ExistingAppMultiSourceInHistory", func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) url := "https://helm.elastic.co" db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), url, "default").Return(&appsv1.Repository{Repo: url}, nil) - db.On("ListHelmRepositories", t.Context(), mock.Anything).Return(nil, nil) - db.On("GetProjectRepositories", "default").Return(nil, nil) - db.On("GetProjectClusters", t.Context(), "default").Return(nil, nil) + db.EXPECT().GetRepository(mock.Anything, url, "default").Return(&appsv1.Repository{Repo: url}, nil) + db.EXPECT().ListHelmRepositories(mock.Anything).Return(nil, nil) + db.EXPECT().GetProjectRepositories("default").Return(nil, nil) + db.EXPECT().GetProjectClusters(mock.Anything, "default").Return(nil, nil) expectedResp := apiclient.RepoAppDetailsResponse{Type: "Directory"} - repoServerClient.On("GetAppDetails", t.Context(), mock.Anything).Return(&expectedResp, nil) + repoServerClient.EXPECT().GetAppDetails(mock.Anything, mock.Anything).Return(&expectedResp, nil) appLister, projLister := newAppAndProjLister(defaultProj, multiSourceApp001) previousSource := multiSourceApp001.Status.History[0].Sources[0].DeepCopy() previousSource.TargetRevision = multiSourceApp001.Status.History[0].Revisions[0] @@ -1136,16 +1136,16 @@ func TestDeleteRepository(t *testing.T) { for name, repo := range repositories { t.Run(name, func(t *testing.T) { - repoServerClient := mocks.RepoServerServiceClient{} - repoServerClient.On("TestRepository", mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) - repoServerClientset := mocks.Clientset{RepoServerServiceClient: &repoServerClient} + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} enforcer := newEnforcer(kubeclientset) db := &dbmocks.ArgoDB{} - db.On("DeleteRepository", t.Context(), repo, "default").Return(nil) - db.On("ListRepositories", t.Context()).Return([]*appsv1.Repository{{Repo: repo, Project: "default"}}, nil) - db.On("GetRepository", t.Context(), repo, "default").Return(&appsv1.Repository{Repo: repo, Project: "default"}, nil) + db.EXPECT().DeleteRepository(mock.Anything, repo, "default").Return(nil) + db.EXPECT().ListRepositories(mock.Anything).Return([]*appsv1.Repository{{Repo: repo, Project: "default"}}, nil) + db.EXPECT().GetRepository(mock.Anything, repo, "default").Return(&appsv1.Repository{Repo: repo, Project: "default"}, nil) appLister, projLister := newAppAndProjLister(defaultProj) s := NewServer(&repoServerClientset, db, enforcer, newFixtures().Cache, appLister, projLister, testNamespace, settingsMgr, false) diff --git a/util/argo/argo_test.go b/util/argo/argo_test.go index 303c1a2940..9fc503bf70 100644 --- a/util/argo/argo_test.go +++ b/util/argo/argo_test.go @@ -314,7 +314,7 @@ func TestValidateChartWithoutRevision(t *testing.T) { cluster := &argoappv1.Cluster{Server: "https://kubernetes.default.svc"} db := &dbmocks.ArgoDB{} ctx := t.Context() - db.On("GetCluster", ctx, appSpec.Destination.Server).Return(cluster, nil) + db.EXPECT().GetCluster(ctx, appSpec.Destination.Server).Return(cluster, nil).Maybe() conditions, err := ValidatePermissions(ctx, appSpec, &argoappv1.AppProject{ Spec: argoappv1.AppProjectSpec{ @@ -384,39 +384,39 @@ func TestValidateRepo(t *testing.T) { repoClient := &mocks.RepoServerServiceClient{} source := app.Spec.GetSource() - repoClient.On("GetAppDetails", t.Context(), &apiclient.RepoServerAppDetailsQuery{ + repoClient.EXPECT().GetAppDetails(mock.Anything, &apiclient.RepoServerAppDetailsQuery{ Repo: repo, Source: &source, Repos: helmRepos, KustomizeOptions: kustomizeOptions, HelmOptions: &argoappv1.HelmOptions{ValuesFileSchemes: []string{"https", "http"}}, NoRevisionCache: true, - }).Return(&apiclient.RepoAppDetailsResponse{}, nil) + }).Return(&apiclient.RepoAppDetailsResponse{}, nil).Maybe() repo.Type = "git" - repoClient.On("TestRepository", t.Context(), &apiclient.TestRepositoryRequest{ + repoClient.EXPECT().TestRepository(mock.Anything, &apiclient.TestRepositoryRequest{ Repo: repo, }).Return(&apiclient.TestRepositoryResponse{ VerifiedRepository: true, - }, nil) + }, nil).Maybe() repoClientSet := &mocks.Clientset{RepoServerServiceClient: repoClient} db := &dbmocks.ArgoDB{} - db.On("GetRepository", t.Context(), app.Spec.Source.RepoURL, "").Return(repo, nil) - db.On("ListHelmRepositories", t.Context()).Return(helmRepos, nil) - db.On("ListOCIRepositories", t.Context()).Return([]*argoappv1.Repository{}, nil) - db.On("GetCluster", t.Context(), app.Spec.Destination.Server).Return(cluster, nil) - db.On("GetAllHelmRepositoryCredentials", t.Context()).Return(nil, nil) - db.On("GetAllOCIRepositoryCredentials", t.Context()).Return([]*argoappv1.RepoCreds{}, nil) + db.EXPECT().GetRepository(mock.Anything, app.Spec.Source.RepoURL, "").Return(repo, nil).Maybe() + db.EXPECT().ListHelmRepositories(mock.Anything).Return(helmRepos, nil).Maybe() + db.EXPECT().ListOCIRepositories(mock.Anything).Return([]*argoappv1.Repository{}, nil).Maybe() + db.EXPECT().GetCluster(mock.Anything, app.Spec.Destination.Server).Return(cluster, nil).Maybe() + db.EXPECT().GetAllHelmRepositoryCredentials(mock.Anything).Return(nil, nil).Maybe() + db.EXPECT().GetAllOCIRepositoryCredentials(mock.Anything).Return([]*argoappv1.RepoCreds{}, nil).Maybe() var receivedRequest *apiclient.ManifestRequest - repoClient.On("GenerateManifest", t.Context(), mock.MatchedBy(func(req *apiclient.ManifestRequest) bool { + repoClient.EXPECT().GenerateManifest(mock.Anything, mock.MatchedBy(func(req *apiclient.ManifestRequest) bool { receivedRequest = req return true - })).Return(nil, nil) + })).Return(nil, nil).Maybe() cm := corev1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ @@ -777,7 +777,7 @@ func TestValidatePermissions(t *testing.T) { } cluster := &argoappv1.Cluster{Server: "https://127.0.0.1:6443", Name: "test"} db := &dbmocks.ArgoDB{} - db.On("GetCluster", t.Context(), spec.Destination.Server).Return(cluster, nil) + db.EXPECT().GetCluster(mock.Anything, spec.Destination.Server).Return(cluster, nil).Maybe() conditions, err := ValidatePermissions(t.Context(), &spec, &proj, db) require.NoError(t, err) assert.Len(t, conditions, 1) @@ -810,7 +810,7 @@ func TestValidatePermissions(t *testing.T) { } cluster := &argoappv1.Cluster{Server: "https://127.0.0.1:6443", Name: "test"} db := &dbmocks.ArgoDB{} - db.On("GetCluster", t.Context(), spec.Destination.Server).Return(cluster, nil) + db.EXPECT().GetCluster(mock.Anything, spec.Destination.Server).Return(cluster, nil).Maybe() conditions, err := ValidatePermissions(t.Context(), &spec, &proj, db) require.NoError(t, err) assert.Len(t, conditions, 1) @@ -842,7 +842,7 @@ func TestValidatePermissions(t *testing.T) { }, } db := &dbmocks.ArgoDB{} - db.On("GetCluster", t.Context(), spec.Destination.Server).Return(nil, status.Errorf(codes.NotFound, "Cluster does not exist")) + db.EXPECT().GetCluster(mock.Anything, spec.Destination.Server).Return(nil, status.Errorf(codes.NotFound, "Cluster does not exist")).Maybe() conditions, err := ValidatePermissions(t.Context(), &spec, &proj, db) require.NoError(t, err) assert.Len(t, conditions, 1) @@ -874,7 +874,7 @@ func TestValidatePermissions(t *testing.T) { }, } db := &dbmocks.ArgoDB{} - db.On("GetClusterServersByName", t.Context(), "does-not-exist").Return(nil, nil) + db.EXPECT().GetClusterServersByName(mock.Anything, "does-not-exist").Return(nil, nil).Maybe() conditions, err := ValidatePermissions(t.Context(), &spec, &proj, db) require.NoError(t, err) assert.Len(t, conditions, 1) @@ -906,7 +906,7 @@ func TestValidatePermissions(t *testing.T) { }, } db := &dbmocks.ArgoDB{} - db.On("GetCluster", t.Context(), spec.Destination.Server).Return(nil, errors.New("Unknown error occurred")) + db.EXPECT().GetCluster(mock.Anything, spec.Destination.Server).Return(nil, errors.New("Unknown error occurred")).Maybe() conditions, err := ValidatePermissions(t.Context(), &spec, &proj, db) require.NoError(t, err) assert.Len(t, conditions, 1) @@ -942,8 +942,8 @@ func TestValidatePermissions(t *testing.T) { Name: "does-exist", Server: "https://127.0.0.1:6443", } - db.On("GetClusterServersByName", t.Context(), "does-exist").Return([]string{"https://127.0.0.1:6443"}, nil) - db.On("GetCluster", t.Context(), "https://127.0.0.1:6443").Return(&cluster, nil) + db.EXPECT().GetClusterServersByName(mock.Anything, "does-exist").Return([]string{"https://127.0.0.1:6443"}, nil).Maybe() + db.EXPECT().GetCluster(mock.Anything, "https://127.0.0.1:6443").Return(&cluster, nil).Maybe() conditions, err := ValidatePermissions(t.Context(), &spec, &proj, db) require.NoError(t, err) assert.Empty(t, conditions) @@ -1008,7 +1008,7 @@ func TestGetDestinationCluster(t *testing.T) { expectedCluster := &argoappv1.Cluster{Server: "https://127.0.0.1:6443"} db := &dbmocks.ArgoDB{} - db.On("GetCluster", t.Context(), "https://127.0.0.1:6443").Return(expectedCluster, nil) + db.EXPECT().GetCluster(mock.Anything, "https://127.0.0.1:6443").Return(expectedCluster, nil).Maybe() destCluster, err := GetDestinationCluster(t.Context(), dest, db) require.NoError(t, err) @@ -1022,8 +1022,8 @@ func TestGetDestinationCluster(t *testing.T) { } db := &dbmocks.ArgoDB{} - db.On("GetClusterServersByName", t.Context(), "minikube").Return([]string{"https://127.0.0.1:6443"}, nil) - db.On("GetCluster", t.Context(), "https://127.0.0.1:6443").Return(&argoappv1.Cluster{Server: "https://127.0.0.1:6443", Name: "minikube"}, nil) + db.EXPECT().GetClusterServersByName(mock.Anything, "minikube").Return([]string{"https://127.0.0.1:6443"}, nil).Maybe() + db.EXPECT().GetCluster(mock.Anything, "https://127.0.0.1:6443").Return(&argoappv1.Cluster{Server: "https://127.0.0.1:6443", Name: "minikube"}, nil).Maybe() destCluster, err := GetDestinationCluster(t.Context(), dest, db) require.NoError(t, err) @@ -1047,7 +1047,7 @@ func TestGetDestinationCluster(t *testing.T) { } db := &dbmocks.ArgoDB{} - db.On("GetClusterServersByName", t.Context(), mock.Anything).Return(nil, errors.New("an error occurred")) + db.EXPECT().GetClusterServersByName(mock.Anything, "minikube").Return(nil, errors.New("an error occurred")) _, err := GetDestinationCluster(t.Context(), dest, db) require.ErrorContains(t, err, "an error occurred") @@ -1059,7 +1059,7 @@ func TestGetDestinationCluster(t *testing.T) { } db := &dbmocks.ArgoDB{} - db.On("GetClusterServersByName", t.Context(), "minikube").Return(nil, nil) + db.EXPECT().GetClusterServersByName(mock.Anything, "minikube").Return(nil, nil) _, err := GetDestinationCluster(t.Context(), dest, db) assert.EqualError(t, err, "there are no clusters with this name: minikube") @@ -1071,7 +1071,7 @@ func TestGetDestinationCluster(t *testing.T) { } db := &dbmocks.ArgoDB{} - db.On("GetClusterServersByName", t.Context(), "dind").Return([]string{"https://127.0.0.1:2443", "https://127.0.0.1:8443"}, nil) + db.EXPECT().GetClusterServersByName(mock.Anything, "dind").Return([]string{"https://127.0.0.1:2443", "https://127.0.0.1:8443"}, nil) _, err := GetDestinationCluster(t.Context(), dest, db) assert.EqualError(t, err, "there are 2 clusters with the same name: [https://127.0.0.1:2443 https://127.0.0.1:8443]") @@ -1551,7 +1551,7 @@ func TestValidatePermissionsMultipleSources(t *testing.T) { } cluster := &argoappv1.Cluster{Server: "https://127.0.0.1:6443", Name: "test"} db := &dbmocks.ArgoDB{} - db.On("GetCluster", t.Context(), spec.Destination.Server).Return(cluster, nil) + db.EXPECT().GetCluster(mock.Anything, spec.Destination.Server).Return(cluster, nil) conditions, err := ValidatePermissions(t.Context(), &spec, &proj, db) require.NoError(t, err) assert.Len(t, conditions, 1) @@ -1589,8 +1589,8 @@ func TestValidatePermissionsMultipleSources(t *testing.T) { Name: "does-exist", Server: "https://127.0.0.1:6443", } - db.On("GetClusterServersByName", t.Context(), "does-exist").Return([]string{"https://127.0.0.1:6443"}, nil) - db.On("GetCluster", t.Context(), "https://127.0.0.1:6443").Return(&cluster, nil) + db.EXPECT().GetClusterServersByName(mock.Anything, "does-exist").Return([]string{"https://127.0.0.1:6443"}, nil).Maybe() + db.EXPECT().GetCluster(mock.Anything, "https://127.0.0.1:6443").Return(&cluster, nil).Maybe() conditions, err := ValidatePermissions(t.Context(), &spec, &proj, db) require.NoError(t, err) assert.Empty(t, conditions) diff --git a/util/db/mocks/RepoCredsDB.go b/util/db/mocks/RepoCredsDB.go new file mode 100644 index 0000000000..733fe813ba --- /dev/null +++ b/util/db/mocks/RepoCredsDB.go @@ -0,0 +1,107 @@ +// Code generated by mockery; DO NOT EDIT. +// github.com/vektra/mockery +// template: testify + +package mocks + +import ( + "context" + + "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" + mock "github.com/stretchr/testify/mock" +) + +// NewRepoCredsDB creates a new instance of RepoCredsDB. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func NewRepoCredsDB(t interface { + mock.TestingT + Cleanup(func()) +}) *RepoCredsDB { + mock := &RepoCredsDB{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} + +// RepoCredsDB is an autogenerated mock type for the RepoCredsDB type +type RepoCredsDB struct { + mock.Mock +} + +type RepoCredsDB_Expecter struct { + mock *mock.Mock +} + +func (_m *RepoCredsDB) EXPECT() *RepoCredsDB_Expecter { + return &RepoCredsDB_Expecter{mock: &_m.Mock} +} + +// GetRepoCredsBySecretName provides a mock function for the type RepoCredsDB +func (_mock *RepoCredsDB) GetRepoCredsBySecretName(context1 context.Context, secretName string) (*v1alpha1.RepoCreds, error) { + ret := _mock.Called(context1, secretName) + + if len(ret) == 0 { + panic("no return value specified for GetRepoCredsBySecretName") + } + + var r0 *v1alpha1.RepoCreds + var r1 error + if returnFunc, ok := ret.Get(0).(func(context.Context, string) (*v1alpha1.RepoCreds, error)); ok { + return returnFunc(context1, secretName) + } + if returnFunc, ok := ret.Get(0).(func(context.Context, string) *v1alpha1.RepoCreds); ok { + r0 = returnFunc(context1, secretName) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1alpha1.RepoCreds) + } + } + if returnFunc, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = returnFunc(context1, secretName) + } else { + r1 = ret.Error(1) + } + return r0, r1 +} + +// RepoCredsDB_GetRepoCredsBySecretName_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'GetRepoCredsBySecretName' +type RepoCredsDB_GetRepoCredsBySecretName_Call struct { + *mock.Call +} + +// GetRepoCredsBySecretName is a helper method to define mock.On call +// - context1 context.Context +// - secretName string +func (_e *RepoCredsDB_Expecter) GetRepoCredsBySecretName(context1 interface{}, secretName interface{}) *RepoCredsDB_GetRepoCredsBySecretName_Call { + return &RepoCredsDB_GetRepoCredsBySecretName_Call{Call: _e.mock.On("GetRepoCredsBySecretName", context1, secretName)} +} + +func (_c *RepoCredsDB_GetRepoCredsBySecretName_Call) Run(run func(context1 context.Context, secretName string)) *RepoCredsDB_GetRepoCredsBySecretName_Call { + _c.Call.Run(func(args mock.Arguments) { + var arg0 context.Context + if args[0] != nil { + arg0 = args[0].(context.Context) + } + var arg1 string + if args[1] != nil { + arg1 = args[1].(string) + } + run( + arg0, + arg1, + ) + }) + return _c +} + +func (_c *RepoCredsDB_GetRepoCredsBySecretName_Call) Return(repoCreds *v1alpha1.RepoCreds, err error) *RepoCredsDB_GetRepoCredsBySecretName_Call { + _c.Call.Return(repoCreds, err) + return _c +} + +func (_c *RepoCredsDB_GetRepoCredsBySecretName_Call) RunAndReturn(run func(context1 context.Context, secretName string) (*v1alpha1.RepoCreds, error)) *RepoCredsDB_GetRepoCredsBySecretName_Call { + _c.Call.Return(run) + return _c +} diff --git a/util/git/client_test.go b/util/git/client_test.go index 659c956538..b28d7690a2 100644 --- a/util/git/client_test.go +++ b/util/git/client_test.go @@ -910,7 +910,7 @@ func Test_nativeGitClient_CommitAndPush(t *testing.T) { func Test_newAuth_AzureWorkloadIdentity(t *testing.T) { tokenprovider := new(mocks.TokenProvider) - tokenprovider.On("GetToken", azureDevopsEntraResourceId).Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) + tokenprovider.EXPECT().GetToken(azureDevopsEntraResourceId).Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil).Maybe() creds := AzureWorkloadIdentityCreds{store: NoopCredsStore{}, tokenProvider: tokenprovider} diff --git a/util/git/creds_test.go b/util/git/creds_test.go index e369edb310..b34927e4ad 100644 --- a/util/git/creds_test.go +++ b/util/git/creds_test.go @@ -425,8 +425,8 @@ func TestGoogleCloudCreds_Environ_cleanup(t *testing.T) { func TestAzureWorkloadIdentityCreds_Environ(t *testing.T) { resetAzureTokenCache() store := &memoryCredsStore{creds: make(map[string]cred)} - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", azureDevopsEntraResourceId).Return(&workloadidentity.Token{AccessToken: "accessToken", ExpiresOn: time.Now().Add(time.Minute)}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken(azureDevopsEntraResourceId).Return(&workloadidentity.Token{AccessToken: "accessToken", ExpiresOn: time.Now().Add(time.Minute)}, nil).Maybe() creds := AzureWorkloadIdentityCreds{store, workloadIdentityMock} _, env, err := creds.Environ() require.NoError(t, err) @@ -444,8 +444,8 @@ func TestAzureWorkloadIdentityCreds_Environ(t *testing.T) { func TestAzureWorkloadIdentityCreds_Environ_cleanup(t *testing.T) { resetAzureTokenCache() store := &memoryCredsStore{creds: make(map[string]cred)} - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", azureDevopsEntraResourceId).Return(&workloadidentity.Token{AccessToken: "accessToken", ExpiresOn: time.Now().Add(time.Minute)}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken(azureDevopsEntraResourceId).Return(&workloadidentity.Token{AccessToken: "accessToken", ExpiresOn: time.Now().Add(time.Minute)}, nil).Maybe() creds := AzureWorkloadIdentityCreds{store, workloadIdentityMock} closer, _, err := creds.Environ() require.NoError(t, err) @@ -457,8 +457,8 @@ func TestAzureWorkloadIdentityCreds_Environ_cleanup(t *testing.T) { func TestAzureWorkloadIdentityCreds_GetUserInfo(t *testing.T) { resetAzureTokenCache() store := &memoryCredsStore{creds: make(map[string]cred)} - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", azureDevopsEntraResourceId).Return(&workloadidentity.Token{AccessToken: "accessToken", ExpiresOn: time.Now().Add(time.Minute)}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken(azureDevopsEntraResourceId).Return(&workloadidentity.Token{AccessToken: "accessToken", ExpiresOn: time.Now().Add(time.Minute)}, nil).Maybe() creds := AzureWorkloadIdentityCreds{store, workloadIdentityMock} user, email, err := creds.GetUserInfo(t.Context()) @@ -477,10 +477,10 @@ func TestGetHelmCredsShouldReturnHelmCredsIfAzureWorkloadIdentityNotSpecified(t func TestAzureWorkloadIdentityCreds_FetchNewTokenIfExistingIsExpired(t *testing.T) { resetAzureTokenCache() store := &memoryCredsStore{creds: make(map[string]cred)} - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", azureDevopsEntraResourceId). + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken(azureDevopsEntraResourceId). Return(&workloadidentity.Token{AccessToken: "firstToken", ExpiresOn: time.Now().Add(time.Minute)}, nil).Once() - workloadIdentityMock.On("GetToken", azureDevopsEntraResourceId). + workloadIdentityMock.EXPECT().GetToken(azureDevopsEntraResourceId). Return(&workloadidentity.Token{AccessToken: "secondToken"}, nil).Once() creds := AzureWorkloadIdentityCreds{store, workloadIdentityMock} token, err := creds.GetAzureDevOpsAccessToken() @@ -496,11 +496,11 @@ func TestAzureWorkloadIdentityCreds_FetchNewTokenIfExistingIsExpired(t *testing. func TestAzureWorkloadIdentityCreds_ReuseTokenIfExistingIsNotExpired(t *testing.T) { resetAzureTokenCache() store := &memoryCredsStore{creds: make(map[string]cred)} - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} firstToken := &workloadidentity.Token{AccessToken: "firstToken", ExpiresOn: time.Now().Add(6 * time.Minute)} secondToken := &workloadidentity.Token{AccessToken: "secondToken"} - workloadIdentityMock.On("GetToken", azureDevopsEntraResourceId).Return(firstToken, nil).Once() - workloadIdentityMock.On("GetToken", azureDevopsEntraResourceId).Return(secondToken, nil).Once() + workloadIdentityMock.EXPECT().GetToken(azureDevopsEntraResourceId).Return(firstToken, nil).Once() + workloadIdentityMock.EXPECT().GetToken(azureDevopsEntraResourceId).Return(secondToken, nil).Once() creds := AzureWorkloadIdentityCreds{store, workloadIdentityMock} token, err := creds.GetAzureDevOpsAccessToken() require.NoError(t, err) diff --git a/util/github_app/repos_test.go b/util/github_app/repos_test.go index d2adb57d24..eef50cb302 100644 --- a/util/github_app/repos_test.go +++ b/util/github_app/repos_test.go @@ -10,6 +10,7 @@ import ( "github.com/argoproj/argo-cd/v3/applicationset/services/github_app_auth" "github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v3/util/db/mocks" ) type ArgocdRepositoryMock struct { @@ -43,9 +44,9 @@ func Test_repoAsCredentials_GetAuth(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - m := mock.Mock{} - m.On("GetRepoCredsBySecretName", mock.Anything, mock.Anything).Return(&tt.repo, nil) - creds := NewAuthCredentials(ArgocdRepositoryMock{mock: &m}) + m := &mocks.RepoCredsDB{} + m.EXPECT().GetRepoCredsBySecretName(mock.Anything, mock.Anything).Return(&tt.repo, nil) + creds := NewAuthCredentials(m) auth, err := creds.GetAuthSecret(t.Context(), "https://github.com/foo") if tt.wantErr { diff --git a/util/helm/client_test.go b/util/helm/client_test.go index 95d10f32fa..3f913dc681 100644 --- a/util/helm/client_test.go +++ b/util/helm/client_test.go @@ -308,8 +308,8 @@ func TestGetTagsFromURLPrivateRepoWithAzureWorkloadIdentityAuthentication(t *tes return mockServerURL } - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", "https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken("https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) mockServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t.Logf("called %s", r.URL.Path) diff --git a/util/helm/creds_test.go b/util/helm/creds_test.go index 627745b8c8..720f2cff87 100644 --- a/util/helm/creds_test.go +++ b/util/helm/creds_test.go @@ -18,7 +18,7 @@ import ( ) func TestWorkLoadIdentityUserNameShouldBeEmptyGuid(t *testing.T) { - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} creds := NewAzureWorkloadIdentityCreds("contoso.azurecr.io/charts", "", nil, nil, false, workloadIdentityMock) username := creds.GetUsername() @@ -26,7 +26,7 @@ func TestWorkLoadIdentityUserNameShouldBeEmptyGuid(t *testing.T) { } func TestGetAccessTokenShouldReturnTokenFromCacheIfPresent(t *testing.T) { - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} creds := NewAzureWorkloadIdentityCreds("contoso.azurecr.io/charts", "", nil, nil, false, workloadIdentityMock) cacheKey, err := argoutils.GenerateCacheKey("accesstoken-%s", "contoso.azurecr.io") @@ -42,7 +42,7 @@ func TestGetAccessTokenShouldReturnTokenFromCacheIfPresent(t *testing.T) { } func TestGetPasswordShouldReturnTokenFromCacheIfPresent(t *testing.T) { - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} creds := NewAzureWorkloadIdentityCreds("contoso.azurecr.io/charts", "", nil, nil, false, workloadIdentityMock) cacheKey, err := argoutils.GenerateCacheKey("accesstoken-%s", "contoso.azurecr.io") @@ -80,8 +80,8 @@ func TestGetPasswordShouldGenerateTokenIfNotPresentInCache(t *testing.T) { mockServerURL = mockServer.URL defer mockServer.Close() - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", "https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken("https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil).Maybe() creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) // Retrieve the token from the cache @@ -99,7 +99,7 @@ func TestChallengeAzureContainerRegistry(t *testing.T) { })) defer mockServer.Close() - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) tokenParams, err := creds.challengeAzureContainerRegistry(t.Context(), creds.repoURL) @@ -121,7 +121,7 @@ func TestChallengeAzureContainerRegistryNoChallenge(t *testing.T) { defer mockServer.Close() // Replace the real URL with the mock server URL - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) _, err := creds.challengeAzureContainerRegistry(t.Context(), creds.repoURL) @@ -139,7 +139,7 @@ func TestChallengeAzureContainerRegistryNonBearer(t *testing.T) { defer mockServer.Close() // Replace the real URL with the mock server URL - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) _, err := creds.challengeAzureContainerRegistry(t.Context(), creds.repoURL) @@ -156,7 +156,7 @@ func TestChallengeAzureContainerRegistryNoService(t *testing.T) { defer mockServer.Close() // Replace the real URL with the mock server URL - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) _, err := creds.challengeAzureContainerRegistry(t.Context(), creds.repoURL) @@ -173,7 +173,7 @@ func TestChallengeAzureContainerRegistryNoRealm(t *testing.T) { defer mockServer.Close() // Replace the real URL with the mock server URL - workloadIdentityMock := new(mocks.TokenProvider) + workloadIdentityMock := &mocks.TokenProvider{} creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) _, err := creds.challengeAzureContainerRegistry(t.Context(), creds.repoURL) @@ -192,8 +192,8 @@ func TestGetAccessTokenAfterChallenge_Success(t *testing.T) { })) defer mockServer.Close() - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", "https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken("https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil).Maybe() creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) tokenParams := map[string]string{ @@ -217,8 +217,8 @@ func TestGetAccessTokenAfterChallenge_Failure(t *testing.T) { defer mockServer.Close() // Create an instance of AzureWorkloadIdentityCreds with the mock credential wrapper - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", "https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken("https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil).Maybe() creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) tokenParams := map[string]string{ @@ -242,8 +242,8 @@ func TestGetAccessTokenAfterChallenge_MalformedResponse(t *testing.T) { defer mockServer.Close() // Create an instance of AzureWorkloadIdentityCreds with the mock credential wrapper - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", "https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken("https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil).Maybe() creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) tokenParams := map[string]string{ @@ -305,8 +305,8 @@ func TestGetAccessToken_FetchNewTokenIfExistingIsExpired(t *testing.T) { defer mockServer.Close() mockServerURL = mockServer.URL - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", "https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken("https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil).Maybe() creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) refreshToken, err := creds.GetAccessToken() @@ -359,8 +359,8 @@ func TestGetAccessToken_ReuseTokenIfExistingIsNotExpired(t *testing.T) { defer mockServer.Close() mockServerURL = mockServer.URL - workloadIdentityMock := new(mocks.TokenProvider) - workloadIdentityMock.On("GetToken", "https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil) + workloadIdentityMock := &mocks.TokenProvider{} + workloadIdentityMock.EXPECT().GetToken("https://management.core.windows.net/.default").Return(&workloadidentity.Token{AccessToken: "accessToken"}, nil).Maybe() creds := NewAzureWorkloadIdentityCreds(mockServer.URL[8:], "", nil, nil, true, workloadIdentityMock) refreshToken, err := creds.GetAccessToken() diff --git a/util/webhook/webhook_test.go b/util/webhook/webhook_test.go index 255f263c83..088af79fde 100644 --- a/util/webhook/webhook_test.go +++ b/util/webhook/webhook_test.go @@ -79,8 +79,8 @@ func NewMockHandlerWithPayloadLimit(reactor *reactorDef, applicationNamespaces [ } func NewMockHandlerForBitbucketCallback(reactor *reactorDef, applicationNamespaces []string, objects ...runtime.Object) *ArgoCDWebhookHandler { - mockDB := mocks.ArgoDB{} - mockDB.On("ListRepositories", mock.Anything).Return( + mockDB := &mocks.ArgoDB{} + mockDB.EXPECT().ListRepositories(mock.Anything).Return( []*v1alpha1.Repository{ { Repo: "https://bitbucket.org/test/argocd-examples-pub.git", @@ -99,7 +99,7 @@ func NewMockHandlerForBitbucketCallback(reactor *reactorDef, applicationNamespac }, nil) argoSettings := settings.ArgoCDSettings{WebhookBitbucketUUID: "abcd-efgh-ijkl-mnop"} defaultMaxPayloadSize := int64(50) * 1024 * 1024 - return newMockHandler(reactor, applicationNamespaces, defaultMaxPayloadSize, &mockDB, &argoSettings, objects...) + return newMockHandler(reactor, applicationNamespaces, defaultMaxPayloadSize, mockDB, &argoSettings, objects...) } type fakeAppsLister struct {