gopass/internal/cache/ghssh/github_test.go
Dominik Schulz 7281ca8ab4
[chore] Migrate to golangci-lint v2 (#3104)
* [chore] Migrate to golangci-lint v2

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

* [chore] Fix more lint issues

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

* [chore] Fix more lint issue

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

* [chore] Fix more lint issues

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

* [chore] Add more package comments.

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

* [chore] Fix golangci-lint config and the remaining checks

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

* [fix] Use Go 1.24

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

* [fix] Fix container builds

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

* Fix more failing tests

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

* Fix test failure

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

* Fix another len assertion

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

* Move location tests

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

* [fix] Fix most remaining lint issues

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

* [fix] Only run XDG specific tests on linux

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

* [fix] Attempt to address on source of flaky failures

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

---------

Signed-off-by: Dominik Schulz <dominik.schulz@gauner.org>
2025-04-17 08:05:43 +02:00

89 lines
2.1 KiB
Go

package ghssh
import (
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestListKeys(t *testing.T) {
// Set GOPASS_HOMEDIR to a temp directory
tempDir := t.TempDir()
t.Setenv("GOPASS_HOMEDIR", tempDir)
// Mock HTTP server
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/validuser.keys" {
w.WriteHeader(http.StatusOK)
w.Write([]byte("ssh-rsa AAAAB3Nza... validuser@github\n")) //nolint:errcheck
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
defer mockServer.Close()
oURL := baseURL
baseURL = mockServer.URL
defer func() {
baseURL = oURL
}()
cache, err := New()
require.NoError(t, err)
t.Run("valid user", func(t *testing.T) {
keys, err := cache.ListKeys(t.Context(), "validuser")
require.NoError(t, err)
assert.Len(t, keys, 1)
assert.Equal(t, "ssh-rsa AAAAB3Nza... validuser@github", keys[0])
})
t.Run("invalid user", func(t *testing.T) {
keys, err := cache.ListKeys(t.Context(), "invaliduser")
require.Error(t, err)
assert.Nil(t, keys)
})
}
func TestFetchKeys(t *testing.T) {
// Set GOPASS_HOMEDIR to a temp directory
tempDir := t.TempDir()
t.Setenv("GOPASS_HOMEDIR", tempDir)
// Mock HTTP server
mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/validuser.keys" {
w.WriteHeader(http.StatusOK)
w.Write([]byte("ssh-rsa AAAAB3Nza... validuser@github\n")) //nolint:errcheck
} else {
w.WriteHeader(http.StatusNotFound)
}
}))
defer mockServer.Close()
oURL := baseURL
baseURL = mockServer.URL
defer func() {
baseURL = oURL
}()
cache, err := New()
require.NoError(t, err)
t.Run("valid user", func(t *testing.T) {
keys, err := cache.fetchKeys(t.Context(), "validuser")
require.NoError(t, err)
assert.Len(t, keys, 1)
assert.Equal(t, "ssh-rsa AAAAB3Nza... validuser@github", keys[0])
})
t.Run("invalid user", func(t *testing.T) {
keys, err := cache.fetchKeys(t.Context(), "invaliduser")
require.Error(t, err)
assert.Nil(t, keys)
})
}