github.com/go-chef/chef@v0.30.1/client_test.go (about) 1 package chef 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "github.com/r3labs/diff" 7 "io" 8 "log" 9 "net/http" 10 "os" 11 "reflect" 12 "testing" 13 ) 14 15 var ( 16 testClientJSON = "test/client.json" 17 ) 18 19 func TestClientFromJSONDecoder(t *testing.T) { 20 if file, err := os.Open(testClientJSON); err != nil { 21 t.Error("unexpected error", err, "during os.Open on", testClientJSON) 22 } else { 23 dec := json.NewDecoder(file) 24 var n Client 25 if err := dec.Decode(&n); err == io.EOF { 26 log.Println(n) 27 } else if err != nil { 28 log.Fatal(err) 29 } 30 } 31 } 32 33 func TestClientsService_List(t *testing.T) { 34 setup() 35 defer teardown() 36 37 mux.HandleFunc("/clients", func(w http.ResponseWriter, r *http.Request) { 38 fmt.Fprintf(w, `{"client1": "http://localhost/clients/client1", "client2": "http://localhost/clients/client2"}`) 39 }) 40 response, err := client.Clients.List() 41 if err != nil { 42 t.Errorf("Clients.List returned error: %v", err) 43 } 44 45 // The order printed by the String function is not defined 46 want := "client1 => http://localhost/clients/client1\nclient2 => http://localhost/clients/client2\n" 47 want2 := "client2 => http://localhost/clients/client2\nclient1 => http://localhost/clients/client1\n" 48 rstr := response.String() 49 if rstr != want && rstr != want2 { 50 t.Errorf("Clients.List returned:\n%+v\nwant:\n%+v\n", rstr, want) 51 } 52 } 53 54 func TestClientsService_Create(t *testing.T) { 55 setup() 56 defer teardown() 57 58 mux.HandleFunc("/clients", func(w http.ResponseWriter, r *http.Request) { 59 fmt.Fprintf(w, `{"uri": "http://localhost/clients/client", 60 "chef_key": { 61 "name": "default", 62 "expiration_date": "infinity", 63 "uri": "http://localhost/clients/client/keys/default", 64 "public_key": "-----BEGIN PUBLIC KEY-----", 65 "private_key": "-----BEGIN PRIVATE KEY-----" 66 } 67 }`) 68 }) 69 70 newclient := ApiNewClient{Name: "client"} 71 response, err := client.Clients.Create(newclient) 72 if err != nil { 73 t.Errorf("Clients.Create returned error: %v", err) 74 } 75 76 want := &ApiClientCreateResult{ 77 Uri: "http://localhost/clients/client", 78 ChefKey: ChefKey{ 79 Name: "default", 80 ExpirationDate: "infinity", 81 Uri: "http://localhost/clients/client/keys/default", 82 PrivateKey: "-----BEGIN PRIVATE KEY-----", 83 PublicKey: "-----BEGIN PUBLIC KEY-----", 84 }, 85 } 86 if !reflect.DeepEqual(response, want) { 87 t.Errorf("Clients.Create returned %+v, want %+v", response, want) 88 } 89 } 90 91 func TestClientsService_Delete(t *testing.T) { 92 setup() 93 defer teardown() 94 95 mux.HandleFunc("/clients/client1", func(w http.ResponseWriter, r *http.Request) { 96 fmt.Fprintf(w, `{}`) 97 }) 98 99 err := client.Clients.Delete("client1") 100 if err != nil { 101 t.Errorf("Clients.Delete returned error: %v", err) 102 } 103 } 104 105 func TestClientsService_Get(t *testing.T) { 106 setup() 107 defer teardown() 108 109 mux.HandleFunc("/clients/client1", func(w http.ResponseWriter, r *http.Request) { 110 fmt.Fprintf(w, `{ 111 "name": "node_name", 112 "clientname": "client1", 113 "validator": false, 114 "orgname": "org_name", 115 "json_class": "Chef::ApiClient", 116 "chef_type": "client" 117 }`) 118 }) 119 120 _, err := client.Clients.Get("client1") 121 if err != nil { 122 t.Errorf("Clients.Get returned error: %v", err) 123 } 124 } 125 126 func TestClientsService_Update(t *testing.T) { 127 setup() 128 defer teardown() 129 130 mux.HandleFunc("/clients/client1", func(w http.ResponseWriter, r *http.Request) { 131 fmt.Fprintf(w, `{ 132 "name": "client2", 133 "clientname": "client2", 134 "validator": false, 135 "json_class": "Chef::ApiClient", 136 "chef_type": "client" 137 }`) 138 }) 139 140 apinewclient := ApiNewClient{ 141 Name: "client2", 142 Validator: false, 143 } 144 updateresult, err := client.Clients.Update("client1", apinewclient) 145 if err != nil { 146 t.Errorf("Clients.Update returned error: %v", err) 147 } 148 want := ApiClient{ 149 Name: "client2", 150 ClientName: "client2", 151 Validator: false, 152 JsonClass: "Chef::ApiClient", 153 ChefType: "client", 154 } 155 if !reflect.DeepEqual(updateresult, &want) { 156 t.Errorf("Clients.Update returned %+v, want %+v", updateresult, want) 157 } 158 } 159 160 func TestCListKeys(t *testing.T) { 161 setup() 162 defer teardown() 163 164 mux.HandleFunc("/clients/client1/keys", func(w http.ResponseWriter, r *http.Request) { 165 switch { 166 case r.Method == "GET": 167 fmt.Fprintf(w, `[ 168 { 169 "name": "default", 170 "uri": "https://chefserver/clients/client1/keys/default", 171 "expired": false 172 } 173 ]`) 174 } 175 }) 176 177 keyresult, err := client.Clients.ListKeys("client1") 178 if err != nil { 179 t.Errorf("Clients.ListKeys returned error: %v", err) 180 } 181 defaultItem := KeyItem{ 182 Name: "default", 183 Uri: "https://chefserver/clients/client1/keys/default", 184 Expired: false, 185 } 186 Want := []KeyItem{defaultItem} 187 if !reflect.DeepEqual(keyresult, Want) { 188 t.Errorf("Clients.ListKeys returned %+v, want %+v", keyresult, Want) 189 } 190 } 191 192 func TestCAddKey(t *testing.T) { 193 setup() 194 defer teardown() 195 196 mux.HandleFunc("/clients/client1/keys", func(w http.ResponseWriter, r *http.Request) { 197 switch { 198 case r.Method == "POST": 199 fmt.Fprintf(w, `{ 200 "name": "newkey", 201 "uri": "https://chefserver/clients/client1/keys/newkey", 202 "expired": false 203 }`) 204 } 205 }) 206 207 keyadd := AccessKey{ 208 Name: "newkey", 209 PublicKey: "RSA KEY", 210 ExpirationDate: "infinity", 211 } 212 keyresult, err := client.Clients.AddKey("client1", keyadd) 213 if err != nil { 214 t.Errorf("Clients.AddKey returned error: %v", err) 215 } 216 Want := KeyItem{ 217 Name: "newkey", 218 Uri: "https://chefserver/clients/client1/keys/newkey", 219 Expired: false, 220 } 221 if !reflect.DeepEqual(keyresult, Want) { 222 t.Errorf("Clients.AddKey returned %+v, want %+v", keyresult, Want) 223 } 224 } 225 226 func TestCDeleteKey(t *testing.T) { 227 setup() 228 defer teardown() 229 230 mux.HandleFunc("/clients/client1/keys/newkey", func(w http.ResponseWriter, r *http.Request) { 231 switch { 232 case r.Method == "DELETE": 233 fmt.Fprintf(w, `{ 234 "name": "newkey", 235 "public_key": "RSA KEY", 236 "expiration_date": "infinity" 237 }`) 238 } 239 }) 240 241 keyresult, err := client.Clients.DeleteKey("client1", "newkey") 242 if err != nil { 243 t.Errorf("Clients.DeleteKey returned error: %v", err) 244 } 245 Want := AccessKey{ 246 Name: "newkey", 247 PublicKey: "RSA KEY", 248 ExpirationDate: "infinity", 249 } 250 if !reflect.DeepEqual(keyresult, Want) { 251 diff, _ := diff.Diff(keyresult, Want) 252 t.Errorf("Clients.DeleteKey returned %+v, want %+v, differences %+v", keyresult, Want, diff) 253 } 254 } 255 256 func TestCGetKey(t *testing.T) { 257 setup() 258 defer teardown() 259 260 mux.HandleFunc("/clients/client1/keys/newkey", func(w http.ResponseWriter, r *http.Request) { 261 switch { 262 case r.Method == "GET": 263 fmt.Fprintf(w, `{ 264 "name": "newkey", 265 "public_key": "RSA KEY", 266 "expiration_date": "infinity" 267 }`) 268 } 269 }) 270 271 keyresult, err := client.Clients.GetKey("client1", "newkey") 272 if err != nil { 273 t.Errorf("Clients.GetKey returned error: %v", err) 274 } 275 Want := AccessKey{ 276 Name: "newkey", 277 PublicKey: "RSA KEY", 278 ExpirationDate: "infinity", 279 } 280 if !reflect.DeepEqual(keyresult, Want) { 281 diff, _ := diff.Diff(keyresult, Want) 282 t.Errorf("Clients.GetKey returned %+v, want %+v, differences %+v", keyresult, Want, diff) 283 } 284 } 285 286 func TestCUpdateKey(t *testing.T) { 287 setup() 288 defer teardown() 289 290 mux.HandleFunc("/clients/client1/keys/newkey", func(w http.ResponseWriter, r *http.Request) { 291 switch { 292 case r.Method == "PUT": 293 fmt.Fprintf(w, `{ 294 "name": "newkey", 295 "public_key": "RSA NEW KEY", 296 "expiration_date": "infinity" 297 }`) 298 } 299 }) 300 301 updkey := AccessKey{ 302 Name: "newkey", 303 PublicKey: "RSA NEW KEY", 304 ExpirationDate: "infinity", 305 } 306 keyresult, err := client.Clients.UpdateKey("client1", "newkey", updkey) 307 if err != nil { 308 t.Errorf("Clients.UpdateKey returned error: %v", err) 309 } 310 Want := AccessKey{ 311 Name: "newkey", 312 PublicKey: "RSA NEW KEY", 313 ExpirationDate: "infinity", 314 } 315 if !reflect.DeepEqual(keyresult, Want) { 316 diff, _ := diff.Diff(keyresult, Want) 317 t.Errorf("Clients.UpdateKey returned %+v, want %+v, differences %+v", keyresult, Want, diff) 318 } 319 }