mirror of https://github.com/helm/helm.git
				
				
				
			
		
			
	
	
		
			171 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			171 lines
		
	
	
		
			4.7 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 cmd | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"bytes" | ||
|  | 	"os" | ||
|  | 	"path/filepath" | ||
|  | 	"strings" | ||
|  | 	"testing" | ||
|  | ) | ||
|  | 
 | ||
|  | // Common plugin.yaml content for v1 format tests
 | ||
|  | const testPluginYAML = `apiVersion: v1 | ||
|  | name: test-plugin | ||
|  | version: 1.0.0 | ||
|  | type: cli/v1 | ||
|  | runtime: subprocess | ||
|  | config: | ||
|  |   usage: test-plugin [flags] | ||
|  |   shortHelp: A test plugin | ||
|  |   longHelp: A test plugin for testing purposes | ||
|  | runtimeConfig: | ||
|  |   platformCommands: | ||
|  |     - os: linux | ||
|  |       command: echo | ||
|  |       args: ["test"]` | ||
|  | 
 | ||
|  | func TestPluginPackageWithoutSigning(t *testing.T) { | ||
|  | 	// Create a test plugin directory
 | ||
|  | 	tempDir := t.TempDir() | ||
|  | 	pluginDir := filepath.Join(tempDir, "test-plugin") | ||
|  | 	if err := os.MkdirAll(pluginDir, 0755); err != nil { | ||
|  | 		t.Fatal(err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Create a plugin.yaml file
 | ||
|  | 	if err := os.WriteFile(filepath.Join(pluginDir, "plugin.yaml"), []byte(testPluginYAML), 0644); err != nil { | ||
|  | 		t.Fatal(err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Create package options with sign=false
 | ||
|  | 	o := &pluginPackageOptions{ | ||
|  | 		sign:        false, // Explicitly disable signing
 | ||
|  | 		pluginPath:  pluginDir, | ||
|  | 		destination: tempDir, | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Run the package command
 | ||
|  | 	out := &bytes.Buffer{} | ||
|  | 	err := o.run(out) | ||
|  | 
 | ||
|  | 	// Should succeed without error
 | ||
|  | 	if err != nil { | ||
|  | 		t.Errorf("unexpected error: %v", err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Check that tarball was created with plugin name and version
 | ||
|  | 	tarballPath := filepath.Join(tempDir, "test-plugin-1.0.0.tgz") | ||
|  | 	if _, err := os.Stat(tarballPath); os.IsNotExist(err) { | ||
|  | 		t.Error("tarball should exist when sign=false") | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Check that no .prov file was created
 | ||
|  | 	provPath := tarballPath + ".prov" | ||
|  | 	if _, err := os.Stat(provPath); !os.IsNotExist(err) { | ||
|  | 		t.Error("provenance file should not exist when sign=false") | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Output should contain warning about skipping signing
 | ||
|  | 	output := out.String() | ||
|  | 	if !strings.Contains(output, "WARNING: Skipping plugin signing") { | ||
|  | 		t.Error("should print warning when signing is skipped") | ||
|  | 	} | ||
|  | 	if !strings.Contains(output, "Successfully packaged") { | ||
|  | 		t.Error("should print success message") | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestPluginPackageDefaultRequiresSigning(t *testing.T) { | ||
|  | 	// Create a test plugin directory
 | ||
|  | 	tempDir := t.TempDir() | ||
|  | 	pluginDir := filepath.Join(tempDir, "test-plugin") | ||
|  | 	if err := os.MkdirAll(pluginDir, 0755); err != nil { | ||
|  | 		t.Fatal(err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Create a plugin.yaml file
 | ||
|  | 	if err := os.WriteFile(filepath.Join(pluginDir, "plugin.yaml"), []byte(testPluginYAML), 0644); err != nil { | ||
|  | 		t.Fatal(err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Create package options with default sign=true and invalid keyring
 | ||
|  | 	o := &pluginPackageOptions{ | ||
|  | 		sign:        true, // This is now the default
 | ||
|  | 		keyring:     "/non/existent/keyring", | ||
|  | 		pluginPath:  pluginDir, | ||
|  | 		destination: tempDir, | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Run the package command
 | ||
|  | 	out := &bytes.Buffer{} | ||
|  | 	err := o.run(out) | ||
|  | 
 | ||
|  | 	// Should fail because signing is required by default
 | ||
|  | 	if err == nil { | ||
|  | 		t.Error("expected error when signing fails with default settings") | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Check that no tarball was created
 | ||
|  | 	tarballPath := filepath.Join(tempDir, "test-plugin.tgz") | ||
|  | 	if _, err := os.Stat(tarballPath); !os.IsNotExist(err) { | ||
|  | 		t.Error("tarball should not exist when signing fails") | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestPluginPackageSigningFailure(t *testing.T) { | ||
|  | 	// Create a test plugin directory
 | ||
|  | 	tempDir := t.TempDir() | ||
|  | 	pluginDir := filepath.Join(tempDir, "test-plugin") | ||
|  | 	if err := os.MkdirAll(pluginDir, 0755); err != nil { | ||
|  | 		t.Fatal(err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Create a plugin.yaml file
 | ||
|  | 	if err := os.WriteFile(filepath.Join(pluginDir, "plugin.yaml"), []byte(testPluginYAML), 0644); err != nil { | ||
|  | 		t.Fatal(err) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Create package options with sign flag but invalid keyring
 | ||
|  | 	o := &pluginPackageOptions{ | ||
|  | 		sign:        true, | ||
|  | 		keyring:     "/non/existent/keyring", // This will cause signing to fail
 | ||
|  | 		pluginPath:  pluginDir, | ||
|  | 		destination: tempDir, | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Run the package command
 | ||
|  | 	out := &bytes.Buffer{} | ||
|  | 	err := o.run(out) | ||
|  | 
 | ||
|  | 	// Should get an error
 | ||
|  | 	if err == nil { | ||
|  | 		t.Error("expected error when signing fails, got nil") | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Check that no tarball was created
 | ||
|  | 	tarballPath := filepath.Join(tempDir, "test-plugin.tgz") | ||
|  | 	if _, err := os.Stat(tarballPath); !os.IsNotExist(err) { | ||
|  | 		t.Error("tarball should not exist when signing fails") | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// Output should not contain success message
 | ||
|  | 	if bytes.Contains(out.Bytes(), []byte("Successfully packaged")) { | ||
|  | 		t.Error("should not print success message when signing fails") | ||
|  | 	} | ||
|  | } |