Documentation
¶
Overview ¶
Package framework defines the integration and end-to-end test case for cli core
Package framework defines the integration and end-to-end test case for cli core ¶
Package framework defines the integration and end-to-end test case for cli core
Index ¶
- Constants
- Variables
- func CLICoreDescribe(text string, body func()) bool
- func ContainsAnyString(stdOut *bytes.Buffer, contains []string) error
- func ContainsString(stdOut *bytes.Buffer, contains string) error
- func CreateDir(dir string) error
- func ExecuteCmdAndBuildJSONOutput[...](cmdExe CmdOps, cmd string) ([]*T, error)
- func GetHomeDir() string
- func GetMapKeys[K string, V *PluginInfo](m map[K][]V) []*K
- func NotContainsString(stdOut *bytes.Buffer, contains string) error
- func PluginGroupToMap(pluginGroups []*PluginGroup) map[string]*PluginGroup
- func PluginListToMap(pluginsList []*PluginInfo) map[string]*PluginInfo
- func PluginListToSet(pluginsToInstall []*PluginInfo) map[string]struct{}
- func RandomNumber(length int) string
- func RandomString(length int) string
- func SliceToSet(slice []string) map[string]struct{}
- type CLIPlugin
- type CliOps
- type ClusterInfo
- type ClusterOps
- type CmdOps
- type ConfigLifecycleOps
- type ContainerRuntime
- type ContextCmdOps
- type ContextCreateOps
- type ContextInfo
- type ContextListInfo
- type DiscoveryOptions
- type Docker
- type Framework
- type GeneratePluginOps
- type ImgpkgOps
- type KindCluster
- type PluginBasicOps
- type PluginCmdOps
- type PluginGroup
- type PluginGroupOps
- type PluginHelperOps
- type PluginInfo
- type PluginMeta
- func (p *PluginMeta) GetName() string
- func (p *PluginMeta) GetRegistryDiscoveryURL() string
- func (p *PluginMeta) SetAliases(alias []string) *PluginMeta
- func (p *PluginMeta) SetArch(arch string) *PluginMeta
- func (p *PluginMeta) SetDescription(description string) *PluginMeta
- func (p *PluginMeta) SetDiscoveryType(discoveryType string) *PluginMeta
- func (p *PluginMeta) SetGroup(group string) *PluginMeta
- func (p *PluginMeta) SetHidden(hidden bool) *PluginMeta
- func (p *PluginMeta) SetName(name string) *PluginMeta
- func (p *PluginMeta) SetOS(osType string) *PluginMeta
- func (p *PluginMeta) SetOptional(optional bool) *PluginMeta
- func (p *PluginMeta) SetSHA(sha string) *PluginMeta
- func (p *PluginMeta) SetTarget(target string) *PluginMeta
- func (p *PluginMeta) SetVersion(version string) *PluginMeta
- type PluginRegistry
- type PluginSearch
- type PluginSourceInfo
- type PluginSourceOps
- type PublishPluginOps
- type Server
Constants ¶
const ( ConfigFileName = "config.yaml" ConfigNGFileName = "config-ng.yaml" ConfigFileDir = ".config/tanzu/" )
const ( CliCore = "[CLI-Core]" TanzuInit = "tanzu init" TanzuVersion = "tanzu version" // Config commands ConfigSet = "tanzu config set " ConfigGet = "tanzu config get " ConfigUnset = "tanzu config unset " ConfigInit = "tanzu config init" ConfigServerList = "tanzu config server list" ConfigServerDelete = "tanzu config server delete %s -y" // Plugin commands AddPluginSource = "tanzu plugin source add --name %s --type %s --uri %s" UpdatePluginSource = "tanzu plugin source update %s --type %s --uri %s" ListPluginSourcesWithJSONOutputFlag = "tanzu plugin source list -o json" DeletePluginSource = "tanzu plugin source delete %s" ListPluginsCmdWithJSONOutputFlag = "tanzu plugin list -o json" SearchPluginsCmd = "tanzu plugin search" SearchPluginGroupsCmd = "tanzu plugin group search" InstallPluginCmd = "tanzu plugin install %s" InstallPluginFromGroupCmd = "tanzu plugin install %s --group %s" InstallAllPluginsFromGroupCmd = "tanzu plugin install --group %s" DescribePluginCmd = "tanzu plugin describe %s" UninstallPLuginCmd = "tanzu plugin delete %s --yes" CleanPluginsCmd = "tanzu plugin clean" JSONOutput = " -o json" TestPluginsPrefix = "test-plugin-" PluginSubCommand = "tanzu %s" PluginKey = "%s_%s_%s" // Plugins - Name_Target_Versions // Central repository CentralRepositoryPreReleaseRepoImage = "TANZU_CLI_PRE_RELEASE_REPO_IMAGE" TanzuCliE2ETestCentralRepositoryURL = "TANZU_CLI_E2E_TEST_CENTRAL_REPO_URL" TanzuCliE2ETestLocalCentralRepositoryURL = "TANZU_CLI_E2E_TEST_LOCAL_CENTRAL_REPO_URL" // General constants True = "true" Installed = "installed" // Context commands CreateContextWithEndPoint = "tanzu context create --endpoint %s --name %s" CreateContextWithEndPointStaging = "tanzu context create --endpoint %s --name %s --staging" CreateContextWithKubeconfigFile = "tanzu context create --kubeconfig %s --kubecontext %s --name %s" CreateContextWithDefaultKubeconfigFile = "tanzu context create --kubecontext %s --name %s" UseContext = "tanzu context use %s" GetContext = "tanzu context get %s" ListContextOutputInJSON = "tanzu context list -o json" DeleteContext = "tanzu context delete %s --yes" TanzuAPIToken = "TANZU_API_TOKEN" //nolint:gosec TanzuCliTmcUnstableURL = "TANZU_CLI_TMC_UNSTABLE_URL" KindClusterCreate = "kind create cluster --name %s" KindClusterStatus = "kubectl cluster-info --context %s" KindClusterDelete = "kind delete cluster --name %s" KindClusterGet = "kind get clusters " KindClusterInfo = "kubectl cluster-info --context %s" KindCreateCluster = "kind create cluster --name " DockerInfo = "docker info" StartDockerUbuntu = "sudo systemctl start docker" StopDockerUbuntu = "sudo systemctl stop docker" TMC = "tmc" TKG = "tkg" TestDir = ".tanzu-cli-e2e" TestPluginsDir = ".e2e-test-plugins" SourceType = "oci" GlobalTarget = "global" // log info ExecutingCommand = "Executing command: %s" // Error messages UnableToFindPluginForTarget = "unable to find plugin '%s' for target '%s'" UnableToFindPlugin = "unable to find plugin '%s'" InvalidTargetSpecified = "" /* 130-byte string literal not displayed */ InvalidTargetGlobal = "invalid target for plugin: global" UnknownDiscoverySourceType = "unknown discovery source type" DiscoverySourceNotFound = "cli discovery source not found" ErrorLogForCommandWithErrAndStdErr = "error while executing command:'%s', error:'%s' stdErr:'%s'" FailedToConstructJSONNodeFromOutputAndErrInfo = "failed to construct json node from output:'%s' error:'%s' " FailedToConstructJSONNodeFromOutput = "failed to construct json node from output:'%s'" // config related constants FailedToCreateContext = "failed to create context" FailedToCreateContextWithStdout = FailedToCreateContext + ", stdout:%s" ContextCreated = "context %s created successfully" ContextDeleted = "context %s deleted successfully" ConfigServerDeleted = "config server %s deleted successfully" FailedToDeleteContext = "failed to delete context" )
const ( DefaultCLIPluginBucket = "/tkg/tanzu_core/tanzu-cli-plugins/" DefaultRegistryName = "registry" DefaultRegistryPort = "5001" )
const GeneratedValuesTemplate = `#@data/values
#@overlay/match-child-defaults missing_ok=True
---`
const ImagesTemplate = `---
apiVersion: imgpkg.carvel.dev/v1alpha1
images:
kind: ImagesLock`
const ScriptBasedPluginTemplate = `` /* 491-byte string literal not displayed */
Variables ¶
var ( TestDirPath string TestPluginsDirPath string TestStandalonePluginsPath string )
var PluginGroupsForLifeCycleTests []*PluginGroup
PluginGroupsForLifeCycleTests is list of plugin groups (which are published in local central repo) used in plugin group life cycle test cases
var PluginsForLifeCycleTests []*PluginInfo
PluginsForLifeCycleTests is list of plugins (which are published in local central repo) used in plugin life cycle test cases
Functions ¶
func CLICoreDescribe ¶
CLICoreDescribe annotates the test with the CLICore label.
func ContainsAnyString ¶
ContainsAnyString checks that the given buffer contains any of the given set of strings.
func ContainsString ¶
ContainsString checks that the given buffer contains the string.
func ExecuteCmdAndBuildJSONOutput ¶ added in v0.0.11
func ExecuteCmdAndBuildJSONOutput[T PluginInfo | PluginSearch | PluginGroup | PluginSourceInfo | configapi.ClientConfig | Server | ContextListInfo](cmdExe CmdOps, cmd string) ([]*T, error)
ExecuteCmdAndBuildJSONOutput is generic function to execute given command and build JSON output and return
func GetHomeDir ¶ added in v0.0.4
func GetHomeDir() string
func GetMapKeys ¶ added in v0.0.11
func GetMapKeys[K string, V *PluginInfo](m map[K][]V) []*K
GetMapKeys takes map[K]any and returns the slice of all map keys
func NotContainsString ¶
NotContainsString checks that the given buffer not contains the string if contains then throws error.
func PluginGroupToMap ¶ added in v0.0.11
func PluginGroupToMap(pluginGroups []*PluginGroup) map[string]*PluginGroup
PluginGroupToMap converts the given slice of PluginGroups to map (PluginGroup name is the key) and PluginGroup is the value
func PluginListToMap ¶ added in v0.0.4
func PluginListToMap(pluginsList []*PluginInfo) map[string]*PluginInfo
PluginListToMap converts the given PluginInfo slice to map type, key is combination of plugin's name_target_version and value is PluginInfo
func PluginListToSet ¶ added in v0.0.4
func PluginListToSet(pluginsToInstall []*PluginInfo) map[string]struct{}
PluginListToSet converts the given PluginInfo slice to set type, key is combination of plugin's name_target_version
func RandomNumber ¶ added in v0.0.4
RandomNumber generates random string of given length
func RandomString ¶
RandomString generates random string of given length
func SliceToSet ¶ added in v0.0.4
SliceToSet converts the given slice to set type
Types ¶
type CLIPlugin ¶
type CLIPlugin struct {
metav1.TypeMeta `yaml:",inline"`
Metadata metav1.ObjectMeta `json:"metadata"`
Spec cliv1alpha1.CLIPluginSpec `json:"spec"`
}
CLIPlugin for plugin overlay info
type CliOps ¶
type CliOps interface {
CliInit() error
CliVersion() (string, error)
InstallCLI(version string) error
UninstallCLI(version string) error
}
CliOps performs basic cli operations
type ClusterInfo ¶ added in v0.0.4
type ClusterInfo struct {
Name string
ClusterContext string
EndPoint string
KubeConfigPath string
APIKey string
}
ClusterInfo holds the general cluster details
type ClusterOps ¶
type ClusterOps interface {
// CreateCluster creates the cluster with given name
CreateCluster(clusterName string) (output string, err error)
// DeleteCluster deletes the cluster with given name
DeleteCluster(clusterName string) (output string, err error)
// ClusterStatus checks the status of the cluster for given cluster name
ClusterStatus(clusterName string) (output string, err error)
// GetClusterEndpoint returns the cluster endpoint for the given cluster name
GetClusterEndpoint(clusterName string) (endpoint string, err error)
// GetClusterContext returns the given cluster kubeconfig context
GetClusterContext(clusterName string) string
// GetKubeconfigPath returns the default kubeconfig path
GetKubeconfigPath() string
}
ClusterOps has helper operations to perform on cluster
type CmdOps ¶
type CmdOps interface {
Exec(command string) (stdOut, stdErr *bytes.Buffer, err error)
ExecContainsString(command, contains string) error
ExecContainsAnyString(command string, contains []string) error
ExecContainsErrorString(command, contains string) error
ExecNotContainsStdErrorString(command, contains string) error
ExecNotContainsString(command, contains string) error
}
CmdOps performs the Command line exec operations
type ConfigLifecycleOps ¶
type ConfigLifecycleOps interface {
// ConfigSetFeatureFlag sets the tanzu config feature flag
ConfigSetFeatureFlag(path, value string) error
// ConfigGetFeatureFlag gets the tanzu config feature flag
ConfigGetFeatureFlag(path string) (string, error)
// ConfigUnsetFeature un-sets the tanzu config feature flag
ConfigUnsetFeature(path string) error
// ConfigInit performs "tanzu config init"
ConfigInit() error
// GetConfig gets the tanzu config
GetConfig() (*configapi.ClientConfig, error)
// ConfigServerList returns the server list
ConfigServerList() ([]*Server, error)
// ConfigServerDelete deletes given server from tanzu config
ConfigServerDelete(serverName string) error
// DeleteCLIConfigurationFiles deletes cli configuration files
DeleteCLIConfigurationFiles() error
// IsCLIConfigurationFilesExists checks the existence of cli configuration files
IsCLIConfigurationFilesExists() bool
}
ConfigLifecycleOps performs "tanzu config" command operations
func NewConfOps ¶
func NewConfOps() ConfigLifecycleOps
type ContainerRuntime ¶
type ContainerRuntime interface {
StartContainerRuntime() (output string, err error)
ContainerRuntimeStatus() (status string, err error)
StopContainerRuntime() (output string, err error)
}
ContainerRuntime has operations to perform on container runtime
type ContextCmdOps ¶ added in v0.0.4
type ContextCmdOps interface {
// ContextCreateOps helps context create operations
ContextCreateOps
// UseContext helps to run 'context use' command
UseContext(contextName string) error
// GetContext helps to run `context get` command
GetContext(contextName string) (ContextInfo, error)
// ListContext helps to run `context list` command
ListContext() ([]*ContextListInfo, error)
// DeleteContext helps to run `context delete` command
DeleteContext(contextName string) error
// GetActiveContext returns current active context
GetActiveContext(targetType string) (string, error)
}
ContextCmdOps helps to run Context lifecycle operations
func NewContextCmdOps ¶ added in v0.0.4
func NewContextCmdOps() ContextCmdOps
type ContextCreateOps ¶ added in v0.0.4
type ContextCreateOps interface {
// CreateContextWithEndPoint creates a context with a given endpoint URL
CreateContextWithEndPoint(contextName, endpoint string) error
// CreateContextWithEndPointStaging creates a context with a given endpoint URL for staging
CreateContextWithEndPointStaging(contextName, endpoint string) error
// CreateContextWithKubeconfig creates a context with the given kubeconfig file path and a context from the kubeconfig file
CreateContextWithKubeconfig(contextName, kubeconfigPath, kubeContext string) error
// CreateContextWithDefaultKubeconfig creates a context with the default kubeconfig file and a given input context name if it exists in the default kubeconfig file
CreateContextWithDefaultKubeconfig(contextName, kubeContext string) error
}
ContextCreateOps helps to run context create command
func NewContextCreateOps ¶ added in v0.0.4
func NewContextCreateOps() ContextCreateOps
type ContextInfo ¶ added in v0.0.4
type ContextListInfo ¶ added in v0.0.4
type DiscoveryOptions ¶
type Docker ¶
type Docker interface {
ContainerRuntime
}
Docker is the container runtime of type docker
type Framework ¶
type Framework struct {
CliOps
Config ConfigLifecycleOps
KindCluster ClusterOps
PluginCmd PluginCmdOps // performs plugin command operations
PluginHelper PluginHelperOps // helper (pre-setup) for plugin cmd operations
ContextCmd ContextCmdOps
}
Framework has all helper functions to write CLI e2e test cases
func NewFramework ¶
func NewFramework() *Framework
type GeneratePluginOps ¶
type GeneratePluginOps interface {
// GeneratePluginBinaries generates plugin binaries for given plugin metadata and return generated plugin binary file paths
GeneratePluginBinaries(pluginsMeta []*PluginMeta) ([]string, []error)
}
GeneratePluginOps helps to generate script-based plugin binaries, and plugin binaries can be used to perform plugin testing like, add plugin source, list, and install plugins. And call sub-commands such as info and version.
func NewScriptBasedPlugins ¶
func NewScriptBasedPlugins() GeneratePluginOps
type ImgpkgOps ¶
type ImgpkgOps interface {
PushBinary(filepath, registryBucketURL string) (registryURL string, err error)
PushBundle(filepath, registryBucketURL string) (registryURL string, err error)
PullBinary(url string, outputPath string) (stdOut string, err error)
PullBundle(url string, outputPath string) (stdOut string, err error)
}
func NewImgpkgOps ¶
func NewImgpkgOps() ImgpkgOps
type KindCluster ¶
type KindCluster interface {
ClusterOps
}
KindCluster performs k8s KIND cluster operations
func NewKindCluster ¶
func NewKindCluster(docker Docker) KindCluster
type PluginBasicOps ¶
type PluginBasicOps interface {
// ListPlugins lists all plugins by running 'tanzu plugin list' command
ListPlugins() ([]*PluginInfo, error)
// SearchPlugins searches all plugins for given filter (keyword|regex) by running 'tanzu plugin search' command
SearchPlugins(filter string) ([]*PluginInfo, error)
// InstallPlugin installs given plugin and flags
InstallPlugin(pluginName, target, versions string) error
// DescribePlugin describes given plugin and flags
DescribePlugin(pluginName, target string) (string, error)
// UninstallPlugin uninstalls/deletes given plugin
UninstallPlugin(pluginName, target string) error
// DeletePlugin deletes/uninstalls given plugin
DeletePlugin(pluginName, target string) error
// ExecuteSubCommand executes specific plugin sub-command
ExecuteSubCommand(pluginWithSubCommand string) (string, error)
// CleanPlugins executes the plugin clean command to delete all existing plugins
CleanPlugins() error
}
PluginBasicOps helps to perform the plugin command operations
type PluginCmdOps ¶
type PluginCmdOps interface {
PluginBasicOps
PluginSourceOps
PluginGroupOps
}
PluginCmdOps helps to perform the plugin and its sub-commands lifecycle operations
func NewPluginLifecycleOps ¶
func NewPluginLifecycleOps() PluginCmdOps
type PluginGroup ¶ added in v0.0.11
type PluginGroup struct {
Group string `json:"group"`
}
type PluginGroupOps ¶ added in v0.0.11
type PluginGroupOps interface {
// SearchPluginGroups performs plugin group search
// input: flagsWithValues - flags and values if any
SearchPluginGroups(flagsWithValues string) ([]*PluginGroup, error)
// InstallPluginsFromGroup a plugin or all plugins from the given plugin group
InstallPluginsFromGroup(pluginNameORAll, groupName string) error
}
type PluginHelperOps ¶
type PluginHelperOps interface {
GeneratePluginOps
PublishPluginOps
}
PluginHelperOps helps to generate and publish plugins
func NewPluginOps ¶
func NewPluginOps(generatePluginOps GeneratePluginOps, publishPluginOps PublishPluginOps) PluginHelperOps
type PluginInfo ¶ added in v0.0.4
type PluginMeta ¶
type PluginMeta struct {
// contains filtered or unexported fields
}
func NewPluginMeta ¶
func NewPluginMeta() *PluginMeta
func (*PluginMeta) GetName ¶
func (p *PluginMeta) GetName() string
func (*PluginMeta) GetRegistryDiscoveryURL ¶
func (p *PluginMeta) GetRegistryDiscoveryURL() string
func (*PluginMeta) SetAliases ¶
func (p *PluginMeta) SetAliases(alias []string) *PluginMeta
func (*PluginMeta) SetArch ¶
func (p *PluginMeta) SetArch(arch string) *PluginMeta
func (*PluginMeta) SetDescription ¶
func (p *PluginMeta) SetDescription(description string) *PluginMeta
func (*PluginMeta) SetDiscoveryType ¶
func (p *PluginMeta) SetDiscoveryType(discoveryType string) *PluginMeta
func (*PluginMeta) SetGroup ¶
func (p *PluginMeta) SetGroup(group string) *PluginMeta
func (*PluginMeta) SetHidden ¶
func (p *PluginMeta) SetHidden(hidden bool) *PluginMeta
func (*PluginMeta) SetName ¶
func (p *PluginMeta) SetName(name string) *PluginMeta
func (*PluginMeta) SetOS ¶
func (p *PluginMeta) SetOS(osType string) *PluginMeta
func (*PluginMeta) SetOptional ¶
func (p *PluginMeta) SetOptional(optional bool) *PluginMeta
func (*PluginMeta) SetSHA ¶
func (p *PluginMeta) SetSHA(sha string) *PluginMeta
func (*PluginMeta) SetTarget ¶
func (p *PluginMeta) SetTarget(target string) *PluginMeta
func (*PluginMeta) SetVersion ¶
func (p *PluginMeta) SetVersion(version string) *PluginMeta
type PluginRegistry ¶
type PluginRegistry interface {
// StartRegistry starts plugin registry
StartRegistry() (url string, err error)
// StopRegistry stops plugin registry
StopRegistry() error
// IsRegistryRunning validates plugin registry status
IsRegistryRunning() (bool, error)
// GetRegistryURLWithDefaultCLIPluginsBucket returns the default registry url with default bucket for CLI plugin's
GetRegistryURLWithDefaultCLIPluginsBucket() (url string)
}
func NewLocalOCIRegistry ¶
func NewLocalOCIRegistry(registryName, port string) PluginRegistry
type PluginSearch ¶ added in v0.0.11
type PluginSourceInfo ¶ added in v0.0.4
type PluginSourceOps ¶
type PluginSourceOps interface {
// AddPluginDiscoverySource adds plugin discovery source, and returns stdOut and error info
AddPluginDiscoverySource(discoveryOpts *DiscoveryOptions) (string, error)
// UpdatePluginDiscoverySource updates plugin discovery source, and returns stdOut and error info
UpdatePluginDiscoverySource(discoveryOpts *DiscoveryOptions) (string, error)
// DeletePluginDiscoverySource removes the plugin discovery source, and returns stdOut and error info
DeletePluginDiscoverySource(pluginSourceName string) (string, error)
// ListPluginSources returns all available plugin discovery sources
ListPluginSources() ([]*PluginSourceInfo, error)
}
PluginSourceOps helps 'plugin source' commands
type PublishPluginOps ¶
type PublishPluginOps interface {
// PublishPluginBinary publishes the plugin binaries to given registry bucket and returns the plugin distribution urls
PublishPluginBinary(pluginsInfo []*PluginMeta) (distributionUrls []string, errs []error)
// GeneratePluginBundle generates plugin bundle in local file system for given plugin metadata
GeneratePluginBundle(pluginsMeta []*PluginMeta) ([]string, []error)
// PublishPluginBundle publishes the plugin bundles to given registry bucket and returns the plugins discovery urls
PublishPluginBundle(pluginsInfo []*PluginMeta) (discoveryUrls []string, errs []error)
}
PublishPluginOps helps to publish plugin binaries and plugin bundles
func NewLocalOCIPluginOps ¶
func NewLocalOCIPluginOps(registry PluginRegistry) PublishPluginOps
Source Files
¶
- cli_lifecycle_operations.go
- cluster_container_runtime.go
- cluster_interface.go
- cluster_kind.go
- cmd_exec_operations.go
- config_lifecycle_operations.go
- context_create_operations.go
- context_lifecycle_operations.go
- framework.go
- framework_helper.go
- imgpkg_operations.go
- output_handling.go
- plugin_lifecycle_operations.go
- plugin_meta.go
- plugin_operations.go
- plugin_registry.go
- templates.go