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  }