github.com/snyk/vervet/v3@v3.7.0/versionware/handler_test.go (about) 1 package versionware_test 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 qt "github.com/frankban/quicktest" 11 12 "github.com/snyk/vervet/v3" 13 "github.com/snyk/vervet/v3/versionware" 14 ) 15 16 func ExampleHandler() { 17 h := versionware.NewHandler([]versionware.VersionHandler{{ 18 Version: vervet.MustParseVersion("2021-10-01"), 19 Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 20 if _, err := w.Write([]byte("oct")); err != nil { 21 panic(err) 22 } 23 }), 24 }, { 25 Version: vervet.MustParseVersion("2021-11-01"), 26 Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 27 if _, err := w.Write([]byte("nov")); err != nil { 28 panic(err) 29 } 30 }), 31 }, { 32 Version: vervet.MustParseVersion("2021-09-01"), 33 Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 34 if _, err := w.Write([]byte("sept")); err != nil { 35 panic(err) 36 } 37 }), 38 }}...) 39 40 s := httptest.NewServer(h) 41 defer s.Close() 42 43 resp, err := s.Client().Get(s.URL + "?version=2021-10-31") 44 if err != nil { 45 panic(err) 46 } 47 defer resp.Body.Close() 48 respBody, err := ioutil.ReadAll(resp.Body) 49 if err != nil { 50 panic(err) 51 } 52 53 fmt.Print(string(respBody)) 54 // Output: oct 55 } 56 57 func TestHandler(t *testing.T) { 58 c := qt.New(t) 59 h := versionware.NewHandler([]versionware.VersionHandler{{ 60 Version: vervet.MustParseVersion("2021-10-01"), 61 Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 62 _, err := w.Write([]byte("oct")) 63 c.Assert(err, qt.IsNil) 64 }), 65 }, { 66 Version: vervet.MustParseVersion("2021-11-01"), 67 Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 68 _, err := w.Write([]byte("nov")) 69 c.Assert(err, qt.IsNil) 70 }), 71 }, { 72 Version: vervet.MustParseVersion("2021-09-01"), 73 Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 74 _, err := w.Write([]byte("sept")) 75 c.Assert(err, qt.IsNil) 76 }), 77 }}...) 78 tests := []struct { 79 requested, resolved string 80 contents string 81 status int 82 }{{ 83 "2021-08-31", "", "Not Found\n", 404, 84 }, { 85 "", "", "Bad Request\n", 400, 86 }, { 87 "bad wolf", "", "400 Bad Request", 400, 88 }, { 89 "2021-09-16", "2021-09-01", "sept", 200, 90 }, { 91 "2021-10-01", "2021-10-01", "oct", 200, 92 }, { 93 "2021-10-31", "2021-10-01", "oct", 200, 94 }, { 95 "2021-11-05", "2021-11-01", "nov", 200, 96 }, { 97 "2023-02-05", "2021-11-01", "nov", 200, 98 }} 99 for i, test := range tests { 100 c.Run(fmt.Sprintf("%d requested %s resolved %s", i, test.requested, test.resolved), func(c *qt.C) { 101 s := httptest.NewServer(h) 102 c.Cleanup(s.Close) 103 req, err := http.NewRequest("GET", s.URL+"?version="+test.requested, nil) 104 c.Assert(err, qt.IsNil) 105 resp, err := s.Client().Do(req) 106 c.Assert(err, qt.IsNil) 107 defer resp.Body.Close() 108 c.Assert(resp.StatusCode, qt.Equals, test.status) 109 contents, err := ioutil.ReadAll(resp.Body) 110 c.Assert(err, qt.IsNil) 111 c.Assert(string(contents), qt.Equals, test.contents) 112 }) 113 } 114 }