github.com/sacloud/iaas-api-go@v1.12.0/testutil/util.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 testutil
    16  
    17  import (
    18  	"fmt"
    19  	"os"
    20  	"sync"
    21  
    22  	client "github.com/sacloud/api-client-go"
    23  	"github.com/sacloud/iaas-api-go"
    24  	"github.com/sacloud/iaas-api-go/helper/api"
    25  	"github.com/sacloud/packages-go/testutil"
    26  )
    27  
    28  // TestResourcePrefix テスト時に作成するリソースの名称に付与するプレフィックス
    29  //
    30  // このプレフィックスを持つリソースは受入テスト実行後に削除される
    31  const TestResourcePrefix = "iaas-api-go-test-"
    32  
    33  // ResourceName テスト時に作成するリソースの名称
    34  func ResourceName(name string) string {
    35  	return fmt.Sprintf("%s%s", TestResourcePrefix, name)
    36  }
    37  
    38  // RandomPrefix テスト時に作成するリソースに付与するランダムなプレフィックスを生成する
    39  func RandomPrefix() string {
    40  	return testutil.RandomName(TestResourcePrefix, 5, testutil.CharSetAlpha) + "-"
    41  }
    42  
    43  // WithRandomPrefix ランダムなプレフィックスをつけて返す
    44  func WithRandomPrefix(name string) string {
    45  	return fmt.Sprintf("%s%s", RandomPrefix(), name)
    46  }
    47  
    48  var apiCaller iaas.APICaller
    49  
    50  var accTestOnce sync.Once
    51  var accTestMu sync.Mutex
    52  
    53  // SingletonAPICaller 環境変数からシングルトンAPICallerを作成する
    54  func SingletonAPICaller() iaas.APICaller {
    55  	accTestMu.Lock()
    56  	defer accTestMu.Unlock()
    57  	accTestOnce.Do(func() {
    58  		if !IsAccTest() {
    59  			os.Setenv("SAKURACLOUD_ACCESS_TOKEN", "dummy")
    60  			os.Setenv("SAKURACLOUD_ACCESS_TOKEN_SECRET", "dummy")
    61  		}
    62  
    63  		accessToken := os.Getenv("SAKURACLOUD_ACCESS_TOKEN")
    64  		accessTokenSecret := os.Getenv("SAKURACLOUD_ACCESS_TOKEN_SECRET")
    65  		apiCaller = api.NewCallerWithOptions(&api.CallerOptions{
    66  			Options: &client.Options{
    67  				AccessToken:       accessToken,
    68  				AccessTokenSecret: accessTokenSecret,
    69  				UserAgent:         "test-" + iaas.DefaultUserAgent,
    70  				AcceptLanguage:    "en-US,en;q=0.9",
    71  				RetryMax:          20,
    72  				Trace:             IsEnableTrace() || IsEnableHTTPTrace(),
    73  			},
    74  			TraceAPI: IsEnableTrace() || IsEnableAPITrace(),
    75  			FakeMode: !IsAccTest(),
    76  		})
    77  	})
    78  	return apiCaller
    79  }
    80  
    81  // TestZone SAKURACLOUD_ZONE環境変数からテスト対象のゾーンを取得 デフォルトはtk1v
    82  func TestZone() string {
    83  	testZone := os.Getenv("SAKURACLOUD_ZONE")
    84  	if testZone == "" {
    85  		testZone = "tk1v"
    86  	}
    87  	return testZone
    88  }
    89  
    90  // IsAccTest TESTACC環境変数が指定されているか
    91  func IsAccTest() bool {
    92  	return testutil.IsAccTest()
    93  }
    94  
    95  // IsEnableTrace SAKURACLOUD_TRACE環境変数が指定されているか
    96  func IsEnableTrace() bool {
    97  	return os.Getenv("SAKURACLOUD_TRACE") != ""
    98  }
    99  
   100  // IsEnableAPITrace SAKURACLOUD_TRACE_API環境変数が指定されているか
   101  func IsEnableAPITrace() bool {
   102  	return os.Getenv("SAKURACLOUD_TRACE_API") != ""
   103  }
   104  
   105  // IsEnableHTTPTrace SAKURACLOUD_TRACE_HTTP環境変数が指定されているか
   106  func IsEnableHTTPTrace() bool {
   107  	return os.Getenv("SAKURACLOUD_TRACE_HTTP") != ""
   108  }