package couchdb import ( "context" "errors" "testing" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/fake" ) func TestReplicationSecretMigration(t *testing.T) { replicationSecret := &corev1.Secret{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", Kind: "Secret", }, ObjectMeta: metav1.ObjectMeta{ Namespace: Namespace, Name: StoreServerName, }, Data: map[string][]byte{ SecretUsername: SecretUsernameData, SecretPassword: SecretPasswordData, SecretAdminsIni: SecretAdminsIniData, }, } ctx := context.Background() cl := fake.NewClientBuilder().Build() assert.NoError(t, cl.Create(ctx, replicationSecret)) secretKey := client.ObjectKeyFromObject(replicationSecret) replCreds := &ReplicationCredentials{UserCredentials: UserCredentials{ URI: SecretURIData, }, DBName: SecretDBNameData} _, err := replCreds.FromSecret(ctx, cl, secretKey) assert.True(t, errors.Is(err, ErrCouchDBURIMissing)) // migrate updatedSecret, err := replCreds.ToSecret(ctx, cl, secretKey) assert.NoError(t, err) assert.Equal(t, updatedSecret.Data[SecretUsername], replicationSecret.Data[SecretUsername]) assert.Equal(t, updatedSecret.Data[SecretPassword], replicationSecret.Data[SecretPassword]) assert.True(t, len(updatedSecret.Data[SecretAdminsIni]) == 0) // this should be updated assert.Equal(t, updatedSecret.Data[SecretURI], SecretURIData) assert.Equal(t, updatedSecret.Data[SecretDBName], SecretDBNameData) } func TestReplicationSecretAlreadyMigrated(t *testing.T) { replicationSecret := &corev1.Secret{ TypeMeta: metav1.TypeMeta{ APIVersion: "v1", Kind: "Secret", }, ObjectMeta: metav1.ObjectMeta{ Namespace: Namespace, Name: StoreServerName, }, Data: map[string][]byte{ SecretUsername: SecretUsernameData, SecretPassword: SecretPasswordData, SecretURI: SecretURIData, SecretDBName: SecretDBNameData, }, } ctx := context.Background() cl := fake.NewClientBuilder().Build() assert.NoError(t, cl.Create(ctx, replicationSecret)) secretKey := client.ObjectKeyFromObject(replicationSecret) replCreds := &ReplicationCredentials{UserCredentials: UserCredentials{ URI: SecretURIData, }, DBName: SecretDBNameData} _, err := replCreds.FromSecret(ctx, cl, secretKey) assert.NoError(t, err) updatedSecret := &corev1.Secret{} assert.NoError(t, cl.Get(ctx, secretKey, updatedSecret)) assert.Equal(t, updatedSecret.Data[SecretUsername], replicationSecret.Data[SecretUsername]) assert.Equal(t, updatedSecret.Data[SecretPassword], replicationSecret.Data[SecretPassword]) assert.True(t, len(updatedSecret.Data[SecretAdminsIni]) == 0) // this should be updated assert.Equal(t, updatedSecret.Data[SecretURI], replicationSecret.Data[SecretURI]) assert.Equal(t, updatedSecret.Data[SecretDBName], replicationSecret.Data[SecretDBName]) }