1package govultr
2
3import (
4	"fmt"
5	"net/http"
6	"reflect"
7	"testing"
8)
9
10func TestObjectStorageServiceHandler_Create(t *testing.T) {
11	setup()
12	defer teardown()
13
14	mux.HandleFunc("/v2/object-storage", func(writer http.ResponseWriter, request *http.Request) {
15		response := `{"object_storage":{"id":"39239784","date_created":"2020-07-1414:07:28","cluster_id":2,"region":"ewr","location":"New Jersey","label":"api-obj-storage2","status":"pending","s3_hostname":"","s3_access_key":"","s3_secret_key":""}}`
16		fmt.Fprint(writer, response)
17	})
18
19	objectStorage, err := client.ObjectStorage.Create(ctx, 2, "api-obj-storage2")
20	if err != nil {
21		t.Errorf("ObjectStorage.Create returned %+v", err)
22	}
23
24	expected := &ObjectStorage{
25		ID:                   "39239784",
26		DateCreated:          "2020-07-1414:07:28",
27		ObjectStoreClusterID: 2,
28		Region:               "ewr",
29		Location:             "New Jersey",
30		Label:                "api-obj-storage2",
31		Status:               "pending",
32		S3Keys:               S3Keys{},
33	}
34
35	if !reflect.DeepEqual(objectStorage, expected) {
36		t.Errorf("ObjectStorage.Create returned %+v, expected %+v", objectStorage, expected)
37	}
38}
39
40func TestObjectStorageServiceHandler_Get(t *testing.T) {
41	setup()
42	defer teardown()
43	mux.HandleFunc("/v2/object-storage/39239784", func(writer http.ResponseWriter, request *http.Request) {
44		response := `{"object_storage":{"id":"39239784","date_created":"2020-07-1414:07:28","cluster_id":2,"region":"ewr","label":"","status":"active","s3_hostname":"ewr1.vultrobjects.com","s3_access_key":"F123","s3_secret_key":"F1234"}}`
45		fmt.Fprint(writer, response)
46	})
47
48	s3, err := client.ObjectStorage.Get(ctx, "39239784")
49
50	if err != nil {
51		t.Errorf("ObjectStorage.Get returned %+v", err)
52	}
53
54	expected := &ObjectStorage{
55		ID:                   "39239784",
56		DateCreated:          "2020-07-1414:07:28",
57		ObjectStoreClusterID: 2,
58		Region:               "ewr",
59		Label:                "",
60		Status:               "active",
61		S3Keys: S3Keys{
62			S3Hostname:  "ewr1.vultrobjects.com",
63			S3AccessKey: "F123",
64			S3SecretKey: "F1234",
65		},
66	}
67	if !reflect.DeepEqual(s3, expected) {
68		t.Errorf("ObjectStorage.Get returned %+v, expected %+v", s3, expected)
69	}
70}
71
72func TestObjectStorageServiceHandler_Update(t *testing.T) {
73	setup()
74	defer teardown()
75
76	mux.HandleFunc("/v2/object-storage/1234", func(writer http.ResponseWriter, request *http.Request) {
77		fmt.Fprint(writer)
78	})
79
80	err := client.ObjectStorage.Update(ctx, "1234", "s3 label")
81	if err != nil {
82		t.Errorf("ObjectStorage.Create returned %+v", err)
83	}
84}
85
86func TestObjectStorageServiceHandler_Delete(t *testing.T) {
87	setup()
88	defer teardown()
89
90	mux.HandleFunc("/v2/object-storage/1234", func(writer http.ResponseWriter, request *http.Request) {
91		fmt.Fprint(writer)
92	})
93
94	err := client.ObjectStorage.Delete(ctx, "1234")
95	if err != nil {
96		t.Errorf("ObjectStorage.Delete returned %+v", err)
97	}
98}
99
100func TestObjectStorageServiceHandler_List(t *testing.T) {
101	setup()
102	defer teardown()
103	mux.HandleFunc("/v2/object-storage", func(writer http.ResponseWriter, request *http.Request) {
104		response := `{"object_storages":[{"id":"39240368","date_created":"2020-07-1414:22:38","cluster_id":2,"region":"ewr","label":"govultr","status":"active","s3_hostname":"ewr1.vultrobjects.com","s3_access_key":"n1234","s3_secret_key":"b1234"}],"meta":{"total":1,"links":{"next":"","prev":""}}}`
105		fmt.Fprint(writer, response)
106	})
107
108	s3s, meta, err := client.ObjectStorage.List(ctx, nil)
109	if err != nil {
110		t.Errorf("ObjectStorage.List returned %+v", err)
111	}
112
113	expectedObject := []ObjectStorage{
114		{
115			ID:                   "39240368",
116			DateCreated:          "2020-07-1414:22:38",
117			ObjectStoreClusterID: 2,
118			Region:               "ewr",
119			Label:                "govultr",
120			Status:               "active",
121			S3Keys: S3Keys{
122				S3Hostname:  "ewr1.vultrobjects.com",
123				S3AccessKey: "n1234",
124				S3SecretKey: "b1234",
125			},
126		},
127	}
128
129	if !reflect.DeepEqual(s3s, expectedObject) {
130		t.Errorf("ObjectStorage.List object returned %+v, expected %+v", s3s, expectedObject)
131	}
132
133	expectedmeta := &Meta{
134		Total: 1,
135		Links: &Links{},
136	}
137
138	if !reflect.DeepEqual(meta, expectedmeta) {
139		t.Errorf("ObjectStorage.List meta object returned %+v, expected %+v", meta, expectedmeta)
140	}
141}
142
143func TestObjectStorageServiceHandler_ListCluster(t *testing.T) {
144	setup()
145	defer teardown()
146	mux.HandleFunc("/v2/object-storage/clusters", func(writer http.ResponseWriter, request *http.Request) {
147		response := `{"clusters":[{"id":2,"region":"ewr","hostname":"ewr1.vultrobjects.com","deploy":"yes"}],"meta":{"total":1,"links":{"next":"","prev":""}}}`
148		fmt.Fprint(writer, response)
149	})
150
151	clusters, meta, err := client.ObjectStorage.ListCluster(ctx, nil)
152
153	if err != nil {
154		t.Errorf("ObjectStorage.ListCluster returned %+v", err)
155	}
156
157	expected := []ObjectStorageCluster{
158		{
159			ID:       2,
160			Region:   "ewr",
161			Hostname: "ewr1.vultrobjects.com",
162			Deploy:   "yes",
163		},
164	}
165
166	if !reflect.DeepEqual(clusters, expected) {
167		t.Errorf("ObjectStorage.ListCluster clusters returned %+v, expected %+v", clusters, expected)
168	}
169
170	expectedMeta := &Meta{
171		Total: 1,
172		Links: &Links{},
173	}
174
175	if !reflect.DeepEqual(meta, expectedMeta) {
176		t.Errorf("ObjectStorage.List meta object returned %+v, expected %+v", meta, expectedMeta)
177	}
178}
179
180func TestObjectStorageServiceHandler_RegenerateKeys(t *testing.T) {
181	setup()
182	defer teardown()
183	mux.HandleFunc("/v2/object-storage/1234/regenerate-keys", func(writer http.ResponseWriter, request *http.Request) {
184		response := `{"s3_credentials":{"s3_hostname":"ewr1.vultrobjects.com","s3_access_key":"f1234","s3_secret_key":"g1234"}}`
185		fmt.Fprint(writer, response)
186	})
187
188	s3Keys, err := client.ObjectStorage.RegenerateKeys(ctx, "1234")
189
190	if err != nil {
191		t.Errorf("ObjectStorage.RegenerateKeys returned %+v", err)
192	}
193
194	expected := &S3Keys{
195		S3Hostname:  "ewr1.vultrobjects.com",
196		S3AccessKey: "f1234",
197		S3SecretKey: "g1234",
198	}
199
200	if !reflect.DeepEqual(s3Keys, expected) {
201		t.Errorf("ObjectStorage.RegenerateKeys returned %+v, expected %+v", s3Keys, expected)
202	}
203}
204