github.com/sacloud/iaas-api-go@v1.12.0/test/container_registry_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  	sacloudtestutil "github.com/sacloud/packages-go/testutil"
    24  )
    25  
    26  func TestContainerRegistryOp_CRUD(t *testing.T) {
    27  	testutil.RunCRUD(t, &testutil.CRUDTestCase{
    28  		Parallel:           true,
    29  		SetupAPICallerFunc: singletonAPICaller,
    30  		Create: &testutil.CRUDTestFunc{
    31  			Func: testContainerRegistryCreate,
    32  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    33  				ExpectValue:  createContainerRegistryExpected,
    34  				IgnoreFields: ignoreContainerRegistryFields,
    35  			}),
    36  		},
    37  
    38  		Read: &testutil.CRUDTestFunc{
    39  			Func: testContainerRegistryRead,
    40  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    41  				ExpectValue:  createContainerRegistryExpected,
    42  				IgnoreFields: ignoreContainerRegistryFields,
    43  			}),
    44  		},
    45  
    46  		Updates: []*testutil.CRUDTestFunc{
    47  			{
    48  				Func: testContainerRegistryUpdate,
    49  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    50  					ExpectValue:  updateContainerRegistryExpected,
    51  					IgnoreFields: ignoreContainerRegistryFields,
    52  				}),
    53  			},
    54  			{
    55  				Func: testContainerRegistryUpdateSettings,
    56  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    57  					ExpectValue:  updateContainerRegistrySettingsExpected,
    58  					IgnoreFields: ignoreContainerRegistryFields,
    59  				}),
    60  			},
    61  			{
    62  				Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
    63  					registryOp := iaas.NewContainerRegistryOp(caller)
    64  					err := registryOp.AddUser(ctx, ctx.ID, &iaas.ContainerRegistryUserCreateRequest{
    65  						UserName:   "user1",
    66  						Password:   "password",
    67  						Permission: types.ContainerRegistryPermissions.ReadWrite,
    68  					})
    69  					if err != nil {
    70  						return nil, err
    71  					}
    72  					err = registryOp.AddUser(ctx, ctx.ID, &iaas.ContainerRegistryUserCreateRequest{
    73  						UserName:   "user2",
    74  						Password:   "password",
    75  						Permission: types.ContainerRegistryPermissions.ReadOnly,
    76  					})
    77  					if err != nil {
    78  						return nil, err
    79  					}
    80  					return registryOp.ListUsers(ctx, ctx.ID)
    81  				},
    82  				CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, value interface{}) error {
    83  					users := value.(*iaas.ContainerRegistryUsers).Users
    84  					return testutil.DoAsserts(
    85  						testutil.AssertLenFunc(t, users, 2, "ContainerRegistry.Users"),
    86  						testutil.AssertEqualFunc(t, "user1", users[0].UserName, "ContainerRegistry.Users"),
    87  						testutil.AssertEqualFunc(t, types.ContainerRegistryPermissions.ReadWrite, users[0].Permission, "ContainerRegistry.Permission"),
    88  						testutil.AssertEqualFunc(t, "user2", users[1].UserName, "ContainerRegistry.Users"),
    89  						testutil.AssertEqualFunc(t, types.ContainerRegistryPermissions.ReadOnly, users[1].Permission, "ContainerRegistry.Permission"),
    90  					)
    91  				},
    92  				SkipExtractID: true,
    93  			},
    94  			{
    95  				Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
    96  					registryOp := iaas.NewContainerRegistryOp(caller)
    97  					if err := registryOp.DeleteUser(ctx, ctx.ID, "user1"); err != nil {
    98  						return nil, err
    99  					}
   100  					return registryOp.ListUsers(ctx, ctx.ID)
   101  				},
   102  				CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, value interface{}) error {
   103  					users := value.(*iaas.ContainerRegistryUsers).Users
   104  					return testutil.DoAsserts(
   105  						testutil.AssertLenFunc(t, users, 1, "ContainerRegistry.Users"),
   106  					)
   107  				},
   108  				SkipExtractID: true,
   109  			},
   110  		},
   111  
   112  		Delete: &testutil.CRUDTestDeleteFunc{
   113  			Func: testContainerRegistryDelete,
   114  		},
   115  	})
   116  }
   117  
   118  var (
   119  	ignoreContainerRegistryFields = []string{
   120  		"ID",
   121  		"Class",
   122  		"SettingsHash",
   123  		"CreatedAt",
   124  		"ModifiedAt",
   125  	}
   126  	createContainerRegistryParam = &iaas.ContainerRegistryCreateRequest{
   127  		Name:           testutil.ResourceName("container-registry"),
   128  		Description:    "desc",
   129  		Tags:           []string{"tag1", "tag2"},
   130  		VirtualDomain:  "libsacloud-test.usacloud.jp",
   131  		AccessLevel:    types.ContainerRegistryAccessLevels.ReadWrite,
   132  		SubDomainLabel: sacloudtestutil.RandomName(testutil.TestResourcePrefix, 45, sacloudtestutil.CharSetAlpha),
   133  	}
   134  	createContainerRegistryExpected = &iaas.ContainerRegistry{
   135  		Name:           createContainerRegistryParam.Name,
   136  		Description:    createContainerRegistryParam.Description,
   137  		Tags:           createContainerRegistryParam.Tags,
   138  		Availability:   types.Availabilities.Available,
   139  		AccessLevel:    createContainerRegistryParam.AccessLevel,
   140  		VirtualDomain:  createContainerRegistryParam.VirtualDomain,
   141  		SubDomainLabel: createContainerRegistryParam.SubDomainLabel,
   142  		FQDN:           createContainerRegistryParam.SubDomainLabel + ".sakuracr.jp",
   143  	}
   144  	updateContainerRegistryParam = &iaas.ContainerRegistryUpdateRequest{
   145  		Name:          testutil.ResourceName("container-registry-upd"),
   146  		Description:   "desc-upd",
   147  		Tags:          []string{"tag1-upd", "tag2-upd"},
   148  		IconID:        testIconID,
   149  		VirtualDomain: "libsacloud-test-upd.usacloud.jp",
   150  		AccessLevel:   types.ContainerRegistryAccessLevels.ReadOnly,
   151  	}
   152  	updateContainerRegistryExpected = &iaas.ContainerRegistry{
   153  		Name:           updateContainerRegistryParam.Name,
   154  		Description:    updateContainerRegistryParam.Description,
   155  		Tags:           updateContainerRegistryParam.Tags,
   156  		Availability:   types.Availabilities.Available,
   157  		IconID:         testIconID,
   158  		VirtualDomain:  updateContainerRegistryParam.VirtualDomain,
   159  		AccessLevel:    updateContainerRegistryParam.AccessLevel,
   160  		SubDomainLabel: createContainerRegistryParam.SubDomainLabel,
   161  		FQDN:           createContainerRegistryParam.SubDomainLabel + ".sakuracr.jp",
   162  	}
   163  
   164  	updateContainerRegistrySettingsParam = &iaas.ContainerRegistryUpdateSettingsRequest{
   165  		AccessLevel: types.ContainerRegistryAccessLevels.None,
   166  	}
   167  	updateContainerRegistrySettingsExpected = &iaas.ContainerRegistry{
   168  		Name:           updateContainerRegistryParam.Name,
   169  		Description:    updateContainerRegistryParam.Description,
   170  		Tags:           updateContainerRegistryParam.Tags,
   171  		Availability:   types.Availabilities.Available,
   172  		IconID:         testIconID,
   173  		VirtualDomain:  "",
   174  		AccessLevel:    updateContainerRegistrySettingsParam.AccessLevel,
   175  		SubDomainLabel: createContainerRegistryParam.SubDomainLabel,
   176  		FQDN:           createContainerRegistryParam.SubDomainLabel + ".sakuracr.jp",
   177  	}
   178  )
   179  
   180  func testContainerRegistryCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   181  	client := iaas.NewContainerRegistryOp(caller)
   182  	return client.Create(ctx, createContainerRegistryParam)
   183  }
   184  
   185  func testContainerRegistryRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   186  	client := iaas.NewContainerRegistryOp(caller)
   187  	return client.Read(ctx, ctx.ID)
   188  }
   189  
   190  func testContainerRegistryUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   191  	client := iaas.NewContainerRegistryOp(caller)
   192  	return client.Update(ctx, ctx.ID, updateContainerRegistryParam)
   193  }
   194  
   195  func testContainerRegistryUpdateSettings(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   196  	client := iaas.NewContainerRegistryOp(caller)
   197  	return client.UpdateSettings(ctx, ctx.ID, updateContainerRegistrySettingsParam)
   198  }
   199  
   200  func testContainerRegistryDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
   201  	client := iaas.NewContainerRegistryOp(caller)
   202  	return client.Delete(ctx, ctx.ID)
   203  }