mirror of
https://github.com/portainer/portainer.git
synced 2025-07-19 05:19:39 +02:00
89 lines
2.8 KiB
Go
89 lines
2.8 KiB
Go
package registries
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
portainer "github.com/portainer/portainer/api"
|
|
"github.com/portainer/portainer/api/datastore"
|
|
"github.com/portainer/portainer/api/http/security"
|
|
"github.com/portainer/portainer/api/internal/testhelpers"
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_RegistryAccess_RequiresAuthentication(t *testing.T) {
|
|
_, store := datastore.MustNewTestStore(t, true, true)
|
|
registry := &portainer.Registry{
|
|
ID: 1,
|
|
Name: "test-registry",
|
|
URL: "https://registry.test.com",
|
|
}
|
|
err := store.Registry().Create(registry)
|
|
assert.NoError(t, err)
|
|
handler := &Handler{
|
|
DataStore: store,
|
|
}
|
|
req := httptest.NewRequest(http.MethodGet, "/registries/1", nil)
|
|
req = mux.SetURLVars(req, map[string]string{"id": "1"})
|
|
rr := httptest.NewRecorder()
|
|
testHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
})
|
|
bouncer := handler.RegistryAccess(testHandler)
|
|
bouncer.ServeHTTP(rr, req)
|
|
assert.Equal(t, http.StatusUnauthorized, rr.Code)
|
|
}
|
|
|
|
func Test_RegistryAccess_InvalidRegistryID(t *testing.T) {
|
|
_, store := datastore.MustNewTestStore(t, true, true)
|
|
user := &portainer.User{ID: 1, Username: "test", Role: portainer.StandardUserRole}
|
|
err := store.User().Create(user)
|
|
assert.NoError(t, err)
|
|
|
|
handler := &Handler{
|
|
DataStore: store,
|
|
}
|
|
req := httptest.NewRequest(http.MethodGet, "/registries/invalid", nil)
|
|
req = mux.SetURLVars(req, map[string]string{"id": "invalid"})
|
|
tokenData := &portainer.TokenData{ID: 1, Role: portainer.StandardUserRole}
|
|
req = req.WithContext(security.StoreTokenData(req, tokenData))
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
testHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
})
|
|
|
|
bouncer := handler.RegistryAccess(testHandler)
|
|
bouncer.ServeHTTP(rr, req)
|
|
assert.Equal(t, http.StatusBadRequest, rr.Code)
|
|
}
|
|
|
|
func Test_RegistryAccess_RegistryNotFound(t *testing.T) {
|
|
_, store := datastore.MustNewTestStore(t, true, true)
|
|
user := &portainer.User{ID: 1, Username: "test", Role: portainer.StandardUserRole}
|
|
err := store.User().Create(user)
|
|
assert.NoError(t, err)
|
|
|
|
handler := &Handler{
|
|
DataStore: store,
|
|
requestBouncer: testhelpers.NewTestRequestBouncer(),
|
|
}
|
|
req := httptest.NewRequest(http.MethodGet, "/registries/999", nil)
|
|
req = mux.SetURLVars(req, map[string]string{"id": "999"})
|
|
tokenData := &portainer.TokenData{ID: 1, Role: portainer.StandardUserRole}
|
|
req = req.WithContext(security.StoreTokenData(req, tokenData))
|
|
|
|
rr := httptest.NewRecorder()
|
|
|
|
testHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
})
|
|
|
|
bouncer := handler.RegistryAccess(testHandler)
|
|
bouncer.ServeHTTP(rr, req)
|
|
assert.Equal(t, http.StatusNotFound, rr.Code)
|
|
}
|