1
// Copyright 2014 ALTOROS
2
// Licensed under the AGPLv3, see LICENSE file for details.
10
"github.com/altoros/gosigma/data"
11
"github.com/altoros/gosigma/mock"
14
var mockEndpoint string
18
mockEndpoint = mock.Endpoint("")
21
func newDataServer() *data.Server {
23
Resource: data.Resource{URI: "uri", UUID: "uuid"},
24
Meta: map[string]string{"key1": "value1", "key2": "value2"},
30
func createTestClient(t *testing.T) (*Client, error) {
31
cli, err := NewClient(mockEndpoint, mock.TestUser, mock.TestPassword, nil)
43
type testLog struct{ written int }
45
func (l *testLog) Log(args ...interface{}) { l.written++ }
46
func (l *testLog) Logf(format string, args ...interface{}) { l.written++ }
48
func TestClientLogger(t *testing.T) {
49
cli, err := NewClient("https://0.1.2.3:2000/api/2.0/", mock.TestUser, mock.TestPassword, nil)
50
if err != nil || cli == nil {
51
t.Error("NewClient() failed:", err, cli)
58
cli.ConnectTimeout(100 * time.Millisecond)
59
cli.ReadWriteTimeout(100 * time.Millisecond)
61
ssf, err := cli.Servers(false)
62
if err == nil || ssf != nil {
63
t.Error("Servers(false) returned valid result for unavailable endpoint")
68
t.Error("no writes to log")
72
func TestClientTimeouts(t *testing.T) {
73
cli, err := createTestClient(t)
74
if err != nil || cli == nil {
75
t.Error("NewClient() failed:", err, cli)
79
cli.ConnectTimeout(100 * time.Millisecond)
80
if v := cli.GetConnectTimeout(); v != 100*time.Millisecond {
81
t.Error("ConnectTimeout check failed")
84
cli.ReadWriteTimeout(200 * time.Millisecond)
85
if v := cli.GetReadWriteTimeout(); v != 200*time.Millisecond {
86
t.Error("ReadWriteTimeout check failed")
89
cli.OperationTimeout(300 * time.Millisecond)
90
if v := cli.GetOperationTimeout(); v != 300*time.Millisecond {
91
t.Error("OperationTimeout check failed")
95
func TestClientEmptyUUID(t *testing.T) {
96
cli, err := createTestClient(t)
97
if err != nil || cli == nil {
98
t.Error("NewClient() failed:", err, cli)
102
if _, err := cli.Server(""); err != errEmptyUUID {
103
t.Error("Server('') must fail with errEmptyUUID")
105
if err := cli.StartServer("", nil); err != errEmptyUUID {
106
t.Error("StartServer('') must fail with errEmptyUUID")
108
if err := cli.StopServer(""); err != errEmptyUUID {
109
t.Error("StopServer('') must fail with errEmptyUUID")
111
if err := cli.RemoveServer("", RecurseAllDrives); err != errEmptyUUID {
112
t.Error("RemoveServer('') must fail with errEmptyUUID")
114
if _, err := cli.Drive("", true); err != errEmptyUUID {
115
t.Error("Drive('') must fail with errEmptyUUID")
117
if _, err := cli.Job(""); err != errEmptyUUID {
118
t.Error("Job('') must fail with errEmptyUUID")
120
if _, err := cli.CloneDrive("", false, CloneParams{}, nil); err != errEmptyUUID {
121
t.Error("CloneDrive('') must fail with errEmptyUUID")
123
if err := cli.RemoveDrive("", false); err != errEmptyUUID {
124
t.Error("RemoveDrive('') must fail with errEmptyUUID")
128
func TestClientEndpointUnavailableSoft(t *testing.T) {
129
cli, err := NewClient(mockEndpoint+"1", mock.TestUser, mock.TestPassword, nil)
130
if err != nil || cli == nil {
131
t.Error("NewClient() failed:", err, cli)
139
ssf, err := cli.Servers(false)
140
if err == nil || ssf != nil {
141
t.Errorf("Servers(false) returned valid result for unavailable endpoint: %#v", ssf)
144
t.Log("OK: Servers(false)", err)
146
sst, err := cli.Servers(true)
147
if err == nil || sst != nil {
148
t.Errorf("Servers(true) returned valid result for unavailable endpoint: %#v", sst)
151
t.Log("OK: Servers(true)", err)
153
s, err := cli.Server("uuid")
155
t.Errorf("Server() returned valid result with for unavailable endpoint: %#v", s)
158
t.Log("OK, Server():", err)
160
if _, err = cli.CreateServer(Components{}); err == nil {
161
t.Error("CreateServer() returned valid result for unavailable endpoint")
164
t.Log("OK, CreateServer():", err)
166
err = cli.StartServer("uuid", nil)
168
t.Error("StartServer() returned valid result for unavailable endpoint")
171
t.Log("OK, StartServer():", err)
173
err = cli.StopServer("uuid")
175
t.Error("StopServer() returned valid result for unavailable endpoint")
178
t.Log("OK, StopServer():", err)
180
err = cli.RemoveServer("uuid", RecurseAllDrives)
182
t.Error("RemoveServer() returned valid result for unavailable endpoint")
185
t.Log("OK, RemoveServer():", err)
187
dd, err := cli.Drives(false, false)
189
t.Errorf("Drives(false) returned valid result for unavailable endpoint: %#v", dd)
192
t.Log("OK, Drives(false):", err)
194
d, err := cli.Drive("uuid", false)
196
t.Errorf("Drive(false) returned valid result for unavailable endpoint: %#v", d)
199
t.Log("OK, Drive(false):", err)
201
cd, err := cli.CloneDrive("uuid", false, CloneParams{}, nil)
203
t.Errorf("CloneDrive() returned valid result for unavailable endpoint: %#v", cd)
207
err = cli.RemoveDrive("uuid", false)
209
t.Error("RemoveDrive() returned valid result for unavailable endpoint")
213
j, err := cli.Job("uuid")
215
t.Errorf("Job() returned valid result for unavailable endpoint: %#v", j)
218
t.Log("OK, Job():", err)
221
func TestClientEndpointUnavailableHard(t *testing.T) {
222
cli, err := NewClient("https://0.1.2.3:2000/api/2.0/", mock.TestUser, mock.TestPassword, nil)
223
if err != nil || cli == nil {
224
t.Error("NewClient() failed:", err, cli)
232
cli.ConnectTimeout(100 * time.Millisecond)
233
cli.ReadWriteTimeout(100 * time.Millisecond)
235
ssf, err := cli.Servers(false)
236
if err == nil || ssf != nil {
237
t.Error("Servers(false) returned valid result for unavailable endpoint")
240
t.Log("OK: Servers(false)", err)
242
sst, err := cli.Servers(true)
243
if err == nil || sst != nil {
244
t.Error("Servers(true) returned valid result for unavailable endpoint")
247
t.Log("OK: Servers(true)", err)
249
s, err := cli.Server("uuid")
251
t.Errorf("Server() returned valid result for unavailable endpoint: %#v", s)
254
t.Log("OK, Server():", err)
256
if _, err = cli.CreateServer(Components{}); err == nil {
257
t.Error("CreateServer() returned valid result for unavailable endpoint")
260
t.Log("OK, CreateServer():", err)
262
err = cli.StartServer("uuid", nil)
264
t.Error("StartServer() returned valid result for unavailable endpoint")
267
t.Log("OK, StartServer():", err)
269
err = cli.StopServer("uuid")
271
t.Error("StopServer() returned valid result for unavailable endpoint")
274
t.Log("OK, StopServer():", err)
276
err = cli.RemoveServer("uuid", RecurseAllDrives)
278
t.Error("RemoveServer() returned valid result for unavailable endpoint")
281
t.Log("OK, RemoveServer():", err)
283
dd, err := cli.Drives(false, false)
285
t.Errorf("Drives(false) returned valid result for unavailable endpoint: %#v", dd)
288
t.Log("OK, Drives(false):", err)
290
d, err := cli.Drive("uuid", false)
292
t.Errorf("Drive(false) returned valid result for unavailable endpoint: %#v", d)
295
t.Log("OK, Drive(false):", err)
297
cd, err := cli.CloneDrive("uuid", false, CloneParams{}, nil)
299
t.Errorf("CloneDrive() returned valid result for unavailable endpoint: %#v", cd)
303
err = cli.RemoveDrive("uuid", false)
305
t.Error("RemoveDrive() returned valid result for unavailable endpoint")
309
j, err := cli.Job("uuid")
311
t.Errorf("Job() returned valid result for unavailable endpoint: %#v", j)
314
t.Log("OK, Job():", err)