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  }