github.com/go-chef/chef@v0.30.1/status_test.go (about)

     1  package chef
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"io"
     7  	"log"
     8  	"net/http"
     9  	"os"
    10  	"reflect"
    11  	"testing"
    12  )
    13  
    14  var (
    15  	testStatusJSON = "test/status.json"
    16  )
    17  
    18  func TestStatusFromJSONDecoder(t *testing.T) {
    19  	if file, err := os.Open(testStatusJSON); err != nil {
    20  		t.Error("Unexpected error '", err, "' during os.Open on", testStatusJSON)
    21  	} else {
    22  		dec := json.NewDecoder(file)
    23  		var g Status
    24  		if err := dec.Decode(&g); err == io.EOF {
    25  			log.Fatal(g)
    26  		} else if err != nil {
    27  			log.Fatal(err)
    28  		}
    29  	}
    30  }
    31  
    32  func TestStatusGet(t *testing.T) {
    33  	setup()
    34  	defer teardown()
    35  
    36  	mux.HandleFunc("/_status", func(w http.ResponseWriter, r *http.Request) {
    37  		dec := json.NewDecoder(r.Body)
    38  		var request Status
    39  		dec.Decode(&request)
    40  		switch {
    41  		case r.Method == "GET":
    42  			fmt.Fprintf(w, `{
    43                          	"status": "pong",
    44  	                        "upstreams": {
    45  		                        "chef_elasticsearch": "pong",
    46  		                        "chef_sql": "pong",
    47  		                        "chef_index": "pong",
    48  		                        "oc_chef_authz": "pong",
    49  		                        "data_collector": "pong"
    50  	                        },
    51  	                        "keygen": {
    52  		                        "keys": 10,
    53  		                        "max": 10,
    54  		                        "max_workers": 2,
    55  		                        "cur_max_workers": 2,
    56  		                        "inflight": 0,
    57  		                        "avail_workers": 2,
    58  		                        "start_size": 0
    59  	                        }
    60                          }`)
    61  		}
    62  
    63  	})
    64  
    65  	wantStatus := Status{
    66  		Status:    "pong",
    67  		Upstreams: map[string]string{"chef_elasticsearch": "pong", "chef_index": "pong", "chef_sql": "pong", "data_collector": "pong", "oc_chef_authz": "pong"},
    68  		Keygen:    map[string]int{"avail_workers": 2, "cur_max_workers": 2, "inflight": 0, "keys": 10, "max": 10, "max_workers": 2, "start_size": 0},
    69  	}
    70  
    71  	status, err := client.Status.Get()
    72  	if err != nil {
    73  		t.Errorf("Status.Get returned error: %s", err.Error())
    74  	}
    75  
    76  	if !reflect.DeepEqual(status, wantStatus) {
    77  		t.Errorf("Status.Get returned %+v, want %+v, error %+v", status, wantStatus, err)
    78  	}
    79  
    80  }