mirror of https://github.com/helm/helm.git
				
				
				
			
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Go
		
	
	
	
| /*
 | |
| Copyright The Helm Authors.
 | |
| 
 | |
| 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 v1
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"math/rand"
 | |
| 
 | |
| 	chart "helm.sh/helm/v4/pkg/chart/v2"
 | |
| 	"helm.sh/helm/v4/pkg/time"
 | |
| )
 | |
| 
 | |
| // MockHookTemplate is the hook template used for all mock release objects.
 | |
| var MockHookTemplate = `apiVersion: v1
 | |
| kind: Job
 | |
| metadata:
 | |
|   annotations:
 | |
|     "helm.sh/hook": pre-install
 | |
| `
 | |
| 
 | |
| // MockManifest is the manifest used for all mock release objects.
 | |
| var MockManifest = `apiVersion: v1
 | |
| kind: Secret
 | |
| metadata:
 | |
|   name: fixture
 | |
| `
 | |
| 
 | |
| // MockReleaseOptions allows for user-configurable options on mock release objects.
 | |
| type MockReleaseOptions struct {
 | |
| 	Name      string
 | |
| 	Version   int
 | |
| 	Chart     *chart.Chart
 | |
| 	Status    Status
 | |
| 	Namespace string
 | |
| }
 | |
| 
 | |
| // Mock creates a mock release object based on options set by MockReleaseOptions. This function should typically not be used outside of testing.
 | |
| func Mock(opts *MockReleaseOptions) *Release {
 | |
| 	date := time.Unix(242085845, 0).UTC()
 | |
| 
 | |
| 	name := opts.Name
 | |
| 	if name == "" {
 | |
| 		name = "testrelease-" + fmt.Sprint(rand.Intn(100))
 | |
| 	}
 | |
| 
 | |
| 	version := 1
 | |
| 	if opts.Version != 0 {
 | |
| 		version = opts.Version
 | |
| 	}
 | |
| 
 | |
| 	namespace := opts.Namespace
 | |
| 	if namespace == "" {
 | |
| 		namespace = "default"
 | |
| 	}
 | |
| 
 | |
| 	ch := opts.Chart
 | |
| 	if opts.Chart == nil {
 | |
| 		ch = &chart.Chart{
 | |
| 			Metadata: &chart.Metadata{
 | |
| 				Name:       "foo",
 | |
| 				Version:    "0.1.0-beta.1",
 | |
| 				AppVersion: "1.0",
 | |
| 				Annotations: map[string]string{
 | |
| 					"category":  "web-apps",
 | |
| 					"supported": "true",
 | |
| 				},
 | |
| 				Dependencies: []*chart.Dependency{
 | |
| 					{
 | |
| 						Name:       "cool-plugin",
 | |
| 						Version:    "1.0.0",
 | |
| 						Repository: "https://coolplugin.io/charts",
 | |
| 						Condition:  "coolPlugin.enabled",
 | |
| 						Enabled:    true,
 | |
| 					},
 | |
| 					{
 | |
| 						Name:      "crds",
 | |
| 						Version:   "2.7.1",
 | |
| 						Condition: "crds.enabled",
 | |
| 					},
 | |
| 				},
 | |
| 			},
 | |
| 			Templates: []*chart.File{
 | |
| 				{Name: "templates/foo.tpl", Data: []byte(MockManifest)},
 | |
| 			},
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	scode := StatusDeployed
 | |
| 	if len(opts.Status) > 0 {
 | |
| 		scode = opts.Status
 | |
| 	}
 | |
| 
 | |
| 	info := &Info{
 | |
| 		FirstDeployed: date,
 | |
| 		LastDeployed:  date,
 | |
| 		Status:        scode,
 | |
| 		Description:   "Release mock",
 | |
| 		Notes:         "Some mock release notes!",
 | |
| 	}
 | |
| 
 | |
| 	return &Release{
 | |
| 		Name:      name,
 | |
| 		Info:      info,
 | |
| 		Chart:     ch,
 | |
| 		Config:    map[string]interface{}{"name": "value"},
 | |
| 		Version:   version,
 | |
| 		Namespace: namespace,
 | |
| 		Hooks: []*Hook{
 | |
| 			{
 | |
| 				Name:     "pre-install-hook",
 | |
| 				Kind:     "Job",
 | |
| 				Path:     "pre-install-hook.yaml",
 | |
| 				Manifest: MockHookTemplate,
 | |
| 				LastRun:  HookExecution{},
 | |
| 				Events:   []HookEvent{HookPreInstall},
 | |
| 			},
 | |
| 		},
 | |
| 		Manifest: MockManifest,
 | |
| 	}
 | |
| }
 |