pkg.re/essentialkaos/ek.10@v12.41.0+incompatible/usage/update/update_test.go (about) 1 package update 2 3 // ////////////////////////////////////////////////////////////////////////////////// // 4 // // 5 // Copyright (c) 2022 ESSENTIAL KAOS // 6 // Apache License, Version 2.0 <https://www.apache.org/licenses/LICENSE-2.0> // 7 // // 8 // ////////////////////////////////////////////////////////////////////////////////// // 9 10 import ( 11 "net" 12 "net/http" 13 "testing" 14 "time" 15 16 . "pkg.re/essentialkaos/check.v1" 17 ) 18 19 // ////////////////////////////////////////////////////////////////////////////////// // 20 21 type UpdateSuite struct { 22 url string 23 port string 24 listener net.Listener 25 } 26 27 // ////////////////////////////////////////////////////////////////////////////////// // 28 29 func Test(t *testing.T) { TestingT(t) } 30 31 // ////////////////////////////////////////////////////////////////////////////////// // 32 33 var _ = Suite(&UpdateSuite{}) 34 35 // ////////////////////////////////////////////////////////////////////////////////// // 36 37 func (s *UpdateSuite) SetUpSuite(c *C) { 38 s.port = "30002" 39 s.url = "http://127.0.0.1:" + s.port 40 41 go runHTTPServer(s, c) 42 43 time.Sleep(time.Second) 44 } 45 46 func (s *UpdateSuite) TearDownSuite(c *C) { 47 if s.listener != nil { 48 s.listener.Close() 49 } 50 } 51 52 func (s *UpdateSuite) TestGitHubChecker(c *C) { 53 githubAPI = s.url 54 55 newVersion, releaseDate, hasUpdate := GitHubChecker("", "", "") 56 57 c.Assert(newVersion, Equals, "") 58 c.Assert(hasUpdate, Equals, false) 59 60 newVersion, releaseDate, hasUpdate = GitHubChecker("GitHubChecker", "0.9.9", "") 61 62 c.Assert(newVersion, Equals, "") 63 c.Assert(hasUpdate, Equals, false) 64 65 newVersion, releaseDate, hasUpdate = GitHubChecker("GitHubChecker", "0.9.9", "essentialkaos/unknown") 66 67 c.Assert(newVersion, Equals, "") 68 c.Assert(hasUpdate, Equals, false) 69 70 newVersion, releaseDate, hasUpdate = GitHubChecker("GitHubChecker", "0.9.9", "essentialkaos/limited") 71 72 c.Assert(newVersion, Equals, "") 73 c.Assert(hasUpdate, Equals, false) 74 75 newVersion, releaseDate, hasUpdate = GitHubChecker("GitHubChecker", "0.9.9", "essentialkaos/garbage") 76 77 c.Assert(newVersion, Equals, "") 78 c.Assert(hasUpdate, Equals, false) 79 80 newVersion, releaseDate, hasUpdate = GitHubChecker("GitHubChecker", "0.9.9", "essentialkaos/project") 81 82 c.Assert(newVersion, Equals, "1.2.3") 83 c.Assert(releaseDate.Unix(), Equals, int64(1589810841)) 84 c.Assert(hasUpdate, Equals, true) 85 } 86 87 func (s *UpdateSuite) TestUpdateChecker(c *C) { 88 newVersion, releaseDate, hasUpdate := UpdateChecker("", "", "") 89 90 c.Assert(newVersion, Equals, "") 91 c.Assert(hasUpdate, Equals, false) 92 93 newVersion, releaseDate, hasUpdate = UpdateChecker("GitHubChecker", "0.9.9", s.url+"/unknown") 94 95 c.Assert(newVersion, Equals, "") 96 c.Assert(hasUpdate, Equals, false) 97 98 newVersion, releaseDate, hasUpdate = UpdateChecker("GitHubChecker", "0.9.9", s.url+"/garbage") 99 100 c.Assert(newVersion, Equals, "") 101 c.Assert(hasUpdate, Equals, false) 102 103 newVersion, releaseDate, hasUpdate = UpdateChecker("GitHubChecker", "0.9.9", s.url+"/project") 104 105 c.Assert(newVersion, Equals, "1.2.3") 106 c.Assert(releaseDate.Unix(), Equals, int64(1578064700)) 107 c.Assert(hasUpdate, Equals, true) 108 } 109 110 // ////////////////////////////////////////////////////////////////////////////////// // 111 112 func runHTTPServer(s *UpdateSuite, c *C) { 113 server := &http.Server{ 114 Handler: http.NewServeMux(), 115 ReadTimeout: 10 * time.Second, 116 WriteTimeout: 10 * time.Second, 117 MaxHeaderBytes: 1 << 20, 118 } 119 120 listener, err := net.Listen("tcp", ":"+s.port) 121 122 if err != nil { 123 c.Fatal(err.Error()) 124 } 125 126 s.listener = listener 127 128 server.Handler.(*http.ServeMux).HandleFunc("/repos/essentialkaos/project/releases/latest", ghInfoHandler) 129 server.Handler.(*http.ServeMux).HandleFunc("/repos/essentialkaos/unknown/releases/latest", ghNotFoundHandler) 130 server.Handler.(*http.ServeMux).HandleFunc("/repos/essentialkaos/limited/releases/latest", ghLimitedHandler) 131 server.Handler.(*http.ServeMux).HandleFunc("/repos/essentialkaos/garbage/releases/latest", ghWrongFormatHandler) 132 133 server.Handler.(*http.ServeMux).HandleFunc("/project/latest.json", updInfoHandler) 134 server.Handler.(*http.ServeMux).HandleFunc("/unknown/latest.json", updUnknownHandler) 135 server.Handler.(*http.ServeMux).HandleFunc("/garbage/latest.json", updWrongFormatHandler) 136 137 err = server.Serve(listener) 138 139 if err != nil { 140 c.Fatal(err.Error()) 141 } 142 } 143 144 func ghInfoHandler(w http.ResponseWriter, r *http.Request) { 145 w.Header().Add("X-RateLimit-Remaining", "1000") 146 w.WriteHeader(200) 147 w.Write([]byte(`{"tag_name": "v1.2.3","published_at": "2020-05-18T14:07:21Z"}`)) 148 } 149 150 func ghNotFoundHandler(w http.ResponseWriter, r *http.Request) { 151 w.WriteHeader(404) 152 } 153 154 func ghLimitedHandler(w http.ResponseWriter, r *http.Request) { 155 w.Header().Add("X-RateLimit-Remaining", "0") 156 w.WriteHeader(200) 157 w.Write([]byte(`{"tag_name": "v1.2.3","published_at": "2020-05-18T14:07:21Z"}`)) 158 } 159 160 func ghWrongFormatHandler(w http.ResponseWriter, r *http.Request) { 161 w.WriteHeader(200) 162 w.Write([]byte(`DEADBEEF`)) 163 } 164 165 func updInfoHandler(w http.ResponseWriter, r *http.Request) { 166 w.WriteHeader(200) 167 w.Write([]byte(`{"version": "1.2.3", "date": "2020-01-03T15:18:20Z"}`)) 168 } 169 170 func updUnknownHandler(w http.ResponseWriter, r *http.Request) { 171 w.WriteHeader(404) 172 } 173 174 func updWrongFormatHandler(w http.ResponseWriter, r *http.Request) { 175 w.WriteHeader(200) 176 w.Write([]byte(`DEADBEEF`)) 177 }