internal/access/release_test.go
Rama main · réplica de lectura del repositorio original.
package access
import (
"strings"
"testing"
authv1 "k8s.io/api/authorization/v1"
"github.com/sophotechlabs/spinoza/internal/helm"
)
func askedAbout(auth *authorizer, verb, resource string) (authv1.ResourceAttributes, bool) {
for _, one := range auth.questions() {
if one.Verb != verb {
continue
}
if one.Resource != resource {
continue
}
return one, true
}
return authv1.ResourceAttributes{}, false
}
func TestAReleaseNothingIsRefusedForHoldsNothingBack(t *testing.T) {
service := serviceFor(t, refusing(nil))
result := service.ReviewRelease(t.Context(), "prod", helm.DriverSecret)
if len(result.Refused) != 0 {
t.Fatalf("refused = %v, want nothing held back", result.Refused)
}
}
func TestInstallingNeedsToCreateTheReleaseObject(t *testing.T) {
service := serviceFor(t, refusingVerb("create", "secrets", "no creating secrets"))
got := reasons(service.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if got[Install] != "no creating secrets" {
t.Fatalf("install reason = %q, want the refused create", got[Install])
}
}
func TestInstallingIsNotRefusedOverAnUpdate(t *testing.T) {
service := serviceFor(t, refusingVerb("update", "secrets", "no updating secrets"))
got := reasons(service.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if _, refused := got[Install]; refused {
t.Fatalf("install was withheld over an update it does not make: %v", got)
}
}
func TestInstallingIsNotRefusedOverADelete(t *testing.T) {
service := serviceFor(t, refusingVerb("delete", "secrets", "no deleting secrets"))
got := reasons(service.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if _, refused := got[Install]; refused {
t.Fatalf("install was withheld over a delete it does not make: %v", got)
}
}
func TestUpgradingNeedsBothTheCreateAndTheUpdate(t *testing.T) {
create := serviceFor(t, refusingVerb("create", "secrets", "no creating secrets"))
update := serviceFor(t, refusingVerb("update", "secrets", "no updating secrets"))
fromCreate := reasons(create.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
fromUpdate := reasons(update.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if fromCreate[Upgrade] != "no creating secrets" {
t.Fatalf("upgrade reason = %q, want the refused create", fromCreate[Upgrade])
}
if fromUpdate[Upgrade] != "no updating secrets" {
t.Fatalf("upgrade reason = %q, want the refused update", fromUpdate[Upgrade])
}
}
func TestRollingBackNeedsBothTheCreateAndTheUpdate(t *testing.T) {
create := serviceFor(t, refusingVerb("create", "secrets", "no creating secrets"))
update := serviceFor(t, refusingVerb("update", "secrets", "no updating secrets"))
fromCreate := reasons(create.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
fromUpdate := reasons(update.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if fromCreate[Rollback] != "no creating secrets" {
t.Fatalf("rollback reason = %q, want the refused create", fromCreate[Rollback])
}
if fromUpdate[Rollback] != "no updating secrets" {
t.Fatalf("rollback reason = %q, want the refused update", fromUpdate[Rollback])
}
}
func TestAnUpgradeIsRefusedByTheFirstVerbItNeeds(t *testing.T) {
both := refusing(map[string]string{})
both.refuse["create secrets "] = "no creating secrets"
both.refuse["update secrets "] = "no updating secrets"
service := serviceFor(t, both)
got := reasons(service.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if got[Upgrade] != "no creating secrets" {
t.Fatalf("upgrade reason = %q, want the first requirement that failed", got[Upgrade])
}
}
func TestUninstallingNeedsToDeleteTheReleaseObject(t *testing.T) {
service := serviceFor(t, refusingVerb("delete", "secrets", "no deleting secrets"))
got := reasons(service.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if got[Uninstall] != "no deleting secrets" {
t.Fatalf("uninstall reason = %q, want the refused delete", got[Uninstall])
}
for _, name := range []string{Install, Upgrade, Rollback} {
if _, refused := got[name]; refused {
t.Fatalf("%s was withheld over a delete it does not make: %v", name, got)
}
}
}
func TestUninstallingIsNotRefusedOverACreate(t *testing.T) {
service := serviceFor(t, refusingVerb("create", "secrets", "no creating secrets"))
got := reasons(service.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if _, refused := got[Uninstall]; refused {
t.Fatalf("uninstall was withheld over a create it does not make: %v", got)
}
}
func TestAReleaseKeptInConfigMapsIsAskedAboutConfigMaps(t *testing.T) {
auth := refusing(map[string]string{"create configmaps ": "no creating configmaps"})
service := serviceFor(t, auth)
got := reasons(service.ReviewRelease(t.Context(), "prod", helm.DriverConfigMap))
if got[Install] != "no creating configmaps" {
t.Fatalf("install reason = %q, want the refused configmap create", got[Install])
}
if _, asked := askedAbout(auth, "create", "secrets"); asked {
t.Fatal("a configmap release was asked about secrets")
}
}
func TestAnUnknownDriverIsAskedAboutAsASecret(t *testing.T) {
auth := refusing(nil)
service := serviceFor(t, auth)
service.ReviewRelease(t.Context(), "prod", "sql")
if _, asked := askedAbout(auth, "create", "secrets"); !asked {
t.Fatalf("asked %v, want the questions helm's own default would need", auth.questions())
}
}
func TestAReleaseIsAskedAboutByNamespaceAlone(t *testing.T) {
auth := refusing(nil)
service := serviceFor(t, auth)
service.ReviewRelease(t.Context(), "prod", helm.DriverSecret)
for _, one := range auth.questions() {
if one.Namespace != "prod" {
t.Fatalf("asked in %q, want the release's namespace", one.Namespace)
}
if one.Name != "" {
t.Fatalf("asked about %q, want the kind in that namespace", one.Name)
}
}
}
func TestAReleaseIsThreeQuestions(t *testing.T) {
auth := refusing(nil)
service := serviceFor(t, auth)
service.ReviewRelease(t.Context(), "prod", helm.DriverSecret)
if auth.count() != 3 {
t.Fatalf("asked %d questions: %v", auth.count(), auth.questions())
}
}
func TestAnApiserverThatWillNotAnswerKeepsEveryHelmButtonUnavailable(t *testing.T) {
service := serviceFor(t, &authorizer{broken: true})
result := service.ReviewRelease(t.Context(), "prod", helm.DriverSecret)
if len(result.Refused) != 4 {
t.Fatalf("refused = %v, want every Helm action kept unavailable", result.Refused)
}
}
func TestAHelmRefusalWithoutAReasonStillSaysWhat(t *testing.T) {
service := serviceFor(t, refusingVerb("delete", "secrets", ""))
got := reasons(service.ReviewRelease(t.Context(), "prod", helm.DriverSecret))
if !strings.Contains(got[Uninstall], "you may not delete secrets") {
t.Fatalf("uninstall reason = %q, want a sentence when the cluster gave none", got[Uninstall])
}
}