From 5826c67bbe718c29e14f1c6220727de7c355623f Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Tue, 10 Mar 2020 13:47:02 +0000 Subject: [PATCH 1/4] CLOUDP-58633: Add Restore Jobs support to atlas client --- mongodbatlas/continuous_backup_restore_job.go | 165 +++++++++ .../continuous_backup_restore_job_test.go | 317 ++++++++++++++++++ mongodbatlas/mongodbatlas.go | 2 + 3 files changed, 484 insertions(+) create mode 100644 mongodbatlas/continuous_backup_restore_job.go create mode 100644 mongodbatlas/continuous_backup_restore_job_test.go diff --git a/mongodbatlas/continuous_backup_restore_job.go b/mongodbatlas/continuous_backup_restore_job.go new file mode 100644 index 000000000..ac8ac6343 --- /dev/null +++ b/mongodbatlas/continuous_backup_restore_job.go @@ -0,0 +1,165 @@ +package mongodbatlas + +import ( + "context" + "fmt" + "net/http" +) + +const continuousBackupRestoreJobsPath = "/groups/%s/clusters/%s/restoreJobs" + +type ContinuousBackupRestoreJobsService interface { + List(context.Context, string, string, *ListOptions) (*ContinuousBackupJobs, *Response, error) + Get(context.Context, string, string, string) (*ContinuousBackupJob, *Response, error) + Create(context.Context, string, string, *JobRequest) (*ContinuousBackupJob, *Response, error) +} + +// ContinuousBackupRestoreJobsServiceOp handles communication with the Continuous Backup Restore Jobs related methods +// of the MongoDB Atlas API +type ContinuousBackupRestoreJobsServiceOp struct { + Client RequestDoer +} + +var _ ContinuousBackupRestoreJobsService = &ContinuousBackupRestoreJobsServiceOp{} + +type ContinuousBackupJob struct { + BatchID string `json:"batchId,omitempty"` + ClusterID string `json:"clusterId,omitempty"` + Created string `json:"created"` + ClusterName string `json:"clusterName,omitempty"` + Delivery *Delivery `json:"delivery,omitempty"` + EncryptionEnabled bool `json:"encryptionEnabled"` + GroupID string `json:"groupId"` + Hashes []*Hash `json:"hashes,omitempty"` + ID string `json:"id"` + Links []*Link `json:"links,omitempty"` + MasterKeyUUID string `json:"masterKeyUUID,omitempty"` + SnapshotID string `json:"snapshotId"` + StatusName string `json:"statusName"` + PointInTime *bool `json:"pointInTime,omitempty"` + Timestamp SnapshotTimestamp `json:"timestamp"` +} + +type ContinuousBackupJobs struct { + Results []*ContinuousBackupJob `json:"results,omitempty"` + Links []*Link `json:"links,omitempty"` + TotalCount int64 `json:"totalCount,omitempty"` +} + +type SnapshotTimestamp struct { + Date string `json:"date"` + Increment int64 `json:"increment"` +} + +type Delivery struct { + Expires string `json:"expires,omitempty"` + ExpirationHours int64 `json:"expirationHours,omitempty"` + MaxDownloads int64 `json:"maxDownloads,omitempty"` + MethodName string `json:"methodName"` + StatusName string `json:"statusName,omitempty"` + URL string `json:"url,omitempty"` + TargetClusterID string `json:"targetClusterId,omitempty"` + TargetClusterName string `json:"targetClusterName,omitempty"` + TargetGroupID string `json:"targetGroupId,omitempty"` +} + +type Hash struct { + TypeName string `json:"typeName"` + FileName string `json:"fileName"` + Hash string `json:"hash"` +} + +type JobRequest struct { + CheckPointID string `json:"checkPointId,omitempty"` + Delivery Delivery `json:"delivery"` + OplogTs string `json:"oplogTs,omitempty"` + OplogInc string `json:"oplogInc,omitempty"` + PointInTimeUTCMillis float64 `json:"pointInTimeUTCMillis,omitempty"` + SnapshotID string `json:"snapshotId,omitempty"` +} + +// List list all continuous backup jobs in Atlas +// See more: https://docs.atlas.mongodb.com/reference/api/restore-jobs-get-all/ +func (s *ContinuousBackupRestoreJobsServiceOp) List(ctx context.Context, groupID, clusterID string, opts *ListOptions) (*ContinuousBackupJobs, *Response, error) { + + if clusterID == "" { + return nil, nil, NewArgError("clusterID", "must be set") + } + if groupID == "" { + return nil, nil, NewArgError("groupID", "must be set") + } + + path := fmt.Sprintf(continuousBackupRestoreJobsPath, groupID, clusterID) + + path, err := setListOptions(path, opts) + if err != nil { + return nil, nil, err + } + + req, err := s.Client.NewRequest(ctx, http.MethodGet, path, nil) + if err != nil { + return nil, nil, err + } + + root := new(ContinuousBackupJobs) + resp, err := s.Client.Do(ctx, req, root) + + return root, resp, err +} + +// Get gets a continuous backup job in Atlas +// See more: https://docs.atlas.mongodb.com/reference/api/restore-jobs-get-one/ +func (s *ContinuousBackupRestoreJobsServiceOp) Get(ctx context.Context, groupID, clusterID, jobID string) (*ContinuousBackupJob, *Response, error) { + + if clusterID == "" { + return nil, nil, NewArgError("clusterID", "must be set") + } + if groupID == "" { + return nil, nil, NewArgError("groupID", "must be set") + } + if jobID == "" { + return nil, nil, NewArgError("jobID", "must be set") + } + defaultPath := fmt.Sprintf(continuousBackupRestoreJobsPath, groupID, clusterID) + + path := fmt.Sprintf("%s/%s", defaultPath, jobID) + + req, err := s.Client.NewRequest(ctx, http.MethodGet, path, nil) + + if err != nil { + return nil, nil, err + } + + root := new(ContinuousBackupJob) + resp, err := s.Client.Do(ctx, req, root) + + return root, resp, err +} + +// Create creates a continuous backup job in Atlas +// See more: https://docs.atlas.mongodb.com/reference/api/restore-jobs-create-one/ +func (s *ContinuousBackupRestoreJobsServiceOp) Create(ctx context.Context, groupID, clusterID string, request *JobRequest) (*ContinuousBackupJob, *Response, error) { + + if request == nil { + return nil, nil, NewArgError("request", "must be set") + } + if clusterID == "" { + return nil, nil, NewArgError("clusterID", "must be set") + } + if groupID == "" { + return nil, nil, NewArgError("groupID", "must be set") + } + + path := fmt.Sprintf(continuousBackupRestoreJobsPath, groupID, clusterID) + + req, err := s.Client.NewRequest(ctx, http.MethodPost, path, request) + + if err != nil { + return nil, nil, err + } + + root := new(ContinuousBackupJob) + resp, err := s.Client.Do(ctx, req, root) + + return root, resp, err +} diff --git a/mongodbatlas/continuous_backup_restore_job_test.go b/mongodbatlas/continuous_backup_restore_job_test.go new file mode 100644 index 000000000..c3ad63590 --- /dev/null +++ b/mongodbatlas/continuous_backup_restore_job_test.go @@ -0,0 +1,317 @@ +package mongodbatlas + +import ( + "encoding/json" + "fmt" + "github.com/go-test/deep" + "net/http" + "testing" +) + +func TestContinuousBackupRestore_List(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/groups/6b77777887d9d61443b41645/clusters/Cluster0/restoreJobs", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, http.MethodGet) + fmt.Fprint(w, ` + { + "links": [ + { + "href": "https://cloud.mongodb.com/api/atlas/v1.0/groups/6b77777887d9d61443b41645/clusters/Cluster0/restoreJobs?pageNum=1&itemsPerPage=100", + "rel": "self" + } + ], + "results": [ + { + "batchId": "5a66783b80eef5354c77ee13", + "clusterId": "7c88887880eef52e5f4d0e2d", + "clusterName": "Cluster0", + "created": "2018-01-22T23:48:11Z", + "delivery": { + "expirationHours": 48, + "expires": "2018-01-22T23:49:38Z", + "maxDownloads": 2147483647, + "methodName": "HTTP", + "statusName": "EXPIRED", + "url": "https://api-backup.mongodb.com/backup/restore/v2/pull/5a66783b80eef5354c77ee16/MGViYTUwZGQ4YWVkNDY4MGE2YWE4NGQzODY0MzAzYTU=/config-Cluster0-config-0-5a66689487d9d61443b46149-1516661094-5a66783b80eef5354c77ee16.tar.gz" + }, + "encryptionEnabled": false, + "groupId": "6b77777887d9d61443b41645", + "hashes": [ + { + "fileName": "config-Cluster0-config-0-5a66689487d9d61443b46149-1516661094-5a66783b80eef5354c77ee16.tar.gz", + "hash": "a98af3c1f85a9eb3061423cda0fad8b4d0a48209", + "typeName": "SHA1" + } + ], + "id": "5a66783b80eef5354c77ee16", + "links": [ + { + "href": "https://cloud.mongodb.com/api/atlas/v1.0/groups/6b77777887d9d61443b41645/clusters/Cluster0/restoreJobs/5a66783b80eef5354c77ee16", + "rel": "self" + } + ], + "pointInTime": false, + "snapshotId": "5a6669d5e2bfb3461861360c", + "statusName": "FINISHED", + "timestamp": { + "date": "2018-01-22T22:44:54Z", + "increment": 1 + } + } + ], + "totalCount": 1 + }`, + ) + }) + + customDBRoles, _, err := client.ContinuousBackupRestoreJobs.List(ctx, "6b77777887d9d61443b41645", "Cluster0", nil) + if err != nil { + t.Fatalf("ContinuousBackupRestoreJobs.List returned error: %v", err) + } + pointInTimeValue := false + + expected := &ContinuousBackupJobs{ + Results: []*ContinuousBackupJob{{ + BatchID: "5a66783b80eef5354c77ee13", + ClusterID: "7c88887880eef52e5f4d0e2d", + ClusterName: "Cluster0", + Created: "2018-01-22T23:48:11Z", + Delivery: &Delivery{ + Expires: "2018-01-22T23:49:38Z", + ExpirationHours: 48, + MaxDownloads: 2147483647, + MethodName: "HTTP", + StatusName: "EXPIRED", + URL: "https://api-backup.mongodb.com/backup/restore/v2/pull/5a66783b80eef5354c77ee16/MGViYTUwZGQ4YWVkNDY4MGE2YWE4NGQzODY0MzAzYTU=/config-Cluster0-config-0-5a66689487d9d61443b46149-1516661094-5a66783b80eef5354c77ee16.tar.gz", + }, + EncryptionEnabled: false, + GroupID: "6b77777887d9d61443b41645", + Hashes: []*Hash{ + { + TypeName: "SHA1", + FileName: "config-Cluster0-config-0-5a66689487d9d61443b46149-1516661094-5a66783b80eef5354c77ee16.tar.gz", + Hash: "a98af3c1f85a9eb3061423cda0fad8b4d0a48209", + }, + }, + ID: "5a66783b80eef5354c77ee16", + Links: []*Link{ + { + Href: "https://cloud.mongodb.com/api/atlas/v1.0/groups/6b77777887d9d61443b41645/clusters/Cluster0/restoreJobs/5a66783b80eef5354c77ee16", + Rel: "self", + }, + }, + PointInTime: &pointInTimeValue, + SnapshotID: "5a6669d5e2bfb3461861360c", + StatusName: "FINISHED", + Timestamp: SnapshotTimestamp{ + Date: "2018-01-22T22:44:54Z", + Increment: 1, + }, + }}, + TotalCount: 1, + Links: []*Link{ + { + Rel: "self", + Href: "https://cloud.mongodb.com/api/atlas/v1.0/groups/6b77777887d9d61443b41645/clusters/Cluster0/restoreJobs?pageNum=1&itemsPerPage=100", + }, + }, + } + + if diff := deep.Equal(customDBRoles, expected); diff != nil { + t.Error(diff) + } +} + +func TestContinuousBackupRestore_Get(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/groups/5a66666887d9d61443b41645/clusters/Cluster0/restoreJobs/5a6669d9fcc178211a0d86b9", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, http.MethodGet) + fmt.Fprint(w, `{ + "batchId": "5a66783b80eef5354c77ee13", + "clusterId": "5a66689487d9d61443b46149", + "clusterName": "Cluster0", + "created": "2018-01-22T23:48:11Z", + "delivery": { + "expirationHours": 48, + "expires": "2018-01-22T23:49:38Z", + "maxDownloads": 2147483647, + "methodName": "HTTP", + "statusName": "EXPIRED", + "url": "https://api-backup.mongodb.com/backup/restore/v2/pull/6b77893b80eef5354c77ee15/N2Y1NDhkMjg0Mzk4NGU1Mzk3NTkwMjA0M2ZhODVkNDk=/Cluster0-shard-1-1516661094-6b77893b80eef5354c77ee15.tar.gz" + }, + "encryptionEnabled": false, + "groupId": "5a66666887d9d61443b41645", + "hashes": [ + { + "fileName": "Cluster0-shard-1-1516661094-6b77893b80eef5354c77ee15.tar.gz", + "hash": "86bc2f505c0874cdc0eaaa82ead2ef48aaf56d67", + "typeName": "SHA1" + } + ], + "id": "6b77893b80eef5354c77ee15", + "links": [ + { + "href": "https://cloud.mongodb.com/api/atlas/v1.0/groups/5a66666887d9d61443b41645/clusters/Cluster0/restoreJobs/6b77893b80eef5354c77ee15", + "rel": "self" + } + ], + "pointInTime": false, + "snapshotId": "5a6669d9fcc178211a0d86b9", + "statusName": "FINISHED", + "timestamp": { + "date": "2018-01-22T22:44:54Z", + "increment": 1 + } + }`, + ) + }) + + customDBRoles, _, err := client.ContinuousBackupRestoreJobs.Get(ctx, "5a66666887d9d61443b41645", "Cluster0", "5a6669d9fcc178211a0d86b9") + if err != nil { + t.Fatalf("ContinuousBackupRestoreJobs.Get returned error: %v", err) + } + pointInTimeValue := false + + expected := &ContinuousBackupJob{ + BatchID: "5a66783b80eef5354c77ee13", + ClusterID: "5a66689487d9d61443b46149", + ClusterName: "Cluster0", + Created: "2018-01-22T23:48:11Z", + Delivery: &Delivery{ + Expires: "2018-01-22T23:49:38Z", + ExpirationHours: 48, + MaxDownloads: 2147483647, + MethodName: "HTTP", + StatusName: "EXPIRED", + URL: "https://api-backup.mongodb.com/backup/restore/v2/pull/6b77893b80eef5354c77ee15/N2Y1NDhkMjg0Mzk4NGU1Mzk3NTkwMjA0M2ZhODVkNDk=/Cluster0-shard-1-1516661094-6b77893b80eef5354c77ee15.tar.gz", + }, + EncryptionEnabled: false, + GroupID: "5a66666887d9d61443b41645", + Hashes: []*Hash{ + { + TypeName: "SHA1", + FileName: "Cluster0-shard-1-1516661094-6b77893b80eef5354c77ee15.tar.gz", + Hash: "86bc2f505c0874cdc0eaaa82ead2ef48aaf56d67", + }, + }, + ID: "6b77893b80eef5354c77ee15", + Links: []*Link{ + { + Href: "https://cloud.mongodb.com/api/atlas/v1.0/groups/5a66666887d9d61443b41645/clusters/Cluster0/restoreJobs/6b77893b80eef5354c77ee15", + Rel: "self", + }, + }, + PointInTime: &pointInTimeValue, + SnapshotID: "5a6669d9fcc178211a0d86b9", + StatusName: "FINISHED", + Timestamp: SnapshotTimestamp{ + Date: "2018-01-22T22:44:54Z", + Increment: 1, + }, + } + + if diff := deep.Equal(customDBRoles, expected); diff != nil { + t.Error(diff) + } +} + +func TestContinuousBackupRestore_Create(t *testing.T) { + setup() + defer teardown() + + mux.HandleFunc("/groups/5a66666887d9d61443b41645/clusters/Cluster0/restoreJobs", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, http.MethodPost) + var pointInTimeUTCMillis float64 = 1536610288000 + expected := map[string]interface{}{ + "pointInTimeUTCMillis": pointInTimeUTCMillis, + "delivery": map[string]interface{}{ + "methodName": "AUTOMATED_RESTORE", + "targetGroupId": "5a66666887d9d61443b41645", + "targetClusterName": "Cluster0", + }, + } + + var v map[string]interface{} + err := json.NewDecoder(r.Body).Decode(&v) + if err != nil { + t.Fatalf("decode json: %v", err.Error()) + } + + if diff := deep.Equal(v, expected); diff != nil { + t.Error(diff) + } + + fmt.Fprint(w, `{ + "batchId": "5a66783b80eef5354c77ee13", + "clusterId": "5a66689487d9d61443b46149", + "clusterName": "Cluster0", + "created": "2018-09-20T15:02:00Z", + "delivery": { + "methodName": "HTTP", + "statusName": "READY" + }, + "encryptionEnabled": false, + "groupId": "5a66666887d9d61443b41645", + "id": "6b77893b80eef5354c77ee15", + "links": [{ + "href": "https://cloud.mongodb.com/api/atlas/v1.0/groups/5a66666887d9d61443b41645/clusters/Cluster0/restoreJobs/1", + "rel": "self" + }], + "snapshotId": "6b77893b80eef5354c77ee15", + "statusName": "FINISHED", + "timestamp": { + "date": "2018-09-15T15:53:00Z", + "increment": 1 + } + }`, + ) + }) + + request := &JobRequest{ + Delivery: Delivery{ + MethodName: "AUTOMATED_RESTORE", + TargetClusterName: "Cluster0", + TargetGroupID: "5a66666887d9d61443b41645", + }, + PointInTimeUTCMillis: 1536610288000, + } + + customDBRoles, _, err := client.ContinuousBackupRestoreJobs.Create(ctx, "5a66666887d9d61443b41645", "Cluster0", request) + if err != nil { + t.Fatalf("ContinuousBackupRestoreJobs.Create returned error: %v", err) + } + + expected := &ContinuousBackupJob{ + BatchID: "5a66783b80eef5354c77ee13", + ClusterID: "5a66689487d9d61443b46149", + ClusterName: "Cluster0", + Created: "2018-09-20T15:02:00Z", + Delivery: &Delivery{ + MethodName: "HTTP", + StatusName: "READY", + }, + EncryptionEnabled: false, + GroupID: "5a66666887d9d61443b41645", + ID: "6b77893b80eef5354c77ee15", + Links: []*Link{ + { + Href: "https://cloud.mongodb.com/api/atlas/v1.0/groups/5a66666887d9d61443b41645/clusters/Cluster0/restoreJobs/1", + Rel: "self", + }, + }, + SnapshotID: "6b77893b80eef5354c77ee15", + StatusName: "FINISHED", + Timestamp: SnapshotTimestamp{ + Date: "2018-09-15T15:53:00Z", + Increment: 1, + }, + } + + if diff := deep.Equal(customDBRoles, expected); diff != nil { + t.Error(diff) + } +} diff --git a/mongodbatlas/mongodbatlas.go b/mongodbatlas/mongodbatlas.go index 0fd6c9a68..d5d10c6e4 100644 --- a/mongodbatlas/mongodbatlas.go +++ b/mongodbatlas/mongodbatlas.go @@ -59,6 +59,7 @@ type Client struct { AlertConfigurations AlertConfigurationsService PrivateEndpoints PrivateEndpointsService X509AuthDBUsers X509AuthDBUsersService + ContinuousBackupRestoreJobs ContinuousBackupRestoreJobsService onRequestCompleted RequestCompletionCallback } @@ -171,6 +172,7 @@ func NewClient(httpClient *http.Client) *Client { c.AlertConfigurations = &AlertConfigurationsServiceOp{Client: c} c.PrivateEndpoints = &PrivateEndpointsServiceOp{Client: c} c.X509AuthDBUsers = &X509AuthDBUsersServiceOp{Client: c} + c.ContinuousBackupRestoreJobs = &ContinuousBackupRestoreJobsServiceOp{Client: c} return c } From a728e3d21c251a53328d442a22c1788133023381 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Tue, 10 Mar 2020 16:06:11 +0000 Subject: [PATCH 2/4] Refactoring --- ...tore_job.go => continuous_restore_jobs.go} | 48 +++++++++---------- ...est.go => continuous_restore_jobs_test.go} | 13 ++--- mongodbatlas/mongodbatlas.go | 4 +- 3 files changed, 33 insertions(+), 32 deletions(-) rename mongodbatlas/{continuous_backup_restore_job.go => continuous_restore_jobs.go} (69%) rename mongodbatlas/{continuous_backup_restore_job_test.go => continuous_restore_jobs_test.go} (98%) diff --git a/mongodbatlas/continuous_backup_restore_job.go b/mongodbatlas/continuous_restore_jobs.go similarity index 69% rename from mongodbatlas/continuous_backup_restore_job.go rename to mongodbatlas/continuous_restore_jobs.go index ac8ac6343..f5c04df50 100644 --- a/mongodbatlas/continuous_backup_restore_job.go +++ b/mongodbatlas/continuous_restore_jobs.go @@ -6,23 +6,23 @@ import ( "net/http" ) -const continuousBackupRestoreJobsPath = "/groups/%s/clusters/%s/restoreJobs" +const continuousRestoreJobsPath = "groups/%s/clusters/%s/restoreJobs" -type ContinuousBackupRestoreJobsService interface { - List(context.Context, string, string, *ListOptions) (*ContinuousBackupJobs, *Response, error) - Get(context.Context, string, string, string) (*ContinuousBackupJob, *Response, error) - Create(context.Context, string, string, *JobRequest) (*ContinuousBackupJob, *Response, error) +type ContinuousRestoreJobsService interface { + List(context.Context, string, string, *ListOptions) (*ContinuousJobs, *Response, error) + Get(context.Context, string, string, string) (*ContinuousJob, *Response, error) + Create(context.Context, string, string, *ContinuousJobRequest) (*ContinuousJob, *Response, error) } -// ContinuousBackupRestoreJobsServiceOp handles communication with the Continuous Backup Restore Jobs related methods +// ContinuousRestoreJobsServiceOp handles communication with the Continuous Backup Restore Jobs related methods // of the MongoDB Atlas API -type ContinuousBackupRestoreJobsServiceOp struct { +type ContinuousRestoreJobsServiceOp struct { Client RequestDoer } -var _ ContinuousBackupRestoreJobsService = &ContinuousBackupRestoreJobsServiceOp{} +var _ ContinuousRestoreJobsService = &ContinuousRestoreJobsServiceOp{} -type ContinuousBackupJob struct { +type ContinuousJob struct { BatchID string `json:"batchId,omitempty"` ClusterID string `json:"clusterId,omitempty"` Created string `json:"created"` @@ -40,10 +40,10 @@ type ContinuousBackupJob struct { Timestamp SnapshotTimestamp `json:"timestamp"` } -type ContinuousBackupJobs struct { - Results []*ContinuousBackupJob `json:"results,omitempty"` - Links []*Link `json:"links,omitempty"` - TotalCount int64 `json:"totalCount,omitempty"` +type ContinuousJobs struct { + Results []*ContinuousJob `json:"results,omitempty"` + Links []*Link `json:"links,omitempty"` + TotalCount int64 `json:"totalCount,omitempty"` } type SnapshotTimestamp struct { @@ -69,18 +69,18 @@ type Hash struct { Hash string `json:"hash"` } -type JobRequest struct { +type ContinuousJobRequest struct { CheckPointID string `json:"checkPointId,omitempty"` Delivery Delivery `json:"delivery"` OplogTs string `json:"oplogTs,omitempty"` - OplogInc string `json:"oplogInc,omitempty"` + OplogInc int64 `json:"oplogInc,omitempty"` PointInTimeUTCMillis float64 `json:"pointInTimeUTCMillis,omitempty"` SnapshotID string `json:"snapshotId,omitempty"` } // List list all continuous backup jobs in Atlas // See more: https://docs.atlas.mongodb.com/reference/api/restore-jobs-get-all/ -func (s *ContinuousBackupRestoreJobsServiceOp) List(ctx context.Context, groupID, clusterID string, opts *ListOptions) (*ContinuousBackupJobs, *Response, error) { +func (s *ContinuousRestoreJobsServiceOp) List(ctx context.Context, groupID, clusterID string, opts *ListOptions) (*ContinuousJobs, *Response, error) { if clusterID == "" { return nil, nil, NewArgError("clusterID", "must be set") @@ -89,7 +89,7 @@ func (s *ContinuousBackupRestoreJobsServiceOp) List(ctx context.Context, groupID return nil, nil, NewArgError("groupID", "must be set") } - path := fmt.Sprintf(continuousBackupRestoreJobsPath, groupID, clusterID) + path := fmt.Sprintf(continuousRestoreJobsPath, groupID, clusterID) path, err := setListOptions(path, opts) if err != nil { @@ -101,7 +101,7 @@ func (s *ContinuousBackupRestoreJobsServiceOp) List(ctx context.Context, groupID return nil, nil, err } - root := new(ContinuousBackupJobs) + root := new(ContinuousJobs) resp, err := s.Client.Do(ctx, req, root) return root, resp, err @@ -109,7 +109,7 @@ func (s *ContinuousBackupRestoreJobsServiceOp) List(ctx context.Context, groupID // Get gets a continuous backup job in Atlas // See more: https://docs.atlas.mongodb.com/reference/api/restore-jobs-get-one/ -func (s *ContinuousBackupRestoreJobsServiceOp) Get(ctx context.Context, groupID, clusterID, jobID string) (*ContinuousBackupJob, *Response, error) { +func (s *ContinuousRestoreJobsServiceOp) Get(ctx context.Context, groupID, clusterID, jobID string) (*ContinuousJob, *Response, error) { if clusterID == "" { return nil, nil, NewArgError("clusterID", "must be set") @@ -120,7 +120,7 @@ func (s *ContinuousBackupRestoreJobsServiceOp) Get(ctx context.Context, groupID, if jobID == "" { return nil, nil, NewArgError("jobID", "must be set") } - defaultPath := fmt.Sprintf(continuousBackupRestoreJobsPath, groupID, clusterID) + defaultPath := fmt.Sprintf(continuousRestoreJobsPath, groupID, clusterID) path := fmt.Sprintf("%s/%s", defaultPath, jobID) @@ -130,7 +130,7 @@ func (s *ContinuousBackupRestoreJobsServiceOp) Get(ctx context.Context, groupID, return nil, nil, err } - root := new(ContinuousBackupJob) + root := new(ContinuousJob) resp, err := s.Client.Do(ctx, req, root) return root, resp, err @@ -138,7 +138,7 @@ func (s *ContinuousBackupRestoreJobsServiceOp) Get(ctx context.Context, groupID, // Create creates a continuous backup job in Atlas // See more: https://docs.atlas.mongodb.com/reference/api/restore-jobs-create-one/ -func (s *ContinuousBackupRestoreJobsServiceOp) Create(ctx context.Context, groupID, clusterID string, request *JobRequest) (*ContinuousBackupJob, *Response, error) { +func (s *ContinuousRestoreJobsServiceOp) Create(ctx context.Context, groupID, clusterID string, request *ContinuousJobRequest) (*ContinuousJob, *Response, error) { if request == nil { return nil, nil, NewArgError("request", "must be set") @@ -150,7 +150,7 @@ func (s *ContinuousBackupRestoreJobsServiceOp) Create(ctx context.Context, group return nil, nil, NewArgError("groupID", "must be set") } - path := fmt.Sprintf(continuousBackupRestoreJobsPath, groupID, clusterID) + path := fmt.Sprintf(continuousRestoreJobsPath, groupID, clusterID) req, err := s.Client.NewRequest(ctx, http.MethodPost, path, request) @@ -158,7 +158,7 @@ func (s *ContinuousBackupRestoreJobsServiceOp) Create(ctx context.Context, group return nil, nil, err } - root := new(ContinuousBackupJob) + root := new(ContinuousJob) resp, err := s.Client.Do(ctx, req, root) return root, resp, err diff --git a/mongodbatlas/continuous_backup_restore_job_test.go b/mongodbatlas/continuous_restore_jobs_test.go similarity index 98% rename from mongodbatlas/continuous_backup_restore_job_test.go rename to mongodbatlas/continuous_restore_jobs_test.go index c3ad63590..47564a784 100644 --- a/mongodbatlas/continuous_backup_restore_job_test.go +++ b/mongodbatlas/continuous_restore_jobs_test.go @@ -3,9 +3,10 @@ package mongodbatlas import ( "encoding/json" "fmt" - "github.com/go-test/deep" "net/http" "testing" + + "github.com/go-test/deep" ) func TestContinuousBackupRestore_List(t *testing.T) { @@ -72,8 +73,8 @@ func TestContinuousBackupRestore_List(t *testing.T) { } pointInTimeValue := false - expected := &ContinuousBackupJobs{ - Results: []*ContinuousBackupJob{{ + expected := &ContinuousJobs{ + Results: []*ContinuousJob{{ BatchID: "5a66783b80eef5354c77ee13", ClusterID: "7c88887880eef52e5f4d0e2d", ClusterName: "Cluster0", @@ -176,7 +177,7 @@ func TestContinuousBackupRestore_Get(t *testing.T) { } pointInTimeValue := false - expected := &ContinuousBackupJob{ + expected := &ContinuousJob{ BatchID: "5a66783b80eef5354c77ee13", ClusterID: "5a66689487d9d61443b46149", ClusterName: "Cluster0", @@ -271,7 +272,7 @@ func TestContinuousBackupRestore_Create(t *testing.T) { ) }) - request := &JobRequest{ + request := &ContinuousJobRequest{ Delivery: Delivery{ MethodName: "AUTOMATED_RESTORE", TargetClusterName: "Cluster0", @@ -285,7 +286,7 @@ func TestContinuousBackupRestore_Create(t *testing.T) { t.Fatalf("ContinuousBackupRestoreJobs.Create returned error: %v", err) } - expected := &ContinuousBackupJob{ + expected := &ContinuousJob{ BatchID: "5a66783b80eef5354c77ee13", ClusterID: "5a66689487d9d61443b46149", ClusterName: "Cluster0", diff --git a/mongodbatlas/mongodbatlas.go b/mongodbatlas/mongodbatlas.go index d5d10c6e4..470743974 100644 --- a/mongodbatlas/mongodbatlas.go +++ b/mongodbatlas/mongodbatlas.go @@ -59,7 +59,7 @@ type Client struct { AlertConfigurations AlertConfigurationsService PrivateEndpoints PrivateEndpointsService X509AuthDBUsers X509AuthDBUsersService - ContinuousBackupRestoreJobs ContinuousBackupRestoreJobsService + ContinuousBackupRestoreJobs ContinuousRestoreJobsService onRequestCompleted RequestCompletionCallback } @@ -172,7 +172,7 @@ func NewClient(httpClient *http.Client) *Client { c.AlertConfigurations = &AlertConfigurationsServiceOp{Client: c} c.PrivateEndpoints = &PrivateEndpointsServiceOp{Client: c} c.X509AuthDBUsers = &X509AuthDBUsersServiceOp{Client: c} - c.ContinuousBackupRestoreJobs = &ContinuousBackupRestoreJobsServiceOp{Client: c} + c.ContinuousBackupRestoreJobs = &ContinuousRestoreJobsServiceOp{Client: c} return c } From 926c5797ccaaf8cbd6f8b29b8a2b2a5bafd727e7 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Tue, 10 Mar 2020 17:55:16 +0000 Subject: [PATCH 3/4] Refactoring --- mongodbatlas/continuous_restore_jobs_test.go | 12 ++++++------ mongodbatlas/mongodbatlas.go | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mongodbatlas/continuous_restore_jobs_test.go b/mongodbatlas/continuous_restore_jobs_test.go index 47564a784..5e9324f84 100644 --- a/mongodbatlas/continuous_restore_jobs_test.go +++ b/mongodbatlas/continuous_restore_jobs_test.go @@ -67,9 +67,9 @@ func TestContinuousBackupRestore_List(t *testing.T) { ) }) - customDBRoles, _, err := client.ContinuousBackupRestoreJobs.List(ctx, "6b77777887d9d61443b41645", "Cluster0", nil) + customDBRoles, _, err := client.ContinuousRestoreJobs.List(ctx, "6b77777887d9d61443b41645", "Cluster0", nil) if err != nil { - t.Fatalf("ContinuousBackupRestoreJobs.List returned error: %v", err) + t.Fatalf("ContinuousRestoreJobs.List returned error: %v", err) } pointInTimeValue := false @@ -171,9 +171,9 @@ func TestContinuousBackupRestore_Get(t *testing.T) { ) }) - customDBRoles, _, err := client.ContinuousBackupRestoreJobs.Get(ctx, "5a66666887d9d61443b41645", "Cluster0", "5a6669d9fcc178211a0d86b9") + customDBRoles, _, err := client.ContinuousRestoreJobs.Get(ctx, "5a66666887d9d61443b41645", "Cluster0", "5a6669d9fcc178211a0d86b9") if err != nil { - t.Fatalf("ContinuousBackupRestoreJobs.Get returned error: %v", err) + t.Fatalf("ContinuousRestoreJobs.Get returned error: %v", err) } pointInTimeValue := false @@ -281,9 +281,9 @@ func TestContinuousBackupRestore_Create(t *testing.T) { PointInTimeUTCMillis: 1536610288000, } - customDBRoles, _, err := client.ContinuousBackupRestoreJobs.Create(ctx, "5a66666887d9d61443b41645", "Cluster0", request) + customDBRoles, _, err := client.ContinuousRestoreJobs.Create(ctx, "5a66666887d9d61443b41645", "Cluster0", request) if err != nil { - t.Fatalf("ContinuousBackupRestoreJobs.Create returned error: %v", err) + t.Fatalf("ContinuousRestoreJobs.Create returned error: %v", err) } expected := &ContinuousJob{ diff --git a/mongodbatlas/mongodbatlas.go b/mongodbatlas/mongodbatlas.go index 470743974..419e28dea 100644 --- a/mongodbatlas/mongodbatlas.go +++ b/mongodbatlas/mongodbatlas.go @@ -59,7 +59,7 @@ type Client struct { AlertConfigurations AlertConfigurationsService PrivateEndpoints PrivateEndpointsService X509AuthDBUsers X509AuthDBUsersService - ContinuousBackupRestoreJobs ContinuousRestoreJobsService + ContinuousRestoreJobs ContinuousRestoreJobsService onRequestCompleted RequestCompletionCallback } @@ -172,7 +172,7 @@ func NewClient(httpClient *http.Client) *Client { c.AlertConfigurations = &AlertConfigurationsServiceOp{Client: c} c.PrivateEndpoints = &PrivateEndpointsServiceOp{Client: c} c.X509AuthDBUsers = &X509AuthDBUsersServiceOp{Client: c} - c.ContinuousBackupRestoreJobs = &ContinuousRestoreJobsServiceOp{Client: c} + c.ContinuousRestoreJobs = &ContinuousRestoreJobsServiceOp{Client: c} return c } From 7c3d6c535d6f242b45416f15f4837669c946dc33 Mon Sep 17 00:00:00 2001 From: andreaangiolillo Date: Thu, 12 Mar 2020 09:32:17 +0000 Subject: [PATCH 4/4] Removed dublicated struct --- mongodbatlas/continuous_snaphots.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mongodbatlas/continuous_snaphots.go b/mongodbatlas/continuous_snaphots.go index 6566c977a..acb479200 100644 --- a/mongodbatlas/continuous_snaphots.go +++ b/mongodbatlas/continuous_snaphots.go @@ -45,11 +45,6 @@ type ContinuousSnapshot struct { Parts []*Part `json:"parts,omitempty"` } -type SnapshotTimestamp struct { - Date string `json:"date"` - Increment int64 `json:"increment"` -} - type Part struct { ClusterID string `json:"clusterId"` CompressionSetting string `json:"compressionSetting"`