github.com/sacloud/iaas-api-go@v1.12.0/test/archive_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  	"errors"
    19  	"testing"
    20  
    21  	"github.com/sacloud/iaas-api-go"
    22  	"github.com/sacloud/iaas-api-go/testutil"
    23  	"github.com/sacloud/iaas-api-go/types"
    24  	"github.com/sacloud/packages-go/size"
    25  	"github.com/stretchr/testify/assert"
    26  )
    27  
    28  func TestArchiveOpCRUD(t *testing.T) {
    29  	testutil.RunCRUD(t, &testutil.CRUDTestCase{
    30  		Parallel: true,
    31  
    32  		SetupAPICallerFunc: singletonAPICaller,
    33  
    34  		Setup: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
    35  			client := iaas.NewArchiveOp(caller)
    36  			findResult, err := client.Find(ctx, testZone, nil)
    37  			if err != nil {
    38  				return err
    39  			}
    40  			archives := findResult.Archives
    41  			for _, a := range archives {
    42  				if a.GetSizeGB() == 20 && a.Availability.IsAvailable() {
    43  					ctx.Values["archive"] = a.ID
    44  					createArchiveParam.SourceArchiveID = a.ID
    45  					createArchiveExpected.SourceArchiveID = a.ID
    46  					createArchiveExpected.SourceArchiveAvailability = a.Availability
    47  					updateArchiveExpected.SourceArchiveID = a.ID
    48  					updateArchiveExpected.SourceArchiveAvailability = a.Availability
    49  					updateArchiveToMinExpected.SourceArchiveID = a.ID
    50  					updateArchiveToMinExpected.SourceArchiveAvailability = a.Availability
    51  
    52  					return nil
    53  				}
    54  			}
    55  			return errors.New("valid archive is not found")
    56  		},
    57  
    58  		Create: &testutil.CRUDTestFunc{
    59  			Func: testArchiveCreate,
    60  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    61  				ExpectValue:  createArchiveExpected,
    62  				IgnoreFields: ignoreArchiveFields,
    63  			}),
    64  		},
    65  
    66  		Read: &testutil.CRUDTestFunc{
    67  			Func: testArchiveRead,
    68  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    69  				ExpectValue:  createArchiveExpected,
    70  				IgnoreFields: ignoreArchiveFields,
    71  			}),
    72  		},
    73  
    74  		Updates: []*testutil.CRUDTestFunc{
    75  			{
    76  				Func: testArchiveUpdate,
    77  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    78  					ExpectValue:  updateArchiveExpected,
    79  					IgnoreFields: ignoreArchiveFields,
    80  				}),
    81  			},
    82  			{
    83  				Func: testArchiveUpdateToMin,
    84  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    85  					ExpectValue:  updateArchiveToMinExpected,
    86  					IgnoreFields: ignoreArchiveFields,
    87  				}),
    88  			},
    89  		},
    90  
    91  		Delete: &testutil.CRUDTestDeleteFunc{
    92  			Func: testArchiveDelete,
    93  		},
    94  	})
    95  }
    96  
    97  var (
    98  	ignoreArchiveFields = []string{
    99  		"ID",
   100  		"DisplayOrder",
   101  		"Availability",
   102  		"DiskPlanName",
   103  		"SizeMB",
   104  		"MigratedMB",
   105  		"DiskPlanStorageClass",
   106  		"SourceDiskID",
   107  		"SourceDiskAvailability",
   108  		"BundleInfo",
   109  		"Storage",
   110  		"CreatedAt",
   111  		"ModifiedAt",
   112  		"OriginalArchiveID",
   113  		"SourceInfo",
   114  	}
   115  
   116  	createArchiveParam = &iaas.ArchiveCreateRequest{
   117  		Name:        testutil.ResourceName("archive"),
   118  		Description: "desc",
   119  		Tags:        []string{"tag1", "tag2"},
   120  	}
   121  	createArchiveExpected = &iaas.Archive{
   122  		Name:        createArchiveParam.Name,
   123  		Description: createArchiveParam.Description,
   124  		Tags:        createArchiveParam.Tags,
   125  		Scope:       types.Scopes.User,
   126  		DiskPlanID:  types.DiskPlans.HDD,
   127  	}
   128  
   129  	updateArchiveParam = &iaas.ArchiveUpdateRequest{
   130  		Name:        testutil.ResourceName("archive-upd"),
   131  		Description: "desc-upd",
   132  		Tags:        []string{"tag1-upd", "tag2-upd"},
   133  		IconID:      testIconID,
   134  	}
   135  	updateArchiveExpected = &iaas.Archive{
   136  		Name:        updateArchiveParam.Name,
   137  		Description: updateArchiveParam.Description,
   138  		Tags:        updateArchiveParam.Tags,
   139  		Scope:       types.Scopes.User,
   140  		DiskPlanID:  types.DiskPlans.HDD,
   141  		IconID:      updateArchiveParam.IconID,
   142  	}
   143  	updateArchiveToMinParam = &iaas.ArchiveUpdateRequest{
   144  		Name:        testutil.ResourceName("archive-min"),
   145  		Description: "",
   146  	}
   147  	updateArchiveToMinExpected = &iaas.Archive{
   148  		Name:        updateArchiveToMinParam.Name,
   149  		Description: updateArchiveToMinParam.Description,
   150  		Scope:       types.Scopes.User,
   151  		DiskPlanID:  types.DiskPlans.HDD,
   152  	}
   153  )
   154  
   155  func testArchiveCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   156  	client := iaas.NewArchiveOp(caller)
   157  	return client.Create(ctx, testZone, createArchiveParam)
   158  }
   159  
   160  func testArchiveRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   161  	client := iaas.NewArchiveOp(caller)
   162  	return client.Read(ctx, testZone, ctx.ID)
   163  }
   164  
   165  func testArchiveUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   166  	client := iaas.NewArchiveOp(caller)
   167  	return client.Update(ctx, testZone, ctx.ID, updateArchiveParam)
   168  }
   169  
   170  func testArchiveUpdateToMin(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   171  	client := iaas.NewArchiveOp(caller)
   172  	return client.Update(ctx, testZone, ctx.ID, updateArchiveToMinParam)
   173  }
   174  
   175  func testArchiveDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
   176  	client := iaas.NewArchiveOp(caller)
   177  	return client.Delete(ctx, testZone, ctx.ID)
   178  }
   179  
   180  func TestArchiveOp_CreateBlank(t *testing.T) {
   181  	testutil.RunCRUD(t, &testutil.CRUDTestCase{
   182  		Parallel:           true,
   183  		IgnoreStartupWait:  true,
   184  		SetupAPICallerFunc: singletonAPICaller,
   185  		Create: &testutil.CRUDTestFunc{
   186  			Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   187  				client := iaas.NewArchiveOp(singletonAPICaller())
   188  				archive, ftpServer, err := client.CreateBlank(ctx, testZone, &iaas.ArchiveCreateBlankRequest{
   189  					SizeMB: 20 * size.GiB,
   190  					Name:   testutil.ResourceName("archive-blank"),
   191  				})
   192  
   193  				if err != nil {
   194  					return nil, err
   195  				}
   196  
   197  				assert.NotNil(t, archive)
   198  				assert.NotNil(t, ftpServer)
   199  
   200  				return archive, err
   201  			},
   202  		},
   203  		Delete: &testutil.CRUDTestDeleteFunc{
   204  			Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
   205  				client := iaas.NewArchiveOp(singletonAPICaller())
   206  				return client.Delete(ctx, testZone, ctx.ID)
   207  			},
   208  		},
   209  	})
   210  }