Skip to content

Commit 52f7fb1

Browse files
committed
test(internal/api): test BackupInfo unmarshaling
1 parent dcf308f commit 52f7fb1

File tree

2 files changed

+145
-42
lines changed

2 files changed

+145
-42
lines changed

internal/api/backup.go

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@ import (
1111
)
1212

1313
type BackupInfo struct {
14-
Backend string
15-
ID string
16-
Path string
17-
Error string
18-
Status BackupStatus
19-
StartedAt time.Time
20-
CompletedAt time.Time
21-
14+
Backend string
15+
ID string
16+
Bucket string
17+
Path string
18+
Error string
19+
Status BackupStatus
20+
21+
StartedAt *time.Time
22+
CompletedAt *time.Time
2223
IncludesCollections []string
2324
SizeGiB *float32
2425
}
@@ -43,9 +44,11 @@ const (
4344
BackupStatusStarted BackupStatus = BackupStatus(rest.BackupListResponseStatusSTARTED)
4445
BackupStatusTransferring BackupStatus = BackupStatus(rest.BackupListResponseStatusTRANSFERRING)
4546
BackupStatusTransferred BackupStatus = BackupStatus(rest.BackupListResponseStatusTRANSFERRED)
47+
BackupStatusFinalizing BackupStatus = BackupStatus(rest.BackupListResponseStatusFINALIZING)
48+
BackupStatusCanceling BackupStatus = BackupStatus(rest.BackupListResponseStatusCANCELLING)
49+
BackupStatusCanceled BackupStatus = BackupStatus(rest.BackupListResponseStatusCANCELED)
4650
BackupStatusSuccess BackupStatus = BackupStatus(rest.BackupListResponseStatusSUCCESS)
4751
BackupStatusFailed BackupStatus = BackupStatus(rest.BackupListResponseStatusFAILED)
48-
BackupStatusCanceled BackupStatus = BackupStatus(rest.BackupListResponseStatusCANCELED)
4952
)
5053

