go.fuchsia.dev/jiri@v0.0.0-20240502161911-b66513b29486/update_test.go (about) 1 // Copyright 2016 The Fuchsia Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package jiri 6 7 import ( 8 "bytes" 9 "io" 10 "net/http" 11 "net/http/httptest" 12 "os" 13 "testing" 14 ) 15 16 func TestGetCurrentCommit(t *testing.T) { 17 t.Parallel() 18 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 19 w.Header().Set("Content-Type", "application/json") 20 io.WriteString(w, `)]}' 21 { 22 "refs/heads/main": { 23 "value": "68661f351339107f397749c9689334fe9893bcea" 24 } 25 }`) 26 })) 27 defer ts.Close() 28 29 c, err := getCurrentCommit(ts.URL) 30 if err != nil { 31 t.Fatal(err) 32 } 33 if want, got := "68661f351339107f397749c9689334fe9893bcea", c; want != got { 34 t.Errorf("wrong commit, want: %s, got: %s\n", want, got) 35 } 36 } 37 38 func TestHasPrebuilt(t *testing.T) { 39 t.Parallel() 40 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 41 w.WriteHeader(http.StatusOK) 42 })) 43 defer ts.Close() 44 45 _, err := downloadBinary(ts.URL, "abc123") 46 if err != nil { 47 t.Fatal(err) 48 } 49 } 50 51 func TestDoesNotHavePrebuilt(t *testing.T) { 52 t.Parallel() 53 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 54 w.WriteHeader(http.StatusNotFound) 55 })) 56 defer ts.Close() 57 58 _, err := downloadBinary(ts.URL, "abc123") 59 if err != updateNotAvailableErr { 60 t.Fatal(err) 61 } 62 } 63 64 func TestDownloadBinary(t *testing.T) { 65 t.Parallel() 66 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 67 w.Header().Set("Content-Type", "application/octet-stream") 68 b := bytes.NewBuffer([]byte("jiri")) 69 b.WriteTo(w) 70 })) 71 defer ts.Close() 72 73 b, err := downloadBinary(ts.URL, "abc123") 74 if err != nil { 75 t.Fatal(err) 76 } 77 if want, got := []byte("jiri"), b; bytes.Compare(want, got) != 0 { 78 t.Errorf("wrong file content, want: %s, got: %s\n", want, got) 79 } 80 } 81 82 func TestUpdateExecutable(t *testing.T) { 83 t.Parallel() 84 content := []byte("old") 85 86 f, err := os.CreateTemp("", "jiri") 87 if err != nil { 88 t.Fatal(err) 89 } 90 defer os.RemoveAll(f.Name()) 91 92 if _, err := f.Write(content); err != nil { 93 t.Fatal(err) 94 } 95 if err := f.Close(); err != nil { 96 t.Fatal(err) 97 } 98 99 if err := updateExecutable(f.Name(), []byte("new")); err != nil { 100 t.Fatal(err) 101 } 102 103 b, err := os.ReadFile(f.Name()) 104 if err != nil { 105 t.Fatal(err) 106 } 107 108 if want, got := []byte("new"), b; bytes.Compare(want, got) != 0 { 109 t.Errorf("wrong file content, want: %s, got: %s\n", want, got) 110 } 111 }