@@ -751,85 +751,6 @@ var _ = Describe("BackupCronJobReconciler", func() {
751751 })
752752 })
753753
754- Context ("copySecret" , func () {
755- It ("creates a new secret in workspace namespace" , func () {
756- dw := createDevWorkspace ("dw-copy-secret" , "ns-copy-secret" , false , metav1 .NewTime (time .Now ().Add (- 10 * time .Minute )))
757- dw .Status .DevWorkspaceId = "id-copy-secret"
758- Expect (fakeClient .Create (ctx , dw )).To (Succeed ())
759-
760- sourceSecret := & corev1.Secret {
761- ObjectMeta : metav1.ObjectMeta {
762- Name : "source-secret" ,
763- Namespace : nameNamespace .Namespace ,
764- },
765- Data : map [string ][]byte {
766- ".dockerconfigjson" : []byte (`{"auths":{"registry.example.com":{"auth":"dGVzdDp0ZXN0"}}}` ),
767- },
768- Type : corev1 .SecretTypeDockerConfigJson ,
769- }
770-
771- copiedSecret , err := reconciler .copySecret (ctx , dw , sourceSecret , log )
772- Expect (err ).ToNot (HaveOccurred ())
773- Expect (copiedSecret ).ToNot (BeNil ())
774- Expect (copiedSecret .Name ).To (Equal (constants .DevWorkspaceBackupAuthSecretName ))
775- Expect (copiedSecret .Namespace ).To (Equal (dw .Namespace ))
776- Expect (copiedSecret .Data ).To (Equal (sourceSecret .Data ))
777- Expect (copiedSecret .Type ).To (Equal (sourceSecret .Type ))
778- Expect (copiedSecret .Labels ).To (HaveKeyWithValue (constants .DevWorkspaceIDLabel , dw .Status .DevWorkspaceId ))
779- Expect (copiedSecret .Labels ).To (HaveKeyWithValue (constants .DevWorkspaceWatchSecretLabel , "true" ))
780-
781- // Verify the secret was actually created
782- createdSecret := & corev1.Secret {}
783- err = fakeClient .Get (ctx , types.NamespacedName {
784- Name : constants .DevWorkspaceBackupAuthSecretName ,
785- Namespace : dw .Namespace ,
786- }, createdSecret )
787- Expect (err ).ToNot (HaveOccurred ())
788- })
789-
790- It ("deletes existing secret before creating new one" , func () {
791- dw := createDevWorkspace ("dw-replace-secret" , "ns-replace-secret" , false , metav1 .NewTime (time .Now ().Add (- 10 * time .Minute )))
792- dw .Status .DevWorkspaceId = "id-replace-secret"
793- Expect (fakeClient .Create (ctx , dw )).To (Succeed ())
794-
795- // Create an existing secret
796- existingSecret := & corev1.Secret {
797- ObjectMeta : metav1.ObjectMeta {
798- Name : constants .DevWorkspaceBackupAuthSecretName ,
799- Namespace : dw .Namespace ,
800- },
801- Data : map [string ][]byte {
802- ".dockerconfigjson" : []byte (`{"old":"data"}` ),
803- },
804- Type : corev1 .SecretTypeDockerConfigJson ,
805- }
806- Expect (fakeClient .Create (ctx , existingSecret )).To (Succeed ())
807-
808- sourceSecret := & corev1.Secret {
809- ObjectMeta : metav1.ObjectMeta {
810- Name : "new-source-secret" ,
811- Namespace : nameNamespace .Namespace ,
812- },
813- Data : map [string ][]byte {
814- ".dockerconfigjson" : []byte (`{"new":"data"}` ),
815- },
816- Type : corev1 .SecretTypeDockerConfigJson ,
817- }
818-
819- copiedSecret , err := reconciler .copySecret (ctx , dw , sourceSecret , log )
820- Expect (err ).ToNot (HaveOccurred ())
821- Expect (copiedSecret .Data ).To (Equal (sourceSecret .Data ))
822-
823- // Verify the secret has the new data
824- updatedSecret := & corev1.Secret {}
825- err = fakeClient .Get (ctx , types.NamespacedName {
826- Name : constants .DevWorkspaceBackupAuthSecretName ,
827- Namespace : dw .Namespace ,
828- }, updatedSecret )
829- Expect (err ).ToNot (HaveOccurred ())
830- Expect (updatedSecret .Data ).To (Equal (sourceSecret .Data ))
831- })
832- })
833754 Context ("wasStoppedSinceLastBackup" , func () {
834755 It ("returns true if DevWorkspace was stopped since last backup" , func () {
835756 lastBackupTime := metav1 .NewTime (time .Now ().Add (- 30 * time .Minute ))
@@ -934,6 +855,20 @@ var _ = Describe("BackupCronJobReconciler", func() {
934855 Expect (result ).To (BeTrue ())
935856 })
936857
858+ It ("falls back to global last backup time when annotations is empty" , func () {
859+ globalLastBackupTime := metav1 .NewTime (time .Now ().Add (- 20 * time .Minute ))
860+ workspaceStoppedTime := metav1 .NewTime (time .Now ().Add (- 10 * time .Minute ))
861+
862+ dw := createDevWorkspace ("dw-test-empty-annotations" , "ns-test-empty-annotations" , false , workspaceStoppedTime )
863+ // Explicitly ensure annotations is empty
864+ dw .Annotations = map [string ]string {}
865+
866+ // With global time (-20min), workspace stopped at -10min, should return true
867+ // lastBackupSuccessful should be treated as true when falling back
868+ result := reconciler .wasStoppedSinceLastBackup (dw , & globalLastBackupTime , log )
869+ Expect (result ).To (BeTrue ())
870+ })
871+
937872 It ("returns false when annotations are nil and workspace stopped before global backup time" , func () {
938873 globalLastBackupTime := metav1 .NewTime (time .Now ().Add (- 5 * time .Minute ))
939874 workspaceStoppedTime := metav1 .NewTime (time .Now ().Add (- 10 * time .Minute ))
@@ -946,6 +881,19 @@ var _ = Describe("BackupCronJobReconciler", func() {
946881 result := reconciler .wasStoppedSinceLastBackup (dw , & globalLastBackupTime , log )
947882 Expect (result ).To (BeFalse ())
948883 })
884+
885+ It ("returns false when annotations is empty and workspace stopped before global backup time" , func () {
886+ globalLastBackupTime := metav1 .NewTime (time .Now ().Add (- 5 * time .Minute ))
887+ workspaceStoppedTime := metav1 .NewTime (time .Now ().Add (- 10 * time .Minute ))
888+
889+ dw := createDevWorkspace ("dw-test-empty-old-stop" , "ns-test-empty-old-stop" , false , workspaceStoppedTime )
890+ // Explicitly ensure annotations is empty
891+ dw .Annotations = map [string ]string {}
892+
893+ // With global time (-5min), workspace stopped at -10min, should return false
894+ result := reconciler .wasStoppedSinceLastBackup (dw , & globalLastBackupTime , log )
895+ Expect (result ).To (BeFalse ())
896+ })
949897 })
950898
951899})
0 commit comments