5154
type RBACRestoreOption string
@@ -65,17 +68,17 @@ const (
6568
type CreateBackupRequest struct {
6669
transports.BaseEndpoint
6770

68-
Backend string // Required: backend storage.
69-
ID string // Required: backup ID.
70-
BackupPath string
71-
Endpoint string
72-
Bucket string
73-
IncludeCollections []string
74-
ExcludeCollections []string
75-
MaxCPUPercentage int
76-
ChunkSizeMiB int
77-
CompressionLevel BackupCompressionLevel
78-
IncrementalBackupBaseID string
71+
Backend string // Required: backend storage.
72+
ID string // Required: backup ID.
73+
BackupPath string
74+
Endpoint string
75+
Bucket string
76+
IncludeCollections []string
77+
ExcludeCollections []string
78+
PrefixIncremental string
79+
MaxCPUPercentage int
80+
ChunkSizeMiB int
81+
CompressionLevel BackupCompressionLevel
7982
}
8083

8184
// Compile-time assertion that CreateBackupRequest implements [transports.Endpoint].
@@ -183,7 +186,7 @@ func (r *CreateBackupRequest) MarshalJSON() ([]byte, error) {
183186
Id: r.ID,
184187
Include: r.IncludeCollections,
185188
Exclude: r.ExcludeCollections,
186-
IncrementalBaseBackupId: r.IncrementalBackupBaseID,
189+
IncrementalBaseBackupId: r.PrefixIncremental,
187190
Config: rest.BackupConfig{
188191
Path: r.BackupPath,
189192
Bucket: r.Bucket,
@@ -218,16 +221,17 @@ func (r *RestoreBackupRequest) MarshalJSON() ([]byte, error) {
218221
// UnmarshalJSON implements json.Unmarshaler.
219222
func (b *BackupInfo) UnmarshalJSON(data []byte) error {
220223
var bak struct {
221-
ID string `json:"id,omitempty"`
222-
Path string `json:"path,omitempty"`
223-
Backend string `json:"backend,omitempty"`
224-
Error string `json:"error,omitempty"`
225-
Status BackupStatus `json:"status,omitempty"`
226-
StartedAt time.Time `json:"startedAt"`
227-
CompletedAt time.Time `json:"completedAt"`
228-
229-
IncludesCollections []string `json:"classes,omitempty"`
230-
SizeGiB *float32 `json:"size,omitempty"`
224+
Backend string `json:"backend,omitempty"`
225+
ID string `json:"id,omitempty"`
226+
Bucket string `json:"bucket,omitempty"`
227+
Path string `json:"path,omitempty"`
228+
Error string `json:"error,omitempty"`
229+
Status BackupStatus `json:"status,omitempty"`
230+
231+
IncludesCollections []string `json:"classes,omitempty"`
232+
StartedAt *time.Time `json:"startedAt,omitempty"`
233+
CompletedAt *time.Time `json:"completedAt,omitempty"`
234+
SizeGiB *float32 `json:"size,omitempty"`
231235
}
232236

233237
if err := json.Unmarshal(data, &bak); err != nil {
@@ -237,6 +241,7 @@ func (b *BackupInfo) UnmarshalJSON(data []byte) error {
237241
*b = BackupInfo{
238242
Backend: bak.Backend,
239243
ID: bak.ID,
244+
Bucket: bak.Bucket,
240245
Path: bak.Path,
241246
Error: bak.Error,
242247
Status: bak.Status,

internal/api/endpoint_test.go

Lines changed: 109 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -420,17 +420,17 @@ func TestRESTRequests(t *testing.T) {
420420
{
421421
name: "create backup request",
422422
req: &api.CreateBackupRequest{
423-
Backend: "filesystem",
424-
ID: "bak-1",
425-
BackupPath: "/path/to/backup",
426-
Endpoint: "s3.amazonaws.com",
427-
Bucket: "my-backups",
428-
IncludeCollections: []string{"Songs"},
429-
ExcludeCollections: []string{"Pizza"},
430-
MaxCPUPercentage: 92,
431-
ChunkSizeMiB: 20,
432-
CompressionLevel: api.BackupCompressionLevelDefault,
433-
IncrementalBackupBaseID: "incr-bak-",
423+
Backend: "filesystem",
424+
ID: "bak-1",
425+
BackupPath: "/path/to/backup",
426+
Endpoint: "s3.amazonaws.com",
427+
Bucket: "my-backups",
428+
IncludeCollections: []string{"Songs"},
429+
ExcludeCollections: []string{"Pizza"},
430+
PrefixIncremental: "incr-bak-",
431+
MaxCPUPercentage: 92,
432+
ChunkSizeMiB: 20,
433+
CompressionLevel: api.BackupCompressionLevelDefault,
434434
},
435435
wantMethod: http.MethodPost,
436436
wantPath: "/backups/filesystem",
@@ -836,6 +836,104 @@ func TestRESTResponses(t *testing.T) {
836836
},
837837
},
838838
},
839+
{
840+
name: "backup create response",
841+
body: &rest.BackupCreateResponse{
842+
Backend: "filesystem",
843+
Id: "bak-1",
844+
Bucket: "my-backups",
845+
Path: "/path/to/backup",
846+
Classes: []string{"Songs"},
847+
Error: "whaam!",
848+
Status: rest.BackupCreateResponseStatusFAILED,
849+
},
850+
dest: new(api.BackupInfo),
851+
want: &api.BackupInfo{
852+
Backend: "filesystem",
853+
ID: "bak-1",
854+
Bucket: "my-backups",
855+
Path: "/path/to/backup",
856+
IncludesCollections: []string{"Songs"},
857+
Error: "whaam!",
858+
Status: api.BackupStatusFailed,
859+
},
860+
},
861+
{
862+
name: "backup restore response",
863+
body: &rest.BackupRestoreResponse{
864+
Backend: "filesystem",
865+
Id: "bak-1",
866+
Path: "/path/to/backup",
867+
Classes: []string{"Songs"},
868+
Error: "whaam!",
869+
Status: rest.BackupRestoreResponseStatusFAILED,
870+
},
871+
dest: new(api.BackupInfo),
872+
want: &api.BackupInfo{
873+
Backend: "filesystem",
874+
ID: "bak-1",
875+
Path: "/path/to/backup",
876+
IncludesCollections: []string{"Songs"},
877+
Error: "whaam!",
878+
Status: api.BackupStatusFailed,
879+
},
880+
},
881+
{
882+
name: "backup create status response",
883+
body: &rest.BackupCreateStatusResponse{
884+
Backend: "filesystem",
885+
Id: "bak-1",
886+
Path: "/path/to/backup",
887+
Status: rest.BackupCreateStatusResponseStatusSUCCESS,
888+
Size: 92,
889+
},
890+
dest: new(api.BackupInfo),
891+
want: &api.BackupInfo{
892+
Backend: "filesystem",
893+
ID: "bak-1",
894+
Path: "/path/to/backup",
895+
Status: api.BackupStatusSuccess,
896+
SizeGiB: testkit.Ptr[float32](92),
897+
StartedAt: testkit.Ptr(time.Time{}),
898+
CompletedAt: testkit.Ptr(time.Time{}),
899+
},
900+
},
901+
{
902+
name: "backup list response",
903+
body: rest.BackupListResponse{
904+
{
905+
Id: "bak-1",
906+
Classes: []string{"Artists"},
907+
Status: rest.BackupListResponseStatusTRANSFERRING,
908+
Size: 92,
909+
},
910+
{
911+
Id: "bak-2",
912+
Classes: []string{"Songs"},
913+
Status: rest.BackupListResponseStatusTRANSFERRED,
914+
Size: 80085,
915+
},
916+
},
917+
dest: new([]api.BackupInfo),
918+
want: &[]api.BackupInfo{
919+
{
920+
ID: "bak-1",
921+
IncludesCollections: []string{"Artists"},
922+
Status: api.BackupStatusTransferring,
923+
SizeGiB: testkit.Ptr[float32](92),
924+
StartedAt: testkit.Ptr(time.Time{}),
925+
CompletedAt: testkit.Ptr(time.Time{}),
926+
},
927+
{
928+
ID: "bak-2",
929+
IncludesCollections: []string{"Songs"},
930+
Status: api.BackupStatusTransferred,
931+
SizeGiB: testkit.Ptr[float32](80085),
932+
StartedAt: testkit.Ptr(time.Time{}),
933+
CompletedAt: testkit.Ptr(time.Time{}),
934+
},
935+
},
936+
},
839937
} {
840938
t.Run(tt.name, func(t *testing.T) {
841939
require.NotNil(t, tt.body, "incomplete test case: body is nil")

0 commit comments

Comments
 (0)