github.com/sacloud/iaas-api-go@v1.12.0/test/auto_backup_op_test.go (about)

     1  // Copyright 2022-2023 The sacloud/iaas-api-go Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package test
    16  
    17  import (
    18  	"testing"
    19  
    20  	"github.com/sacloud/iaas-api-go"
    21  	"github.com/sacloud/iaas-api-go/testutil"
    22  	"github.com/sacloud/iaas-api-go/types"
    23  	"github.com/sacloud/packages-go/size"
    24  	"github.com/stretchr/testify/assert"
    25  )
    26  
    27  func TestAutoBackupOpCRUD(t *testing.T) {
    28  	testutil.RunCRUD(t, &testutil.CRUDTestCase{
    29  		Parallel: true,
    30  
    31  		SetupAPICallerFunc: singletonAPICaller,
    32  
    33  		Setup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
    34  			diskOp := iaas.NewDiskOp(caller)
    35  			disk, err := diskOp.Create(ctx, testZone, &iaas.DiskCreateRequest{
    36  				Name:       testutil.ResourceName("-disk-for-autobackup"),
    37  				SizeMB:     20 * size.GiB,
    38  				DiskPlanID: types.DiskPlans.SSD,
    39  			}, nil)
    40  			if !assert.NoError(t, err) {
    41  				return err
    42  			}
    43  
    44  			_, err = iaas.WaiterForReady(func() (interface{}, error) {
    45  				return diskOp.Read(ctx, testZone, disk.ID)
    46  			}).WaitForState(ctx)
    47  			if !assert.NoError(t, err) {
    48  				return err
    49  			}
    50  
    51  			ctx.Values["autobackup/disk"] = disk.ID
    52  			createAutoBackupParam.DiskID = disk.ID
    53  			createAutoBackupExpected.DiskID = disk.ID
    54  			updateAutoBackupExpected.DiskID = disk.ID
    55  			updateAutoBackupToMinExpected.DiskID = disk.ID
    56  			return err
    57  		},
    58  
    59  		Create: &testutil.CRUDTestFunc{
    60  			Func: testAutoBackupCreate,
    61  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    62  				ExpectValue:  createAutoBackupExpected,
    63  				IgnoreFields: ignoreAutoBackupFields,
    64  			}),
    65  		},
    66  
    67  		Read: &testutil.CRUDTestFunc{
    68  			Func: testAutoBackupRead,
    69  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    70  				ExpectValue:  createAutoBackupExpected,
    71  				IgnoreFields: ignoreAutoBackupFields,
    72  			}),
    73  		},
    74  
    75  		Updates: []*testutil.CRUDTestFunc{
    76  			{
    77  				Func: testAutoBackupUpdate,
    78  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    79  					ExpectValue:  updateAutoBackupExpected,
    80  					IgnoreFields: ignoreAutoBackupFields,
    81  				}),
    82  			},
    83  			{
    84  				Func: testAutoBackupUpdateSettings,
    85  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    86  					ExpectValue:  updateAutoBackupSettingsExpected,
    87  					IgnoreFields: ignoreAutoBackupFields,
    88  				}),
    89  			},
    90  			{
    91  				Func: testAutoBackupUpdateToMin,
    92  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    93  					ExpectValue:  updateAutoBackupToMinExpected,
    94  					IgnoreFields: ignoreAutoBackupFields,
    95  				}),
    96  			},
    97  		},
    98  
    99  		Delete: &testutil.CRUDTestDeleteFunc{
   100  			Func: testAutoBackupDelete,
   101  		},
   102  
   103  		Cleanup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
   104  			diskID, ok := ctx.Values["autobackup/disk"]
   105  			if !ok {
   106  				return nil
   107  			}
   108  
   109  			diskOp := iaas.NewDiskOp(caller)
   110  			return diskOp.Delete(ctx, testZone, diskID.(types.ID))
   111  		},
   112  	})
   113  }
   114  
   115  var (
   116  	ignoreAutoBackupFields = []string{
   117  		"ID",
   118  		"Class",
   119  		"SettingsHash",
   120  		"CreatedAt",
   121  		"ModifiedAt",
   122  		"DiskID",
   123  		"AccountID",
   124  		"ZoneID",
   125  		"ZoneName",
   126  	}
   127  	createAutoBackupParam = &iaas.AutoBackupCreateRequest{
   128  		Name:        testutil.ResourceName("auto-backup"),
   129  		Description: "desc",
   130  		Tags:        []string{"tag1", "tag2"},
   131  		BackupSpanWeekdays: []types.EDayOfTheWeek{
   132  			types.DaysOfTheWeek.Monday,
   133  			types.DaysOfTheWeek.Tuesday,
   134  		},
   135  		MaximumNumberOfArchives: 2,
   136  	}
   137  	createAutoBackupExpected = &iaas.AutoBackup{
   138  		Name:                    createAutoBackupParam.Name,
   139  		Description:             createAutoBackupParam.Description,
   140  		Tags:                    createAutoBackupParam.Tags,
   141  		Availability:            types.Availabilities.Available,
   142  		BackupSpanWeekdays:      createAutoBackupParam.BackupSpanWeekdays,
   143  		MaximumNumberOfArchives: createAutoBackupParam.MaximumNumberOfArchives,
   144  	}
   145  	updateAutoBackupParam = &iaas.AutoBackupUpdateRequest{
   146  		Name:        testutil.ResourceName("auto-backup-upd"),
   147  		Description: "desc-upd",
   148  		Tags:        []string{"tag1-upd", "tag2-upd"},
   149  		BackupSpanWeekdays: []types.EDayOfTheWeek{
   150  			types.DaysOfTheWeek.Monday,
   151  			types.DaysOfTheWeek.Tuesday,
   152  			types.DaysOfTheWeek.Wednesday,
   153  			types.DaysOfTheWeek.Thursday,
   154  		},
   155  		MaximumNumberOfArchives: 3,
   156  		IconID:                  testIconID,
   157  	}
   158  	updateAutoBackupExpected = &iaas.AutoBackup{
   159  		Name:                    updateAutoBackupParam.Name,
   160  		Description:             updateAutoBackupParam.Description,
   161  		Tags:                    updateAutoBackupParam.Tags,
   162  		Availability:            types.Availabilities.Available,
   163  		BackupSpanWeekdays:      updateAutoBackupParam.BackupSpanWeekdays,
   164  		MaximumNumberOfArchives: updateAutoBackupParam.MaximumNumberOfArchives,
   165  		IconID:                  testIconID,
   166  	}
   167  
   168  	updateAutoBackupSettingsParam = &iaas.AutoBackupUpdateSettingsRequest{
   169  		BackupSpanWeekdays: []types.EDayOfTheWeek{
   170  			types.DaysOfTheWeek.Monday,
   171  			types.DaysOfTheWeek.Tuesday,
   172  			types.DaysOfTheWeek.Wednesday,
   173  		},
   174  		MaximumNumberOfArchives: 4,
   175  	}
   176  	updateAutoBackupSettingsExpected = &iaas.AutoBackup{
   177  		Name:                    updateAutoBackupParam.Name,
   178  		Description:             updateAutoBackupParam.Description,
   179  		Tags:                    updateAutoBackupParam.Tags,
   180  		Availability:            types.Availabilities.Available,
   181  		BackupSpanWeekdays:      updateAutoBackupSettingsParam.BackupSpanWeekdays,
   182  		MaximumNumberOfArchives: updateAutoBackupSettingsParam.MaximumNumberOfArchives,
   183  		IconID:                  testIconID,
   184  	}
   185  
   186  	updateAutoBackupToMinParam = &iaas.AutoBackupUpdateRequest{
   187  		Name: testutil.ResourceName("auto-backup-to-min"),
   188  		BackupSpanWeekdays: []types.EDayOfTheWeek{
   189  			types.DaysOfTheWeek.Sunday,
   190  		},
   191  		MaximumNumberOfArchives: 1,
   192  	}
   193  	updateAutoBackupToMinExpected = &iaas.AutoBackup{
   194  		Name:                    updateAutoBackupToMinParam.Name,
   195  		Availability:            types.Availabilities.Available,
   196  		BackupSpanWeekdays:      updateAutoBackupToMinParam.BackupSpanWeekdays,
   197  		MaximumNumberOfArchives: updateAutoBackupToMinParam.MaximumNumberOfArchives,
   198  	}
   199  )
   200  
   201  func testAutoBackupCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   202  	client := iaas.NewAutoBackupOp(caller)
   203  	return client.Create(ctx, testZone, createAutoBackupParam)
   204  }
   205  
   206  func testAutoBackupRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   207  	client := iaas.NewAutoBackupOp(caller)
   208  	return client.Read(ctx, testZone, ctx.ID)
   209  }
   210  
   211  func testAutoBackupUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   212  	client := iaas.NewAutoBackupOp(caller)
   213  	return client.Update(ctx, testZone, ctx.ID, updateAutoBackupParam)
   214  }
   215  
   216  func testAutoBackupUpdateSettings(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   217  	client := iaas.NewAutoBackupOp(caller)
   218  	return client.UpdateSettings(ctx, testZone, ctx.ID, updateAutoBackupSettingsParam)
   219  }
   220  
   221  func testAutoBackupUpdateToMin(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   222  	client := iaas.NewAutoBackupOp(caller)
   223  	return client.Update(ctx, testZone, ctx.ID, updateAutoBackupToMinParam)
   224  }
   225  
   226  func testAutoBackupDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
   227  	client := iaas.NewAutoBackupOp(caller)
   228  	return client.Delete(ctx, testZone, ctx.ID)
   229  }