diff --git a/pkg/argocd/gitcreds_test.go b/pkg/argocd/gitcreds_test.go new file mode 100644 index 00000000..02f23dff --- /dev/null +++ b/pkg/argocd/gitcreds_test.go @@ -0,0 +1,51 @@ +package argocd + +import ( + "testing" + + "github.com/argoproj-labs/argocd-image-updater/ext/git" + "github.com/argoproj-labs/argocd-image-updater/pkg/kube" + "github.com/argoproj-labs/argocd-image-updater/test/fake" + "github.com/argoproj-labs/argocd-image-updater/test/fixture" + + "github.com/stretchr/testify/assert" +) + +func TestGetCredsFromSecret(t *testing.T) { + wbc := &WriteBackConfig{ + GitRepo: "https://github.com/example/repo.git", + GitCreds: git.NoopCredsStore{}, + } + + secret1 := fixture.NewSecret("foo", "bar", map[string][]byte{"username": []byte("myuser"), "password": []byte("mypass")}) + secret2 := fixture.NewSecret("foo1", "bar1", map[string][]byte{"username": []byte("myuser")}) + kubeClient := kube.KubernetesClient{ + Clientset: fake.NewFakeClientsetWithResources(secret1, secret2), + } + + // Test case 1: Valid secret reference + credentialsSecret := "foo/bar" + expectedCreds := git.NewHTTPSCreds("myuser", "mypass", "", "", true, "", wbc.GitCreds, false) + creds, err := getCredsFromSecret(wbc, credentialsSecret, &kubeClient) + assert.NoError(t, err) + assert.Equal(t, expectedCreds, creds) + + // Test case 2: Invalid secret reference + credentialsSecret = "invalid" + _, err = getCredsFromSecret(wbc, credentialsSecret, &kubeClient) + assert.Error(t, err) + assert.EqualError(t, err, "secret ref must be in format 'namespace/name', but is 'invalid'") + + // Test case 3: Missing field in secret + credentialsSecret = "foo1/bar1" + _, err = getCredsFromSecret(wbc, credentialsSecret, &kubeClient) + assert.Error(t, err) + assert.EqualError(t, err, "invalid secret foo1/bar1: does not contain field password") + + // Test case 4: Unknown repository type + credentialsSecret = "foo/bar" + wbc.GitRepo = "unknown://example.com/repo.git" + _, err = getCredsFromSecret(wbc, credentialsSecret, &kubeClient) + assert.Error(t, err) + assert.EqualError(t, err, "unknown repository type") +} diff --git a/pkg/argocd/update_test.go b/pkg/argocd/update_test.go index ca004604..7896a992 100644 --- a/pkg/argocd/update_test.go +++ b/pkg/argocd/update_test.go @@ -3185,3 +3185,24 @@ func mockGit(t *testing.T) (gitMock *gitmock.Client, dir string, cleanup func()) _ = os.RemoveAll(dir) } } + +func Test_GetRepositoryLock(t *testing.T) { + state := NewSyncIterationState() + + // Test case 1: Get lock for a repository that doesn't exist in the state + repo1 := "repo1" + lock1 := state.GetRepositoryLock(repo1) + require.NotNil(t, lock1) + require.Equal(t, lock1, state.repositoryLocks[repo1]) + + // Test case 2: Get lock for the same repository again, should return the same lock + lock2 := state.GetRepositoryLock(repo1) + require.Equal(t, lock1, lock2) + + // Test case 3: Get lock for a different repository, should return a different lock + repo2 := "repo2" + lock3 := state.GetRepositoryLock(repo2) + require.NotNil(t, lock3) + require.NotNil(t, state.repositoryLocks[repo2]) + require.Equal(t, lock3, state.repositoryLocks[repo2]) +}