mirror of https://github.com/helm/helm
parent
f73d39ecc7
commit
3f1325faf8
@ -0,0 +1,18 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/mock"
|
||||
"helm.sh/helm/v3/pkg/cli"
|
||||
)
|
||||
|
||||
type chartloader interface {
|
||||
LocateChart(name string, settings *cli.EnvSettings) (string, error)
|
||||
}
|
||||
|
||||
type MockChartLoader struct{ mock.Mock }
|
||||
|
||||
func (m *MockChartLoader) LocateChart(name string, settings *cli.EnvSettings) (string, error) {
|
||||
args := m.Called(name, settings)
|
||||
return args.String(0), args.Error(1)
|
||||
}
|
||||
|
@ -1,24 +1,37 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/mock"
|
||||
"helm.sh/helm/v3/pkg/action"
|
||||
"helm.sh/helm/v3/pkg/chart"
|
||||
"helm.sh/helm/v3/pkg/release"
|
||||
)
|
||||
|
||||
type Installer struct {
|
||||
type install struct {
|
||||
*action.Install
|
||||
}
|
||||
|
||||
type runner interface {
|
||||
type Installer interface {
|
||||
Run(*chart.Chart, map[string]interface{}) (*release.Release, error)
|
||||
SetConfig(InstallConfig)
|
||||
}
|
||||
|
||||
func (i *Installer) SetConfig(cfg InstallConfig) {
|
||||
func (i *install) SetConfig(cfg InstallConfig) {
|
||||
i.ReleaseName = cfg.Name
|
||||
i.Namespace = cfg.Namespace
|
||||
}
|
||||
|
||||
func NewInstaller(ai *action.Install) *Installer {
|
||||
return &Installer{ai}
|
||||
func NewInstall(ai *action.Install) *install {
|
||||
return &install{ai}
|
||||
}
|
||||
|
||||
type MockInstall struct{ mock.Mock }
|
||||
|
||||
func (m *MockInstall) SetConfig(cfg InstallConfig) {
|
||||
m.Called(cfg)
|
||||
}
|
||||
|
||||
func (m *MockInstall) Run(c *chart.Chart, vals map[string]interface{}) (*release.Release, error) {
|
||||
args := m.Called(c, vals)
|
||||
return args.Get(0).(*release.Release), args.Error(1)
|
||||
}
|
||||
|
@ -0,0 +1,68 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"helm.sh/helm/v3/pkg/api/logger"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type ListRequest struct {
|
||||
RequestID string
|
||||
}
|
||||
|
||||
type ListResponse struct {
|
||||
Error string `json:"error,omitempty"`
|
||||
Data []HelmRelease
|
||||
}
|
||||
|
||||
type HelmRelease struct {
|
||||
Release string `json:"release"`
|
||||
Namespace string `json:"namespace"`
|
||||
}
|
||||
|
||||
func Handler(svc Service) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
var response ListResponse
|
||||
var request ListRequest
|
||||
decoder := json.NewDecoder(r.Body)
|
||||
decoder.UseNumber()
|
||||
if err := decoder.Decode(&request); err != nil {
|
||||
response.Error = err.Error()
|
||||
logger.Errorf("[List] error decoding request: %v", err)
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
defer r.Body.Close()
|
||||
|
||||
request.RequestID = r.Header.Get("Request-Id")
|
||||
|
||||
svc.lister.SetStateMask()
|
||||
res, err := svc.lister.Run()
|
||||
|
||||
if err != nil {
|
||||
response.Error = err.Error()
|
||||
logger.Errorf("[List] error while installing chart: %v", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
var helmReleases []HelmRelease
|
||||
for _, eachRes := range res {
|
||||
r := HelmRelease{Release: eachRes.Name, Namespace: eachRes.Namespace}
|
||||
helmReleases = append(helmReleases, r)
|
||||
}
|
||||
response = ListResponse{"", helmReleases}
|
||||
payload, err := json.Marshal(response)
|
||||
if err != nil {
|
||||
response.Error = err.Error()
|
||||
logger.Errorf("[List] error writing response %v", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(payload)
|
||||
})
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/mock"
|
||||
"helm.sh/helm/v3/pkg/action"
|
||||
"helm.sh/helm/v3/pkg/release"
|
||||
)
|
||||
|
||||
type list struct {
|
||||
*action.List
|
||||
}
|
||||
|
||||
type lister interface {
|
||||
Run() ([]*release.Release, error)
|
||||
SetStateMask()
|
||||
}
|
||||
|
||||
func NewList(action *action.List) *list{
|
||||
return &list{action}
|
||||
}
|
||||
|
||||
|
||||
type MockList struct{ mock.Mock }
|
||||
|
||||
func (m *MockList) Run() ([]*release.Release, error) {
|
||||
args := m.Called()
|
||||
return args.Get(0).([]*release.Release), args.Error(1)
|
||||
}
|
Loading…
Reference in new issue