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  }