| package handler |
| |
| import ( |
| "encoding/json" |
| "io/ioutil" |
| "net/http" |
| "net/http/httptest" |
| "reflect" |
| "testing" |
| |
| "github.com/go-openapi/spec" |
| ) |
| |
| var returnedSwagger = []byte(`{ |
| "swagger": "2.0", |
| "info": { |
| "title": "Kubernetes", |
| "version": "v1.11.0" |
| }}`) |
| |
| func TestRegisterOpenAPIVersionedService(t *testing.T) { |
| var s spec.Swagger |
| err := s.UnmarshalJSON(returnedSwagger) |
| if err != nil { |
| t.Errorf("Unexpected error in unmarshalling SwaggerJSON: %v", err) |
| } |
| |
| returnedJSON, err := json.MarshalIndent(s, " ", " ") |
| if err != nil { |
| t.Errorf("Unexpected error in preparing returnedJSON: %v", err) |
| } |
| returnedPb, err := toProtoBinary(returnedJSON) |
| if err != nil { |
| t.Errorf("Unexpected error in preparing returnedPb: %v", err) |
| } |
| |
| mux := http.NewServeMux() |
| _, err = RegisterOpenAPIVersionedService(&s, "/openapi/v2", mux) |
| if err != nil { |
| t.Errorf("Unexpected error in register OpenAPI versioned service: %v", err) |
| } |
| server := httptest.NewServer(mux) |
| defer server.Close() |
| client := server.Client() |
| |
| tcs := []struct { |
| acceptHeader string |
| respStatus int |
| respBody []byte |
| }{ |
| {"", 200, returnedJSON}, |
| {"*/*", 200, returnedJSON}, |
| {"application/*", 200, returnedJSON}, |
| {"application/json", 200, returnedJSON}, |
| {"test/test", 406, []byte{}}, |
| {"application/test", 406, []byte{}}, |
| {"application/test, */*", 200, returnedJSON}, |
| {"application/test, application/json", 200, returnedJSON}, |
| {"application/com.github.proto-openapi.spec.v2@v1.0+protobuf", 200, returnedPb}, |
| {"application/json, application/com.github.proto-openapi.spec.v2@v1.0+protobuf", 200, returnedJSON}, |
| {"application/com.github.proto-openapi.spec.v2@v1.0+protobuf, application/json", 200, returnedPb}, |
| {"application/com.github.proto-openapi.spec.v2@v1.0+protobuf; q=0.5, application/json", 200, returnedJSON}, |
| } |
| |
| for _, tc := range tcs { |
| req, err := http.NewRequest("GET", server.URL+"/openapi/v2", nil) |
| if err != nil { |
| t.Errorf("Accept: %v: Unexpected error in creating new request: %v", tc.acceptHeader, err) |
| } |
| |
| req.Header.Add("Accept", tc.acceptHeader) |
| resp, err := client.Do(req) |
| if err != nil { |
| t.Errorf("Accept: %v: Unexpected error in serving HTTP request: %v", tc.acceptHeader, err) |
| } |
| |
| if resp.StatusCode != tc.respStatus { |
| t.Errorf("Accept: %v: Unexpected response status code, want: %v, got: %v", tc.acceptHeader, tc.respStatus, resp.StatusCode) |
| } |
| defer resp.Body.Close() |
| body, err := ioutil.ReadAll(resp.Body) |
| if err != nil { |
| t.Errorf("Accept: %v: Unexpected error in reading response body: %v", tc.acceptHeader, err) |
| } |
| if !reflect.DeepEqual(body, tc.respBody) { |
| t.Errorf("Accept: %v: Response body mismatches, want: %v, got: %v", tc.acceptHeader, tc.respBody, body) |
| } |
| } |
| } |