gopass/internal/action/update_test.go
Dominik Schulz 263b78119b
[bugfix] Fix writes to global config from tests (#2727)
* [bugfix] Fix writes to global config from tests

Fixes #2725

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* Shorten readonly config creation.

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

* Address review comments

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2023-12-01 14:04:17 +01:00

114 lines
2.6 KiB
Go

package action
import (
"archive/tar"
"bytes"
"compress/gzip"
"fmt"
"net/http"
"net/http/httptest"
"os"
"runtime"
"testing"
_ "github.com/gopasspw/gopass/internal/backend/crypto"
_ "github.com/gopasspw/gopass/internal/backend/storage"
"github.com/gopasspw/gopass/internal/config"
"github.com/gopasspw/gopass/internal/out"
"github.com/gopasspw/gopass/internal/updater"
"github.com/gopasspw/gopass/pkg/ctxutil"
"github.com/gopasspw/gopass/tests/gptest"
"github.com/stretchr/testify/require"
)
const testUpdateJSON = `{
"id": 8979833,
"name": "1.6.6 / 2017-12-20",
"tag_name": "v1.6.6",
"draft": false,
"prerelease": false,
"published_at": "2017-12-20T14:38:21Z",
"assets": [
{
"browser_download_url": "%s/gopass.tar.gz",
"id": 5676623,
"name": "gopass-1.6.6-%s-%s.tar.gz"
},
{
"browser_download_url": "%s/SHA256SUMS",
"id": 5676624,
"name": "gopass-1.6.6_SHA256SUMS"
},
{
"browser_download_url": "%s/SHA256SUMS.sig",
"id": 5676625,
"name": "gopass-1.6.6_SHA256SUMS.sig"
}
]
}`
func TestUpdate(t *testing.T) {
updater.UpdateMoveAfterQuit = false
u := gptest.NewUnitTester(t)
ctx := config.NewContextInMemory()
ctx = ctxutil.WithAlwaysYes(ctx, true)
ctx = ctxutil.WithHidden(ctx, true)
act, err := newMock(ctx, u.StoreDir(""))
require.NoError(t, err)
// github release download mock
ghdl := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
gzw := gzip.NewWriter(w)
defer func() {
_ = gzw.Close()
}()
tw := tar.NewWriter(gzw)
defer func() {
_ = tw.Close()
}()
body := "foobar"
hdr := &tar.Header{
Typeflag: tar.TypeReg,
Name: "gopass",
Mode: 0o600,
Size: int64(len(body)),
}
if err := tw.WriteHeader(hdr); err != nil {
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
if _, err := tw.Write([]byte(body)); err != nil {
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
}))
defer ghdl.Close()
// github api mock
ghapi := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
json := fmt.Sprintf(testUpdateJSON, ghdl.URL, runtime.GOOS, runtime.GOARCH, ghdl.URL, ghdl.URL)
fmt.Fprint(w, json)
}))
defer ghapi.Close()
updater.BaseURL = ghapi.URL + "/%s/%s"
buf := &bytes.Buffer{}
out.Stdout = buf
stdout = buf
defer func() {
out.Stdout = os.Stdout
stdout = os.Stdout
}()
// This should not fail, but then we need to provide valid signatures
require.Error(t, act.Update(gptest.CliCtx(ctx, t)))
buf.Reset()
}