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  }