mirror of
https://github.com/storytold/irsa-manager.git
synced 2026-10-09 00:09:43 +00:00
mockgen
This commit is contained in:
@@ -60,6 +60,8 @@ ENVTEST_K8S_VERSION = 1.28.3
|
|||||||
# CRD_REF_DOCS_VERSION
|
# CRD_REF_DOCS_VERSION
|
||||||
CRD_REF_DOCS_VERSION = v0.0.12
|
CRD_REF_DOCS_VERSION = v0.0.12
|
||||||
|
|
||||||
|
GOLANGCI_LINT_VERSION ?= v1.57.2
|
||||||
|
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
all: build
|
all: build
|
||||||
@@ -70,6 +72,10 @@ all: build
|
|||||||
helm: manifests kustomize helmify
|
helm: manifests kustomize helmify
|
||||||
$(KUSTOMIZE) build config/release | $(HELMIFY) -crd-dir charts/irsa-manager
|
$(KUSTOMIZE) build config/release | $(HELMIFY) -crd-dir charts/irsa-manager
|
||||||
|
|
||||||
|
.PHONY: mock
|
||||||
|
mock: mockgen
|
||||||
|
mockgen -source internal/selfhosted/oidc.go -destination internal/mock/oidc_mock.go -package mock
|
||||||
|
|
||||||
|
|
||||||
.PHONY: manifests
|
.PHONY: manifests
|
||||||
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
|
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
|
||||||
@@ -89,15 +95,9 @@ vet: ## Run go vet against code.
|
|||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: manifests generate fmt vet envtest ## Run tests.
|
test: manifests generate fmt vet envtest ## Run tests.
|
||||||
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test $$(go list ./... | grep -v /e2e) -coverprofile cover.out
|
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test -coverprofile cover.out
|
||||||
|
|
||||||
# Utilize Kind or modify the e2e tests to load the image locally, enabling compatibility with other vendors.
|
|
||||||
.PHONY: test-e2e # Run the e2e tests against a Kind k8s instance that is spun up.
|
|
||||||
test-e2e:
|
|
||||||
go test ./test/e2e/ -v -ginkgo.v
|
|
||||||
|
|
||||||
GOLANGCI_LINT = $(shell pwd)/bin/golangci-lint
|
GOLANGCI_LINT = $(shell pwd)/bin/golangci-lint
|
||||||
GOLANGCI_LINT_VERSION ?= v1.54.2
|
|
||||||
golangci-lint:
|
golangci-lint:
|
||||||
@[ -f $(GOLANGCI_LINT) ] || { \
|
@[ -f $(GOLANGCI_LINT) ] || { \
|
||||||
set -e ;\
|
set -e ;\
|
||||||
@@ -184,6 +184,11 @@ envtest: $(ENVTEST) ## Download envtest-setup locally if necessary.
|
|||||||
$(ENVTEST): $(LOCALBIN)
|
$(ENVTEST): $(LOCALBIN)
|
||||||
test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
|
test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
|
||||||
|
|
||||||
|
.PHONY: mockgen
|
||||||
|
mockgen: $(MOCKGEN) ## Download envtest-setup locally if necessary.
|
||||||
|
$(MOCKGEN): $(LOCALBIN)
|
||||||
|
test -s $(LOCALBIN)/mockgen || GOBIN=$(LOCALBIN) go install go.uber.org/mock/mockgen@latest
|
||||||
|
|
||||||
.PHONY: helmify
|
.PHONY: helmify
|
||||||
helmify: $(HELMIFY) ## Download helmify locally if necessary.
|
helmify: $(HELMIFY) ## Download helmify locally if necessary.
|
||||||
$(HELMIFY): $(LOCALBIN)
|
$(HELMIFY): $(LOCALBIN)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ require (
|
|||||||
github.com/onsi/ginkgo/v2 v2.17.1
|
github.com/onsi/ginkgo/v2 v2.17.1
|
||||||
github.com/onsi/gomega v1.30.0
|
github.com/onsi/gomega v1.30.0
|
||||||
github.com/stretchr/testify v1.9.0
|
github.com/stretchr/testify v1.9.0
|
||||||
|
go.uber.org/mock v0.4.0
|
||||||
k8s.io/apimachinery v0.29.3
|
k8s.io/apimachinery v0.29.3
|
||||||
k8s.io/client-go v0.29.3
|
k8s.io/client-go v0.29.3
|
||||||
sigs.k8s.io/controller-runtime v0.17.2
|
sigs.k8s.io/controller-runtime v0.17.2
|
||||||
|
|||||||
@@ -137,6 +137,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec
|
|||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||||
|
go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
|
||||||
|
go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
|
||||||
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||||
|
|||||||
@@ -0,0 +1,334 @@
|
|||||||
|
// Code generated by MockGen. DO NOT EDIT.
|
||||||
|
// Source: internal/selfhosted/oidc.go
|
||||||
|
//
|
||||||
|
// Generated by this command:
|
||||||
|
//
|
||||||
|
// mockgen -source internal/selfhosted/oidc.go -destination internal/mock/oidc_mock.go -package mock
|
||||||
|
//
|
||||||
|
|
||||||
|
// Package mock is a generated GoMock package.
|
||||||
|
package mock
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "context"
|
||||||
|
reflect "reflect"
|
||||||
|
|
||||||
|
selfhosted "github.com/kkb0318/irsa-manager/internal/selfhosted"
|
||||||
|
gomock "go.uber.org/mock/gomock"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MockOIDCIssuerMeta is a mock of OIDCIssuerMeta interface.
|
||||||
|
type MockOIDCIssuerMeta struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *MockOIDCIssuerMetaMockRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIssuerMetaMockRecorder is the mock recorder for MockOIDCIssuerMeta.
|
||||||
|
type MockOIDCIssuerMetaMockRecorder struct {
|
||||||
|
mock *MockOIDCIssuerMeta
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMockOIDCIssuerMeta creates a new mock instance.
|
||||||
|
func NewMockOIDCIssuerMeta(ctrl *gomock.Controller) *MockOIDCIssuerMeta {
|
||||||
|
mock := &MockOIDCIssuerMeta{ctrl: ctrl}
|
||||||
|
mock.recorder = &MockOIDCIssuerMetaMockRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
|
func (m *MockOIDCIssuerMeta) EXPECT() *MockOIDCIssuerMetaMockRecorder {
|
||||||
|
return m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// IssuerHostPath mocks base method.
|
||||||
|
func (m *MockOIDCIssuerMeta) IssuerHostPath() string {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "IssuerHostPath")
|
||||||
|
ret0, _ := ret[0].(string)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// IssuerHostPath indicates an expected call of IssuerHostPath.
|
||||||
|
func (mr *MockOIDCIssuerMetaMockRecorder) IssuerHostPath() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IssuerHostPath", reflect.TypeOf((*MockOIDCIssuerMeta)(nil).IssuerHostPath))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IssuerUrl mocks base method.
|
||||||
|
func (m *MockOIDCIssuerMeta) IssuerUrl() string {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "IssuerUrl")
|
||||||
|
ret0, _ := ret[0].(string)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// IssuerUrl indicates an expected call of IssuerUrl.
|
||||||
|
func (mr *MockOIDCIssuerMetaMockRecorder) IssuerUrl() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IssuerUrl", reflect.TypeOf((*MockOIDCIssuerMeta)(nil).IssuerUrl))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIdP is a mock of OIDCIdP interface.
|
||||||
|
type MockOIDCIdP struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *MockOIDCIdPMockRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIdPMockRecorder is the mock recorder for MockOIDCIdP.
|
||||||
|
type MockOIDCIdPMockRecorder struct {
|
||||||
|
mock *MockOIDCIdP
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMockOIDCIdP creates a new mock instance.
|
||||||
|
func NewMockOIDCIdP(ctrl *gomock.Controller) *MockOIDCIdP {
|
||||||
|
mock := &MockOIDCIdP{ctrl: ctrl}
|
||||||
|
mock.recorder = &MockOIDCIdPMockRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
|
func (m *MockOIDCIdP) EXPECT() *MockOIDCIdPMockRecorder {
|
||||||
|
return m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create mocks base method.
|
||||||
|
func (m *MockOIDCIdP) Create(ctx context.Context) (string, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Create", ctx)
|
||||||
|
ret0, _ := ret[0].(string)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create indicates an expected call of Create.
|
||||||
|
func (mr *MockOIDCIdPMockRecorder) Create(ctx any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockOIDCIdP)(nil).Create), ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsUpdate mocks base method.
|
||||||
|
func (m *MockOIDCIdP) IsUpdate() (bool, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "IsUpdate")
|
||||||
|
ret0, _ := ret[0].(bool)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsUpdate indicates an expected call of IsUpdate.
|
||||||
|
func (mr *MockOIDCIdPMockRecorder) IsUpdate() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsUpdate", reflect.TypeOf((*MockOIDCIdP)(nil).IsUpdate))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update mocks base method.
|
||||||
|
func (m *MockOIDCIdP) Update(ctx context.Context) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Update", ctx)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update indicates an expected call of Update.
|
||||||
|
func (mr *MockOIDCIdPMockRecorder) Update(ctx any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockOIDCIdP)(nil).Update), ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIdPDiscoveryContents is a mock of OIDCIdPDiscoveryContents interface.
|
||||||
|
type MockOIDCIdPDiscoveryContents struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *MockOIDCIdPDiscoveryContentsMockRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIdPDiscoveryContentsMockRecorder is the mock recorder for MockOIDCIdPDiscoveryContents.
|
||||||
|
type MockOIDCIdPDiscoveryContentsMockRecorder struct {
|
||||||
|
mock *MockOIDCIdPDiscoveryContents
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMockOIDCIdPDiscoveryContents creates a new mock instance.
|
||||||
|
func NewMockOIDCIdPDiscoveryContents(ctrl *gomock.Controller) *MockOIDCIdPDiscoveryContents {
|
||||||
|
mock := &MockOIDCIdPDiscoveryContents{ctrl: ctrl}
|
||||||
|
mock.recorder = &MockOIDCIdPDiscoveryContentsMockRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
|
func (m *MockOIDCIdPDiscoveryContents) EXPECT() *MockOIDCIdPDiscoveryContentsMockRecorder {
|
||||||
|
return m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// Discovery mocks base method.
|
||||||
|
func (m *MockOIDCIdPDiscoveryContents) Discovery() ([]byte, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Discovery")
|
||||||
|
ret0, _ := ret[0].([]byte)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Discovery indicates an expected call of Discovery.
|
||||||
|
func (mr *MockOIDCIdPDiscoveryContentsMockRecorder) Discovery() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Discovery", reflect.TypeOf((*MockOIDCIdPDiscoveryContents)(nil).Discovery))
|
||||||
|
}
|
||||||
|
|
||||||
|
// JWK mocks base method.
|
||||||
|
func (m *MockOIDCIdPDiscoveryContents) JWK() ([]byte, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "JWK")
|
||||||
|
ret0, _ := ret[0].([]byte)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// JWK indicates an expected call of JWK.
|
||||||
|
func (mr *MockOIDCIdPDiscoveryContentsMockRecorder) JWK() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "JWK", reflect.TypeOf((*MockOIDCIdPDiscoveryContents)(nil).JWK))
|
||||||
|
}
|
||||||
|
|
||||||
|
// JWKsFileName mocks base method.
|
||||||
|
func (m *MockOIDCIdPDiscoveryContents) JWKsFileName() string {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "JWKsFileName")
|
||||||
|
ret0, _ := ret[0].(string)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// JWKsFileName indicates an expected call of JWKsFileName.
|
||||||
|
func (mr *MockOIDCIdPDiscoveryContentsMockRecorder) JWKsFileName() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "JWKsFileName", reflect.TypeOf((*MockOIDCIdPDiscoveryContents)(nil).JWKsFileName))
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIdPDiscovery is a mock of OIDCIdPDiscovery interface.
|
||||||
|
type MockOIDCIdPDiscovery struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *MockOIDCIdPDiscoveryMockRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIdPDiscoveryMockRecorder is the mock recorder for MockOIDCIdPDiscovery.
|
||||||
|
type MockOIDCIdPDiscoveryMockRecorder struct {
|
||||||
|
mock *MockOIDCIdPDiscovery
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMockOIDCIdPDiscovery creates a new mock instance.
|
||||||
|
func NewMockOIDCIdPDiscovery(ctrl *gomock.Controller) *MockOIDCIdPDiscovery {
|
||||||
|
mock := &MockOIDCIdPDiscovery{ctrl: ctrl}
|
||||||
|
mock.recorder = &MockOIDCIdPDiscoveryMockRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
|
func (m *MockOIDCIdPDiscovery) EXPECT() *MockOIDCIdPDiscoveryMockRecorder {
|
||||||
|
return m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateStorage mocks base method.
|
||||||
|
func (m *MockOIDCIdPDiscovery) CreateStorage(ctx context.Context) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "CreateStorage", ctx)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateStorage indicates an expected call of CreateStorage.
|
||||||
|
func (mr *MockOIDCIdPDiscoveryMockRecorder) CreateStorage(ctx any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateStorage", reflect.TypeOf((*MockOIDCIdPDiscovery)(nil).CreateStorage), ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Upload mocks base method.
|
||||||
|
func (m *MockOIDCIdPDiscovery) Upload(ctx context.Context, o selfhosted.OIDCIdPDiscoveryContents) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Upload", ctx, o)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Upload indicates an expected call of Upload.
|
||||||
|
func (mr *MockOIDCIdPDiscoveryMockRecorder) Upload(ctx, o any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Upload", reflect.TypeOf((*MockOIDCIdPDiscovery)(nil).Upload), ctx, o)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIdPFactory is a mock of OIDCIdPFactory interface.
|
||||||
|
type MockOIDCIdPFactory struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *MockOIDCIdPFactoryMockRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockOIDCIdPFactoryMockRecorder is the mock recorder for MockOIDCIdPFactory.
|
||||||
|
type MockOIDCIdPFactoryMockRecorder struct {
|
||||||
|
mock *MockOIDCIdPFactory
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMockOIDCIdPFactory creates a new mock instance.
|
||||||
|
func NewMockOIDCIdPFactory(ctrl *gomock.Controller) *MockOIDCIdPFactory {
|
||||||
|
mock := &MockOIDCIdPFactory{ctrl: ctrl}
|
||||||
|
mock.recorder = &MockOIDCIdPFactoryMockRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
|
func (m *MockOIDCIdPFactory) EXPECT() *MockOIDCIdPFactoryMockRecorder {
|
||||||
|
return m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdP mocks base method.
|
||||||
|
func (m *MockOIDCIdPFactory) IdP(i selfhosted.OIDCIssuerMeta) (selfhosted.OIDCIdP, error) {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "IdP", i)
|
||||||
|
ret0, _ := ret[0].(selfhosted.OIDCIdP)
|
||||||
|
ret1, _ := ret[1].(error)
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdP indicates an expected call of IdP.
|
||||||
|
func (mr *MockOIDCIdPFactoryMockRecorder) IdP(i any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IdP", reflect.TypeOf((*MockOIDCIdPFactory)(nil).IdP), i)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdPDiscovery mocks base method.
|
||||||
|
func (m *MockOIDCIdPFactory) IdPDiscovery() selfhosted.OIDCIdPDiscovery {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "IdPDiscovery")
|
||||||
|
ret0, _ := ret[0].(selfhosted.OIDCIdPDiscovery)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdPDiscovery indicates an expected call of IdPDiscovery.
|
||||||
|
func (mr *MockOIDCIdPFactoryMockRecorder) IdPDiscovery() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IdPDiscovery", reflect.TypeOf((*MockOIDCIdPFactory)(nil).IdPDiscovery))
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdPDiscoveryContents mocks base method.
|
||||||
|
func (m *MockOIDCIdPFactory) IdPDiscoveryContents(i selfhosted.OIDCIssuerMeta) selfhosted.OIDCIdPDiscoveryContents {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "IdPDiscoveryContents", i)
|
||||||
|
ret0, _ := ret[0].(selfhosted.OIDCIdPDiscoveryContents)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// IdPDiscoveryContents indicates an expected call of IdPDiscoveryContents.
|
||||||
|
func (mr *MockOIDCIdPFactoryMockRecorder) IdPDiscoveryContents(i any) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IdPDiscoveryContents", reflect.TypeOf((*MockOIDCIdPFactory)(nil).IdPDiscoveryContents), i)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IssuerMeta mocks base method.
|
||||||
|
func (m *MockOIDCIdPFactory) IssuerMeta() selfhosted.OIDCIssuerMeta {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "IssuerMeta")
|
||||||
|
ret0, _ := ret[0].(selfhosted.OIDCIssuerMeta)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// IssuerMeta indicates an expected call of IssuerMeta.
|
||||||
|
func (mr *MockOIDCIdPFactoryMockRecorder) IssuerMeta() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IssuerMeta", reflect.TypeOf((*MockOIDCIdPFactory)(nil).IssuerMeta))
|
||||||
|
}
|
||||||
@@ -23,7 +23,7 @@ func NewS3IdPDiscovery(awsConfig *client.AwsConfig, bucketName string) *S3IdPDis
|
|||||||
|
|
||||||
// CreateStorage creates an S3 bucket
|
// CreateStorage creates an S3 bucket
|
||||||
func (s *S3IdPDiscovery) CreateStorage(ctx context.Context) error {
|
func (s *S3IdPDiscovery) CreateStorage(ctx context.Context) error {
|
||||||
err := s.s3Client.CreateBucket(ctx)
|
err := s.s3Client.CreateBucketPublic(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to create bucket, %w", err)
|
return fmt.Errorf("unable to create bucket, %w", err)
|
||||||
}
|
}
|
||||||
@@ -37,7 +37,7 @@ func (s *S3IdPDiscovery) Upload(ctx context.Context, o selfhosted.OIDCIdPDiscove
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
err = s.s3Client.PutObject(ctx,
|
err = s.s3Client.PutObjectPublic(ctx,
|
||||||
CONFIGURATION_PATH,
|
CONFIGURATION_PATH,
|
||||||
discovery,
|
discovery,
|
||||||
)
|
)
|
||||||
@@ -50,7 +50,7 @@ func (s *S3IdPDiscovery) Upload(ctx context.Context, o selfhosted.OIDCIdPDiscove
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
err = s.s3Client.PutObject(ctx,
|
err = s.s3Client.PutObjectPublic(ctx,
|
||||||
o.JWKsFileName(),
|
o.JWKsFileName(),
|
||||||
jwk,
|
jwk,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2024.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package e2e
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo/v2"
|
|
||||||
. "github.com/onsi/gomega"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Run e2e tests using the Ginkgo runner.
|
|
||||||
func TestE2E(t *testing.T) {
|
|
||||||
RegisterFailHandler(Fail)
|
|
||||||
fmt.Fprintf(GinkgoWriter, "Starting irsa-manager suite\n")
|
|
||||||
RunSpecs(t, "e2e suite")
|
|
||||||
}
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2024.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package e2e
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os/exec"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo/v2"
|
|
||||||
. "github.com/onsi/gomega"
|
|
||||||
|
|
||||||
"github.com/kkb0318/irsa-manager/test/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
const namespace = "irsa-manager-system"
|
|
||||||
|
|
||||||
var _ = Describe("controller", Ordered, func() {
|
|
||||||
BeforeAll(func() {
|
|
||||||
By("installing prometheus operator")
|
|
||||||
Expect(utils.InstallPrometheusOperator()).To(Succeed())
|
|
||||||
|
|
||||||
By("installing the cert-manager")
|
|
||||||
Expect(utils.InstallCertManager()).To(Succeed())
|
|
||||||
|
|
||||||
By("creating manager namespace")
|
|
||||||
cmd := exec.Command("kubectl", "create", "ns", namespace)
|
|
||||||
_, _ = utils.Run(cmd)
|
|
||||||
})
|
|
||||||
|
|
||||||
AfterAll(func() {
|
|
||||||
By("uninstalling the Prometheus manager bundle")
|
|
||||||
utils.UninstallPrometheusOperator()
|
|
||||||
|
|
||||||
By("uninstalling the cert-manager bundle")
|
|
||||||
utils.UninstallCertManager()
|
|
||||||
|
|
||||||
By("removing manager namespace")
|
|
||||||
cmd := exec.Command("kubectl", "delete", "ns", namespace)
|
|
||||||
_, _ = utils.Run(cmd)
|
|
||||||
})
|
|
||||||
|
|
||||||
Context("Operator", func() {
|
|
||||||
It("should run successfully", func() {
|
|
||||||
var controllerPodName string
|
|
||||||
var err error
|
|
||||||
|
|
||||||
// projectimage stores the name of the image used in the example
|
|
||||||
var projectimage = "example.com/irsa-manager:v0.0.1"
|
|
||||||
|
|
||||||
By("building the manager(Operator) image")
|
|
||||||
cmd := exec.Command("make", "docker-build", fmt.Sprintf("IMG=%s", projectimage))
|
|
||||||
_, err = utils.Run(cmd)
|
|
||||||
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
||||||
|
|
||||||
By("loading the the manager(Operator) image on Kind")
|
|
||||||
err = utils.LoadImageToKindClusterWithName(projectimage)
|
|
||||||
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
||||||
|
|
||||||
By("installing CRDs")
|
|
||||||
cmd = exec.Command("make", "install")
|
|
||||||
_, err = utils.Run(cmd)
|
|
||||||
|
|
||||||
By("deploying the controller-manager")
|
|
||||||
cmd = exec.Command("make", "deploy", fmt.Sprintf("IMG=%s", projectimage))
|
|
||||||
_, err = utils.Run(cmd)
|
|
||||||
ExpectWithOffset(1, err).NotTo(HaveOccurred())
|
|
||||||
|
|
||||||
By("validating that the controller-manager pod is running as expected")
|
|
||||||
verifyControllerUp := func() error {
|
|
||||||
// Get pod name
|
|
||||||
|
|
||||||
cmd = exec.Command("kubectl", "get",
|
|
||||||
"pods", "-l", "control-plane=controller-manager",
|
|
||||||
"-o", "go-template={{ range .items }}"+
|
|
||||||
"{{ if not .metadata.deletionTimestamp }}"+
|
|
||||||
"{{ .metadata.name }}"+
|
|
||||||
"{{ \"\\n\" }}{{ end }}{{ end }}",
|
|
||||||
"-n", namespace,
|
|
||||||
)
|
|
||||||
|
|
||||||
podOutput, err := utils.Run(cmd)
|
|
||||||
ExpectWithOffset(2, err).NotTo(HaveOccurred())
|
|
||||||
podNames := utils.GetNonEmptyLines(string(podOutput))
|
|
||||||
if len(podNames) != 1 {
|
|
||||||
return fmt.Errorf("expect 1 controller pods running, but got %d", len(podNames))
|
|
||||||
}
|
|
||||||
controllerPodName = podNames[0]
|
|
||||||
ExpectWithOffset(2, controllerPodName).Should(ContainSubstring("controller-manager"))
|
|
||||||
|
|
||||||
// Validate pod status
|
|
||||||
cmd = exec.Command("kubectl", "get",
|
|
||||||
"pods", controllerPodName, "-o", "jsonpath={.status.phase}",
|
|
||||||
"-n", namespace,
|
|
||||||
)
|
|
||||||
status, err := utils.Run(cmd)
|
|
||||||
ExpectWithOffset(2, err).NotTo(HaveOccurred())
|
|
||||||
if string(status) != "Running" {
|
|
||||||
return fmt.Errorf("controller pod in %s status", status)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
EventuallyWithOffset(1, verifyControllerUp, time.Minute, time.Second).Should(Succeed())
|
|
||||||
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,140 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2024.
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package utils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
. "github.com/onsi/ginkgo/v2" //nolint:golint,revive
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
prometheusOperatorVersion = "v0.68.0"
|
|
||||||
prometheusOperatorURL = "https://github.com/prometheus-operator/prometheus-operator/" +
|
|
||||||
"releases/download/%s/bundle.yaml"
|
|
||||||
|
|
||||||
certmanagerVersion = "v1.5.3"
|
|
||||||
certmanagerURLTmpl = "https://github.com/jetstack/cert-manager/releases/download/%s/cert-manager.yaml"
|
|
||||||
)
|
|
||||||
|
|
||||||
func warnError(err error) {
|
|
||||||
fmt.Fprintf(GinkgoWriter, "warning: %v\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// InstallPrometheusOperator installs the prometheus Operator to be used to export the enabled metrics.
|
|
||||||
func InstallPrometheusOperator() error {
|
|
||||||
url := fmt.Sprintf(prometheusOperatorURL, prometheusOperatorVersion)
|
|
||||||
cmd := exec.Command("kubectl", "create", "-f", url)
|
|
||||||
_, err := Run(cmd)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run executes the provided command within this context
|
|
||||||
func Run(cmd *exec.Cmd) ([]byte, error) {
|
|
||||||
dir, _ := GetProjectDir()
|
|
||||||
cmd.Dir = dir
|
|
||||||
|
|
||||||
if err := os.Chdir(cmd.Dir); err != nil {
|
|
||||||
fmt.Fprintf(GinkgoWriter, "chdir dir: %s\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd.Env = append(os.Environ(), "GO111MODULE=on")
|
|
||||||
command := strings.Join(cmd.Args, " ")
|
|
||||||
fmt.Fprintf(GinkgoWriter, "running: %s\n", command)
|
|
||||||
output, err := cmd.CombinedOutput()
|
|
||||||
if err != nil {
|
|
||||||
return output, fmt.Errorf("%s failed with error: (%v) %s", command, err, string(output))
|
|
||||||
}
|
|
||||||
|
|
||||||
return output, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// UninstallPrometheusOperator uninstalls the prometheus
|
|
||||||
func UninstallPrometheusOperator() {
|
|
||||||
url := fmt.Sprintf(prometheusOperatorURL, prometheusOperatorVersion)
|
|
||||||
cmd := exec.Command("kubectl", "delete", "-f", url)
|
|
||||||
if _, err := Run(cmd); err != nil {
|
|
||||||
warnError(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// UninstallCertManager uninstalls the cert manager
|
|
||||||
func UninstallCertManager() {
|
|
||||||
url := fmt.Sprintf(certmanagerURLTmpl, certmanagerVersion)
|
|
||||||
cmd := exec.Command("kubectl", "delete", "-f", url)
|
|
||||||
if _, err := Run(cmd); err != nil {
|
|
||||||
warnError(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// InstallCertManager installs the cert manager bundle.
|
|
||||||
func InstallCertManager() error {
|
|
||||||
url := fmt.Sprintf(certmanagerURLTmpl, certmanagerVersion)
|
|
||||||
cmd := exec.Command("kubectl", "apply", "-f", url)
|
|
||||||
if _, err := Run(cmd); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Wait for cert-manager-webhook to be ready, which can take time if cert-manager
|
|
||||||
// was re-installed after uninstalling on a cluster.
|
|
||||||
cmd = exec.Command("kubectl", "wait", "deployment.apps/cert-manager-webhook",
|
|
||||||
"--for", "condition=Available",
|
|
||||||
"--namespace", "cert-manager",
|
|
||||||
"--timeout", "5m",
|
|
||||||
)
|
|
||||||
|
|
||||||
_, err := Run(cmd)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// LoadImageToKindCluster loads a local docker image to the kind cluster
|
|
||||||
func LoadImageToKindClusterWithName(name string) error {
|
|
||||||
cluster := "kind"
|
|
||||||
if v, ok := os.LookupEnv("KIND_CLUSTER"); ok {
|
|
||||||
cluster = v
|
|
||||||
}
|
|
||||||
kindOptions := []string{"load", "docker-image", name, "--name", cluster}
|
|
||||||
cmd := exec.Command("kind", kindOptions...)
|
|
||||||
_, err := Run(cmd)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetNonEmptyLines converts given command output string into individual objects
|
|
||||||
// according to line breakers, and ignores the empty elements in it.
|
|
||||||
func GetNonEmptyLines(output string) []string {
|
|
||||||
var res []string
|
|
||||||
elements := strings.Split(output, "\n")
|
|
||||||
for _, element := range elements {
|
|
||||||
if element != "" {
|
|
||||||
res = append(res, element)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetProjectDir will return the directory where the project is
|
|
||||||
func GetProjectDir() (string, error) {
|
|
||||||
wd, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return wd, err
|
|
||||||
}
|
|
||||||
wd = strings.Replace(wd, "/test/e2e", "", -1)
|
|
||||||
return wd, nil
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user