github.com/sacloud/iaas-api-go@v1.12.0/test/sim_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  	"context"
    19  	"os"
    20  	"testing"
    21  
    22  	"github.com/sacloud/iaas-api-go"
    23  	"github.com/sacloud/iaas-api-go/testutil"
    24  	"github.com/sacloud/iaas-api-go/types"
    25  	"github.com/stretchr/testify/assert"
    26  )
    27  
    28  func TestSIMOpCRUD(t *testing.T) {
    29  	testutil.PreCheckEnvsFunc("SAKURACLOUD_SIM_ICCID", "SAKURACLOUD_SIM_PASSCODE")(t)
    30  
    31  	initSIMVariables()
    32  
    33  	testutil.RunCRUD(t, &testutil.CRUDTestCase{
    34  		Parallel:          true,
    35  		IgnoreStartupWait: true,
    36  
    37  		SetupAPICallerFunc: singletonAPICaller,
    38  
    39  		Create: &testutil.CRUDTestFunc{
    40  			Func: testSIMCreate,
    41  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    42  				ExpectValue:  createSIMExpected,
    43  				IgnoreFields: ignoreSIMFields,
    44  			}),
    45  		},
    46  
    47  		Read: &testutil.CRUDTestFunc{
    48  			Func: testSIMRead,
    49  			CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    50  				ExpectValue:  createSIMExpected,
    51  				IgnoreFields: ignoreSIMFields,
    52  			}),
    53  		},
    54  
    55  		Updates: []*testutil.CRUDTestFunc{
    56  			{
    57  				Func: testSIMUpdate,
    58  				CheckFunc: testutil.AssertEqualWithExpected(&testutil.CRUDTestExpect{
    59  					ExpectValue:  updateSIMExpected,
    60  					IgnoreFields: ignoreSIMFields,
    61  				}),
    62  			},
    63  			// activate
    64  			{
    65  				Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
    66  					client := iaas.NewSIMOp(caller)
    67  					if err := client.Activate(ctx, ctx.ID); err != nil {
    68  						return nil, err
    69  					}
    70  					return client.Status(ctx, ctx.ID)
    71  				},
    72  				CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, v interface{}) error {
    73  					simInfo := v.(*iaas.SIMInfo)
    74  					return testutil.DoAsserts(
    75  						testutil.AssertNotNilFunc(t, simInfo, "SIMInfo"),
    76  						testutil.AssertTrueFunc(t, simInfo.Activated, "SIMInfo.Activated"),
    77  					)
    78  				},
    79  				SkipExtractID: true,
    80  			},
    81  			// deactivate
    82  			{
    83  				Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
    84  					client := iaas.NewSIMOp(caller)
    85  					if err := client.Deactivate(ctx, ctx.ID); err != nil {
    86  						return nil, err
    87  					}
    88  					return client.Status(ctx, ctx.ID)
    89  				},
    90  				CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, v interface{}) error {
    91  					simInfo := v.(*iaas.SIMInfo)
    92  					return testutil.DoAsserts(
    93  						testutil.AssertNotNilFunc(t, simInfo, "SIMInfo"),
    94  						testutil.AssertFalseFunc(t, simInfo.Activated, "SIMInfo.Activated"),
    95  					)
    96  				},
    97  				SkipExtractID: true,
    98  			},
    99  			// IMEI lock
   100  			{
   101  				Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   102  					client := iaas.NewSIMOp(caller)
   103  					if err := client.IMEILock(ctx, ctx.ID, &iaas.SIMIMEILockRequest{
   104  						IMEI: "123456789012345",
   105  					}); err != nil {
   106  						return nil, err
   107  					}
   108  					return client.Status(ctx, ctx.ID)
   109  				},
   110  				CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, v interface{}) error {
   111  					simInfo := v.(*iaas.SIMInfo)
   112  					return testutil.DoAsserts(
   113  						testutil.AssertTrueFunc(t, simInfo.IMEILock, "SIMInfo.IMEILock"),
   114  						testutil.AssertEqualFunc(t, "123456789012345", simInfo.IMEI, "SIMInfo.IMEI"),
   115  					)
   116  				},
   117  				SkipExtractID: true,
   118  			},
   119  			// IMEI unlock
   120  			{
   121  				Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   122  					client := iaas.NewSIMOp(caller)
   123  					if err := client.IMEIUnlock(ctx, ctx.ID); err != nil {
   124  						return nil, err
   125  					}
   126  					return client.Status(ctx, ctx.ID)
   127  				},
   128  				CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, v interface{}) error {
   129  					simInfo := v.(*iaas.SIMInfo)
   130  					return testutil.DoAsserts(
   131  						testutil.AssertFalseFunc(t, simInfo.IMEILock, "SIMInfo.IMEILock"),
   132  						testutil.AssertEqualFunc(t, "", simInfo.IMEI, "SIMInfo.IMEI"),
   133  					)
   134  				},
   135  				SkipExtractID: true,
   136  			},
   137  			// network operator
   138  			{
   139  				Func: func(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   140  					client := iaas.NewSIMOp(caller)
   141  					configs := []*iaas.SIMNetworkOperatorConfig{
   142  						{
   143  							Name:  "SoftBank",
   144  							Allow: true,
   145  						},
   146  					}
   147  					if err := client.SetNetworkOperator(ctx, ctx.ID, configs); err != nil {
   148  						return nil, err
   149  					}
   150  					return client.GetNetworkOperator(ctx, ctx.ID)
   151  				},
   152  				CheckFunc: func(t testutil.TestT, ctx *testutil.CRUDTestContext, v interface{}) error {
   153  					config := v.([]*iaas.SIMNetworkOperatorConfig)
   154  					return testutil.DoAsserts(
   155  						testutil.AssertNotEmptyFunc(t, config, "NetworkOperatorConfig"),
   156  					)
   157  				},
   158  				SkipExtractID: true,
   159  			},
   160  		},
   161  
   162  		Delete: &testutil.CRUDTestDeleteFunc{
   163  			Func: testSIMDelete,
   164  		},
   165  	})
   166  }
   167  
   168  func TestSIMOp_Logs(t *testing.T) {
   169  	if !isAccTest() {
   170  		t.Skip("TestSIMOp_Logs only exec at Acceptance Test")
   171  	}
   172  	testutil.PreCheckEnvsFunc("SAKURACLOUD_SIM_ID")(t)
   173  	id := types.StringID(os.Getenv("SAKURACLOUD_SIM_ID"))
   174  
   175  	client := iaas.NewSIMOp(singletonAPICaller())
   176  	logs, err := client.Logs(context.Background(), id)
   177  	assert.NoError(t, err)
   178  	assert.NotEmpty(t, logs)
   179  }
   180  
   181  func initSIMVariables() {
   182  	iccid := os.Getenv("SAKURACLOUD_SIM_ICCID")
   183  	passcode := os.Getenv("SAKURACLOUD_SIM_PASSCODE")
   184  
   185  	createSIMParam = &iaas.SIMCreateRequest{
   186  		Name:        testutil.ResourceName("sim"),
   187  		Description: "desc",
   188  		Tags:        []string{"tag1", "tag2"},
   189  		ICCID:       iccid,
   190  		PassCode:    passcode,
   191  	}
   192  	createSIMExpected = &iaas.SIM{
   193  		Name:         createSIMParam.Name,
   194  		Description:  createSIMParam.Description,
   195  		Tags:         createSIMParam.Tags,
   196  		Availability: types.Availabilities.Available,
   197  		ICCID:        createSIMParam.ICCID,
   198  	}
   199  	updateSIMParam = &iaas.SIMUpdateRequest{
   200  		Name:        testutil.ResourceName("sim-upd"),
   201  		Description: "desc-upd",
   202  		Tags:        []string{"tag1-upd", "tag2-upd"},
   203  	}
   204  	updateSIMExpected = &iaas.SIM{
   205  		Name:         updateSIMParam.Name,
   206  		Description:  updateSIMParam.Description,
   207  		Tags:         updateSIMParam.Tags,
   208  		Availability: types.Availabilities.Available,
   209  		ICCID:        createSIMParam.ICCID,
   210  	}
   211  }
   212  
   213  var (
   214  	ignoreSIMFields = []string{
   215  		"ID",
   216  		"Class",
   217  		"IconID",
   218  		"Info",
   219  		"CreatedAt",
   220  		"ModifiedAt",
   221  	}
   222  	createSIMParam    *iaas.SIMCreateRequest
   223  	createSIMExpected *iaas.SIM
   224  	updateSIMParam    *iaas.SIMUpdateRequest
   225  	updateSIMExpected *iaas.SIM
   226  )
   227  
   228  func testSIMCreate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   229  	client := iaas.NewSIMOp(caller)
   230  	return client.Create(ctx, createSIMParam)
   231  }
   232  
   233  func testSIMRead(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   234  	client := iaas.NewSIMOp(caller)
   235  	return client.Read(ctx, ctx.ID)
   236  }
   237  
   238  func testSIMUpdate(ctx *testutil.CRUDTestContext, caller iaas.APICaller) (interface{}, error) {
   239  	client := iaas.NewSIMOp(caller)
   240  	return client.Update(ctx, ctx.ID, updateSIMParam)
   241  }
   242  
   243  func testSIMDelete(ctx *testutil.CRUDTestContext, caller iaas.APICaller) error {
   244  	client := iaas.NewSIMOp(caller)
   245  	return client.Delete(ctx, ctx.ID)
   246  }