github.com/optim-corp/cios-golang-sdk@v0.5.1/sdk/service_device_management_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 12 srvdevice "github.com/optim-corp/cios-golang-sdk/sdk/service/device" 13 14 xmath "github.com/fcfcqloow/go-advance/math" 15 16 cnv "github.com/fcfcqloow/go-advance/convert" 17 18 "github.com/optim-corp/cios-golang-sdk/cios" 19 sdkmodel "github.com/optim-corp/cios-golang-sdk/model" 20 ) 21 22 func TestDeviceManagement_GetDevices(t *testing.T) { 23 var ( 24 query url.Values 25 ctx context.Context 26 27 tests = []struct { 28 params cios.ApiGetDevicesRequest 29 test func() 30 }{ 31 { 32 params: srvdevice.MakeGetDevicesOpts().Limit(1000), 33 test: func() { 34 if query.Get("limit") != "1000" { 35 t.Fatal("Missing Query", query.Encode()) 36 } else { 37 t.Log(query.Encode()) 38 } 39 }, 40 }, 41 { 42 params: srvdevice.MakeGetDevicesOpts().Limit(1000).Offset(50), 43 test: func() { 44 if query.Get("limit") != "1000" || query.Get("offset") != "50" { 45 t.Fatal("Missing Query", query.Encode()) 46 } else { 47 t.Log(query.Encode()) 48 } 49 }, 50 }, 51 { 52 params: srvdevice.MakeGetDevicesOpts().ResourceOwnerId("aaaaa"), 53 test: func() { 54 if query.Get("resource_owner_id") != "aaaaa" { 55 t.Fatal("Missing Query", query.Encode()) 56 } else { 57 t.Log(query.Encode()) 58 } 59 }, 60 }, 61 { 62 params: srvdevice.MakeGetDevicesOpts().Limit(1000).Offset(50).ResourceOwnerId("aaaaa").Name("name"), 63 test: func() { 64 if query.Get("resource_owner_id") != "aaaaa" || 65 query.Get("name") != "name" { 66 t.Fatal("Missing Query", query.Encode()) 67 } else { 68 t.Log(query.Encode()) 69 } 70 }, 71 }, 72 { 73 params: srvdevice.MakeGetDevicesOpts().OrderBy("created_at"), 74 test: func() { 75 if query.Get("order_by") != "created_at" { 76 t.Fatal("Missing Query", query.Encode()) 77 } else { 78 t.Log(query.Encode()) 79 } 80 }, 81 }, 82 { 83 params: srvdevice.MakeGetDevicesOpts().OrderBy("").Order("").ResourceOwnerId("").Name(""), 84 test: func() { 85 if query.Encode() != "" { 86 t.Fatal("Missing Query", query.Encode()) 87 } else { 88 t.Log(query.Encode()) 89 } 90 }, 91 }, 92 } 93 ) 94 95 // Query Test 96 responseHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 97 query = r.URL.Query() 98 w.Header().Set("Content-Type", "application/json") 99 json.NewEncoder(w).Encode(cios.MultipleDevice{Total: 10}) 100 }) 101 ts := httptest.NewServer(responseHandler) 102 client := NewCiosClient( 103 CiosClientConfig{ 104 Urls: sdkmodel.CIOSUrl{DeviceManagementUrl: ts.URL}, 105 }, 106 ) 107 defer ts.Close() 108 for _, test := range tests { 109 client.DeviceManagement().GetDevices(ctx, test.params) 110 test.test() 111 } 112 113 ts.Close() 114 115 //// Auto Refresh Test 116 //client = NewCiosClient( 117 // CiosClientConfig{ 118 // Urls: sdkmodel.CIOSUrl{DeviceManagementUrl: ts.URL}, 119 // AutoRefresh: true, 120 // }, 121 //) 122 //responseHandler = func(w http.ResponseWriter, r *http.Request) { 123 // w.Header().Set("Content-Type", "application/json") 124 // w.WriteHeader(404) 125 //} 126 //ts = httptest.NewServer(responseHandler) 127 // 128 //result := "Failed" 129 //refFunc := func() (sdkmodel.AccessToken, sdkmodel.Scope, sdkmodel.TokenType, sdkmodel.ExpiresIn, error) { 130 // result = "Accept" 131 // return "", "", "", 0, nil 132 //} 133 //client.DeviceManagement().refresh = &refFunc 134 //if result == "Failed" { 135 // t.Fatal("Cant Refresh", result) 136 //} 137 //// 念のためクローズ 138 //ts.Close() 139 } 140 141 func TestDeviceManagement_GetDevicesAll(t *testing.T) { 142 var offsets []int 143 var limits []int 144 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 145 w.Header().Set("Content-Type", "application/json") 146 response := cios.MultipleDevice{Total: 3500, Devices: []cios.Device{}} 147 offset := cnv.MustInt(r.URL.Query().Get("offset")) 148 limit := cnv.MustInt(r.URL.Query().Get("limit")) 149 offsets = append(offsets, offset) 150 limits = append(limits, limit) 151 for i := 0; i < xmath.MinInt(3500-offset, 1000, limit); i++ { 152 response.Devices = append(response.Devices, cios.Device{Id: cnv.MustStr(i)}) 153 } 154 json.NewEncoder(w).Encode(response) 155 })) 156 defer ts.Close() 157 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{DeviceManagementUrl: ts.URL}}) 158 159 responses, _, _ := client.DeviceManagement().GetDevicesAll(nil, srvdevice.MakeGetDevicesOpts().Limit(999)) 160 if len(responses) != 999 || offsets[0] != 0 && limits[0] != 1000 { 161 t.Fatal(len(responses)) 162 } 163 164 offsets = []int{} 165 limits = []int{} 166 responses, _, _ = client.DeviceManagement().GetDevicesAll(nil, srvdevice.MakeGetDevicesOpts().Limit(1500)) 167 if len(responses) != 1500 || offsets[0] != 0 && limits[0] != 1000 || offsets[1] != 1000 && limits[1] != 1000 { 168 t.Fatal(len(responses), limits, offsets) 169 } 170 offsets = []int{} 171 limits = []int{} 172 responses, _, _ = client.DeviceManagement().GetDevicesAll(nil, srvdevice.MakeGetDevicesOpts().Limit(2001)) 173 if len(responses) != 2001 || offsets[0] != 0 && limits[0] != 1000 || offsets[1] != 1000 && limits[1] != 1000 || offsets[2] != 2000 || limits[2] != 1 { 174 t.Fatal(len(responses), limits, offsets) 175 176 } 177 offsets = []int{} 178 limits = []int{} 179 responses, _, _ = client.DeviceManagement().GetDevicesAll(nil, srvdevice.MakeGetDevicesOpts().Limit(3501)) 180 if len(responses) != 3500 || 181 offsets[0] != 0 || limits[0] != 1000 || 182 offsets[1] != 1000 && limits[1] != 1000 || 183 offsets[2] != 2000 || limits[2] != 1000 || 184 offsets[3] != 3000 || limits[3] != 501 { 185 t.Fatal(len(responses), limits, offsets) 186 } 187 offsets = []int{} 188 limits = []int{} 189 responses, _, _ = client.DeviceManagement().GetDevicesAll(nil, srvdevice.MakeGetDevicesOpts().Limit(2001).Offset(20)) 190 if len(responses) != 2001 || offsets[0] != 20 && limits[0] != 1000 || offsets[1] != 1020 && limits[1] != 1000 || offsets[2] != 2020 || limits[2] != 1 { 191 t.Fatal(len(responses), limits, offsets) 192 193 } 194 } 195 196 func TestDeviceManagement_GetDevicesUnlimited(t *testing.T) { 197 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 198 w.Header().Set("Content-Type", "application/json") 199 response := cios.MultipleDevice{Total: 3500, Devices: []cios.Device{}} 200 offset := cnv.MustInt(r.URL.Query().Get("offset")) 201 limit := cnv.MustInt(r.URL.Query().Get("limit")) 202 for i := 0; i < xmath.MinInt(3500-offset, 1000, limit); i++ { 203 response.Devices = append(response.Devices, cios.Device{Id: cnv.MustStr(i)}) 204 } 205 json.NewEncoder(w).Encode(response) 206 })) 207 defer ts.Close() 208 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{DeviceManagementUrl: ts.URL}}) 209 210 responses, _, _ := client.DeviceManagement().GetDevicesUnlimited(nil, srvdevice.MakeGetDevicesOpts().Limit(1)) 211 if len(responses) != 3500 { 212 t.Fatal(len(responses)) 213 } 214 } 215 216 func TestDeviceManagement_GetDevice(t *testing.T) { 217 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 218 w.Header().Set("Content-Type", "application/json") 219 if r.URL.Path == "/v2/devices/test" { 220 response := cios.SingleDevice{Device: cios.Device{ 221 Id: "test", 222 ResourceOwnerId: "test_resource_owner", 223 Name: cnv.StrPtr(""), 224 }} 225 json.NewEncoder(w).Encode(response) 226 } 227 })) 228 defer ts.Close() 229 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{DeviceManagementUrl: ts.URL}}) 230 body, response, err := client.DeviceManagement().GetDevice(nil, "test", nil, nil) 231 if body.Id != "test" || err != nil || response.StatusCode != 200 { 232 t.Fatal(body) 233 } 234 } 235 236 func TestDeviceManagement_CreateDevice(t *testing.T) { 237 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 238 if r.URL.Path != "/v2/devices" { 239 t.Fatal(r.URL.Path) 240 } 241 w.Header().Set("Content-Type", "application/json") 242 body := cios.DeviceInfo{} 243 if r.Method != "POST" { 244 t.Fatal(r.Method) 245 } 246 byts, _ := ioutil.ReadAll(r.Body) 247 cnv.UnMarshalJson(byts, &body) 248 if *body.Name != "name" || body.ResourceOwnerId != "resource_owner_id" { 249 t.Fatal(body) 250 } 251 252 })) 253 defer ts.Close() 254 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{DeviceManagementUrl: ts.URL}}) 255 _, _, err := client.DeviceManagement().CreateDevice(nil, cios.DeviceInfo{ 256 Name: cnv.StrPtr("name"), 257 ResourceOwnerId: "resource_owner_id", 258 }) 259 if err != nil { 260 t.Fatal(err.Error()) 261 } 262 } 263 264 func TestDeviceManagement_DeleteDevice(t *testing.T) { 265 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 266 w.Header().Set("Content-Type", "application/json") 267 if r.URL.Path != "/v2/devices/device_id" { 268 t.Fatal(r.URL.Path) 269 } 270 if r.Method != "DELETE" { 271 t.Fatal(r.Method) 272 } 273 })) 274 defer ts.Close() 275 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{DeviceManagementUrl: ts.URL}}) 276 _, err := client.DeviceManagement().DeleteDevice(nil, "device_id") 277 if err != nil { 278 t.Fatal(err.Error()) 279 } 280 } 281 func TestDeviceManagement_UpdateDevice(t *testing.T) { 282 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 283 w.Header().Set("Content-Type", "application/json") 284 body := cios.DeviceUpdateRequest{} 285 byts, _ := ioutil.ReadAll(r.Body) 286 cnv.UnMarshalJson(byts, &body) 287 if *body.Name != "name" || *body.Description != "desc" || 288 *body.IdNumber != "1234" || 289 *body.RsaPublickey != "rsa" { 290 t.Fatal(body) 291 } 292 if r.URL.Path != "/v2/devices/responseid" { 293 t.Fatal(r.URL.Path) 294 } 295 if r.Method != "PATCH" { 296 t.Fatal(r.Method) 297 } 298 })) 299 defer ts.Close() 300 client := NewCiosClient(CiosClientConfig{Urls: sdkmodel.CIOSUrl{DeviceManagementUrl: ts.URL}}) 301 _, _, err := client.DeviceManagement().UpdateDevice(nil, "responseid", cios.DeviceUpdateRequest{ 302 Name: cnv.StrPtr("name"), 303 IdNumber: cnv.StrPtr("1234"), 304 Description: cnv.StrPtr("desc"), 305 RsaPublickey: cnv.StrPtr("rsa"), 306 }) 307 if err != nil { 308 t.Fatal(err.Error()) 309 } 310 }