github.com/optim-corp/cios-golang-sdk@v0.5.1/sdk/service_filestorage_bucket_test.go (about) 1 package ciossdk 2 3 import ( 4 "context" 5 "encoding/json" 6 "io/ioutil" 7 "net/http" 8 "net/http/httptest" 9 "net/url" 10 "testing" 11 "time" 12 13 srvfilestorage "github.com/optim-corp/cios-golang-sdk/sdk/service/filestorage" 14 15 ciosctx "github.com/optim-corp/cios-golang-sdk/ctx" 16 17 xmath "github.com/fcfcqloow/go-advance/math" 18 19 cnv "github.com/fcfcqloow/go-advance/convert" 20 21 "github.com/optim-corp/cios-golang-sdk/cios" 22 sdkmodel "github.com/optim-corp/cios-golang-sdk/model" 23 ) 24 25 func Test_RefreshBucket(t *testing.T) { 26 count, _token, ctx := 0, "", context.Background() 27 handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 28 w.Header().Set("Content-Type", "application/json") 29 _token = r.Header.Get("Authorization") 30 if r.URL.Path == "/connect/token" { 31 count += 1 32 json.NewEncoder(w).Encode(cios.ConnectTokenResponse{ 33 AccessToken: sampleToken, 34 TokenType: "", 35 RefreshToken: "", 36 ExpiresIn: 0, 37 Scope: "", 38 }) 39 } 40 }) 41 ts := httptest.NewServer(handler) 42 client := NewCiosClient(CiosClientConfig{ 43 AutoRefresh: true, 44 Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL, AuthUrl: ts.URL}, 45 AuthConfig: RefreshTokenAuth( 46 "clientID", 47 "clientSecret", 48 "assertion", 49 "scope", 50 ), 51 }) 52 funcs := []func(){ 53 func() { client.FileStorage().GetBuckets(ctx, srvfilestorage.MakeGetBucketsOpts()) }, 54 func() { client.FileStorage().CreateBucket(ctx, "", "") }, 55 func() { client.FileStorage().GetBucket(ctx, "") }, 56 func() { client.FileStorage().UpdateBucket(ctx, "", "") }, 57 func() { client.FileStorage().DeleteBucket(ctx, "") }, 58 } 59 for i, fnc := range funcs { 60 fnc() 61 if _token != "Bearer "+sampleToken { 62 t.Fatal(_token) 63 } 64 if count != i+1 { 65 t.Fatal(count) 66 } 67 _token = "" 68 } 69 for _, fnc := range funcs { 70 client.SetTokenExp(time.Now().Unix() + 10000) 71 fnc() 72 if _token != "Bearer "+sampleToken { 73 t.Fatal(_token) 74 } 75 if count != len(funcs) { 76 t.Fatal(count) 77 } 78 _token = "" 79 } 80 81 ctx = ciosctx.WithToken(ctx, "AAA") 82 count = 0 83 _token = "" 84 client = NewCiosClient(CiosClientConfig{ 85 AutoRefresh: true, 86 Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL, AuthUrl: ts.URL}, 87 AuthConfig: RefreshTokenAuth( 88 "clientID", 89 "clientSecret", 90 "assertion", 91 "scope", 92 ), 93 }) 94 for i, fnc := range funcs { 95 fnc() 96 if _token != "Bearer AAA" { 97 t.Fatal(_token) 98 } 99 if count != i+1 { 100 t.Fatal(count) 101 } 102 _token = "" 103 } 104 } 105 106 func TestFileStorage_GetBuckets(t *testing.T) { 107 var ( 108 query url.Values 109 ctx context.Context 110 111 tests = []struct { 112 params cios.ApiGetBucketsRequest 113 test func() 114 }{ 115 { 116 params: srvfilestorage.MakeGetBucketsOpts().Limit(1000), 117 test: func() { 118 if query.Get("limit") != "1000" { 119 t.Fatal("Missing Query", query.Encode()) 120 } else { 121 t.Log(query.Encode()) 122 } 123 }, 124 }, 125 { 126 params: srvfilestorage.MakeGetBucketsOpts().Limit(1000).Offset(50), 127 test: func() { 128 if query.Get("limit") != "1000" || query.Get("offset") != "50" { 129 t.Fatal("Missing Query", query.Encode()) 130 } else { 131 t.Log(query.Encode()) 132 } 133 }, 134 }, 135 { 136 params: srvfilestorage.MakeGetBucketsOpts().ResourceOwnerId("aaaaa"), 137 test: func() { 138 if query.Get("resource_owner_id") != "aaaaa" { 139 t.Fatal("Missing Query", query.Encode()) 140 } else { 141 t.Log(query.Encode()) 142 } 143 }, 144 }, 145 { 146 params: srvfilestorage.MakeGetBucketsOpts().Limit(1000).Offset(50).ResourceOwnerId("aaaaa").Name("name"), 147 test: func() { 148 if query.Get("resource_owner_id") != "aaaaa" || 149 query.Get("name") != "name" { 150 t.Fatal("Missing Query", query.Encode()) 151 } else { 152 t.Log(query.Encode()) 153 } 154 }, 155 }, 156 { 157 params: srvfilestorage.MakeGetBucketsOpts().OrderBy("created_at"), 158 test: func() { 159 if query.Get("order_by") != "created_at" { 160 t.Fatal("Missing Query", query.Encode()) 161 } else { 162 t.Log(query.Encode()) 163 } 164 }, 165 }, 166 { 167 params: srvfilestorage.MakeGetBucketsOpts().OrderBy("").Order("").ResourceOwnerId("").Name(""), 168 test: func() { 169 if query.Encode() != "" { 170 t.Fatal("Missing Query", query.Encode()) 171 } else { 172 t.Log(query.Encode()) 173 } 174 }, 175 }, 176 } 177 ) 178 179 // Query Test 180 bucketHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 181 query = r.URL.Query() 182 w.Header().Set("Content-Type", "application/json") 183 json.NewEncoder(w).Encode(cios.MultipleBucket{Total: 10}) 184 }) 185 ts := httptest.NewServer(bucketHandler) 186 client := NewCiosClient( 187 CiosClientConfig{ 188 Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL}, 189 }, 190 ) 191 defer ts.Close() 192 for _, test := range tests { 193 client.FileStorage().GetBuckets(ctx, test.params) 194 test.test() 195 } 196 197 ts.Close() 198 } 199 200 func TestFileStorage_GetBucketsAll(t *testing.T) { 201 var offsets []int 202 var limits []int 203 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 204 w.Header().Set("Content-Type", "application/json") 205 response := cios.MultipleBucket{Total: 3500, Buckets: []cios.Bucket{}} 206 offset := cnv.MustInt(r.URL.Query().Get("offset")) 207 limit := cnv.MustInt(r.URL.Query().Get("limit")) 208 offsets = append(offsets, offset) 209 limits = append(limits, limit) 210 for i := 0; i < xmath.MinInt(3500-offset, 1000, limit); i++ { 211 response.Buckets = append(response.Buckets, cios.Bucket{Id: cnv.MustStr(i)}) 212 } 213 json.NewEncoder(w).Encode(response) 214 })) 215 defer ts.Close() 216 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL}}) 217 218 buckets, _, _ := client.FileStorage().GetBucketsAll(nil, srvfilestorage.MakeGetBucketsOpts().Limit(999)) 219 if len(buckets) != 999 || offsets[0] != 0 && limits[0] != 1000 { 220 t.Fatal(len(buckets)) 221 } 222 223 offsets = []int{} 224 limits = []int{} 225 buckets, _, _ = client.FileStorage().GetBucketsAll(nil, srvfilestorage.MakeGetBucketsOpts().Limit(1500)) 226 if len(buckets) != 1500 || offsets[0] != 0 && limits[0] != 1000 || offsets[1] != 1000 && limits[1] != 1000 { 227 t.Fatal(len(buckets), limits, offsets) 228 } 229 offsets = []int{} 230 limits = []int{} 231 buckets, _, _ = client.FileStorage().GetBucketsAll(nil, srvfilestorage.MakeGetBucketsOpts().Limit(2001)) 232 if len(buckets) != 2001 || offsets[0] != 0 && limits[0] != 1000 || offsets[1] != 1000 && limits[1] != 1000 || offsets[2] != 2000 || limits[2] != 1 { 233 t.Fatal(len(buckets), limits, offsets) 234 235 } 236 offsets = []int{} 237 limits = []int{} 238 buckets, _, _ = client.FileStorage().GetBucketsAll(nil, srvfilestorage.MakeGetBucketsOpts().Limit(3501)) 239 if len(buckets) != 3500 || 240 offsets[0] != 0 || limits[0] != 1000 || 241 offsets[1] != 1000 && limits[1] != 1000 || 242 offsets[2] != 2000 || limits[2] != 1000 || 243 offsets[3] != 3000 || limits[3] != 501 { 244 t.Fatal(len(buckets), limits, offsets) 245 } 246 offsets = []int{} 247 limits = []int{} 248 buckets, _, _ = client.FileStorage().GetBucketsAll(nil, srvfilestorage.MakeGetBucketsOpts().Limit(2001).Offset(20)) 249 if len(buckets) != 2001 || offsets[0] != 20 && limits[0] != 1000 || offsets[1] != 1020 && limits[1] != 1000 || offsets[2] != 2020 || limits[2] != 1 { 250 t.Fatal(len(buckets), limits, offsets) 251 252 } 253 } 254 255 func TestFileStorage_GetBucketsUnlimited(t *testing.T) { 256 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 257 w.Header().Set("Content-Type", "application/json") 258 response := cios.MultipleBucket{Total: 3500, Buckets: []cios.Bucket{}} 259 offset := cnv.MustInt(r.URL.Query().Get("offset")) 260 limit := cnv.MustInt(r.URL.Query().Get("limit")) 261 for i := 0; i < xmath.MinInt(3500-offset, 1000, limit); i++ { 262 response.Buckets = append(response.Buckets, cios.Bucket{Id: cnv.MustStr(i)}) 263 } 264 json.NewEncoder(w).Encode(response) 265 })) 266 defer ts.Close() 267 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL}}) 268 269 buckets, _, _ := client.FileStorage().GetBucketsUnlimited(nil, srvfilestorage.MakeGetBucketsOpts().Limit(1)) 270 if len(buckets) != 3500 { 271 t.Fatal(len(buckets)) 272 } 273 } 274 275 func TestFileStorage_GetBucket(t *testing.T) { 276 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 277 w.Header().Set("Content-Type", "application/json") 278 if r.URL.Path == "/v2/file_storage/buckets/test" { 279 response := cios.SingleBucket{Bucket: cios.Bucket{ 280 Id: "test", 281 ResourceOwnerId: "test_resource_owner", 282 CreatedAt: nil, 283 CreatedBy: nil, 284 UpdatedAt: nil, 285 UpdatedBy: nil, 286 Name: "", 287 Files: nil, 288 }} 289 json.NewEncoder(w).Encode(response) 290 } 291 })) 292 defer ts.Close() 293 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL}}) 294 bucket, response, err := client.FileStorage().GetBucket(nil, "test") 295 if bucket.Id != "test" || err != nil || response.StatusCode != 200 { 296 t.Fatal(bucket) 297 } 298 } 299 300 func TestFileStorage_CreateBucket(t *testing.T) { 301 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 302 w.Header().Set("Content-Type", "application/json") 303 body := cios.BucketRequest{} 304 if r.Method != "POST" { 305 t.Fatal(r.Method) 306 } 307 byts, _ := ioutil.ReadAll(r.Body) 308 cnv.UnMarshalJson(byts, &body) 309 if body.Name != "name" || body.ResourceOwnerId != "resource_owner_id" { 310 t.Fatal(body) 311 } 312 313 })) 314 defer ts.Close() 315 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL}}) 316 _, _, err := client.FileStorage().CreateBucket(nil, "resource_owner_id", "name") 317 if err != nil { 318 t.Fatal(err.Error()) 319 } 320 } 321 322 func TestFileStorage_DeleteBucket(t *testing.T) { 323 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 324 w.Header().Set("Content-Type", "application/json") 325 if r.URL.Path != "/v2/file_storage/buckets/bucketid" { 326 t.Fatal(r.URL.Path) 327 } 328 if r.Method != "DELETE" { 329 t.Fatal(r.Method) 330 } 331 })) 332 defer ts.Close() 333 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL}}) 334 _, err := client.FileStorage().DeleteBucket(nil, "bucketid") 335 if err != nil { 336 t.Fatal(err.Error()) 337 } 338 } 339 func TestFileStorage_UpdateBucket(t *testing.T) { 340 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 341 w.Header().Set("Content-Type", "application/json") 342 body := cios.BucketName{} 343 byts, _ := ioutil.ReadAll(r.Body) 344 cnv.UnMarshalJson(byts, &body) 345 if r.URL.Path != "/v2/file_storage/buckets/bucketid" { 346 t.Fatal(r.URL.Path) 347 } 348 if r.Method != "PATCH" { 349 t.Fatal(r.Method) 350 } 351 if body.Name != "test" { 352 t.Fatal(body) 353 } 354 })) 355 defer ts.Close() 356 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{StorageUrl: ts.URL}}) 357 _, err := client.FileStorage().UpdateBucket(nil, "bucketid", "test") 358 if err != nil { 359 t.Fatal(err.Error()) 360 } 361 }