Documentation ¶
Index ¶
- Constants
- Variables
- func Exec(name string, args ...string) (string, error)
- func LoadObject(text string) (runtime.Object, error)
- type Condition
- type E2ESuite
- func (s *E2ESuite) BeforeTest(string, string)
- func (s *E2ESuite) CheckError(err error)
- func (s *E2ESuite) DeleteResources()
- func (s *E2ESuite) GetBasicAuthToken() string
- func (s *E2ESuite) GetServiceAccountToken() (string, error)
- func (s *E2ESuite) Given() *Given
- func (s *E2ESuite) Need(needs ...Need)
- func (s *E2ESuite) SetupSuite()
- func (s *E2ESuite) TearDownSuite()
- type Given
- func (g *Given) ClusterWorkflowTemplate(text string) *Given
- func (g *Given) CronWorkflow(text string) *Given
- func (g *Given) Exec(name string, args []string, block func(t *testing.T, output string, err error)) *Given
- func (g *Given) RunCli(args []string, block func(t *testing.T, output string, err error)) *Given
- func (g *Given) When() *When
- func (g *Given) Workflow(text string) *Given
- func (g *Given) WorkflowEventBinding(text string) *Given
- func (g *Given) WorkflowName(name string) *Given
- func (g *Given) WorkflowTemplate(text string) *Given
- type Need
- type Persistence
- type Then
- func (t *Then) ExpectAuditEvents(filter func(event apiv1.Event) bool, num int, ...) *Then
- func (t *Then) ExpectCron(block func(t *testing.T, cronWf *wfv1.CronWorkflow)) *Then
- func (t *Then) ExpectWorkflow(...) *Then
- func (t *Then) ExpectWorkflowDeleted() *Then
- func (t *Then) ExpectWorkflowList(listOptions metav1.ListOptions, ...) *Then
- func (t *Then) ExpectWorkflowName(workflowName string, ...) *Then
- func (t *Then) ExpectWorkflowNode(selector func(status wfv1.NodeStatus) bool, ...) *Then
- func (t *Then) RunCli(args []string, block func(t *testing.T, output string, err error)) *Then
- func (t *Then) When() *When
- type When
- func (w *When) And(block func()) *When
- func (w *When) CreateClusterWorkflowTemplates() *When
- func (w *When) CreateConfigMap(name string, data map[string]string) *When
- func (w *When) CreateCronWorkflow() *When
- func (w *When) CreateWorkflowEventBinding() *When
- func (w *When) CreateWorkflowTemplates() *When
- func (w *When) DeleteConfigMap(name string) *When
- func (w *When) DeleteMemoryQuota() *When
- func (w *When) DeletePodsQuota() *When
- func (w *When) DeleteStorageQuota() *When
- func (w *When) DeleteWorkflow() *When
- func (w *When) Exec(name string, args []string, block func(t *testing.T, output string, err error)) *When
- func (w *When) Given() *Given
- func (w *When) MemoryQuota(memoryLimit string) *When
- func (w *When) PodsQuota(podLimit int) *When
- func (w *When) RunCli(args []string, block func(t *testing.T, output string, err error)) *When
- func (w *When) StorageQuota(storageLimit string) *When
- func (w *When) SubmitWorkflow() *When
- func (w *When) SubmitWorkflowsFromClusterWorkflowTemplates() *When
- func (w *When) SubmitWorkflowsFromCronWorkflows() *When
- func (w *When) SubmitWorkflowsFromWorkflowTemplates() *When
- func (w *When) Then() *Then
- func (w *When) Wait(timeout time.Duration) *When
- func (w *When) WaitForWorkflow(options ...interface{}) *When
Constants ¶
const ( Namespace = "argo" Label = workflow.WorkflowFullName + "/test" // mark this workflow as a test )
Variables ¶
var ( RBAC Need = func(s *E2ESuite) (bool, string) { return os.Getenv("CI") != "", "Kubernetes RBAC (and therefore CI)" } CI Need = func(s *E2ESuite) (bool, string) { return os.Getenv("CI") != "", "CI" } BaseLayerArtifacts Need = func(s *E2ESuite) (bool, string) { met, _ := None(K8SAPI, Kubelet)(s) return met, "base layer artifact support" } Offloading Need = func(s *E2ESuite) (bool, string) { return s.Persistence.IsEnabled(), "offloading enabled" } WorkflowArchive Need = func(s *E2ESuite) (bool, string) { return s.Persistence.IsEnabled(), "workflow archive enabled" } Docker = Executor("docker") K8SAPI = Executor("k8sapi") Kubelet = Executor("kubelet") PNS = Executor("pns") )
var HasInvolvedObject = func(kind string, uid types.UID) func(event apiv1.Event) bool { return func(e apiv1.Event) bool { return e.InvolvedObject.Kind == kind && e.InvolvedObject.UID == uid } }
var HasInvolvedObjectWithName = func(kind string, name string) func(event apiv1.Event) bool { return func(e apiv1.Event) bool { return e.InvolvedObject.Kind == kind && e.InvolvedObject.Name == name } }
Functions ¶
Types ¶
type Condition ¶
var ( ToBeCompleted Condition = func(wf *wfv1.Workflow) (bool, string) { return wf.Labels[common.LabelKeyCompleted] == "true", "to be completed" } ToStart Condition = func(wf *wfv1.Workflow) (bool, string) { return !wf.Status.StartedAt.IsZero(), "to start" } ToBeRunning Condition = func(wf *wfv1.Workflow) (bool, string) { return wf.Status.Nodes.Any(func(node wfv1.NodeStatus) bool { return node.Phase == wfv1.NodeRunning }), "to be running" } )
var ToBeDone Condition = func(wf *wfv1.Workflow) (bool, string) { toBeCompleted, _ := ToBeCompleted(wf) return toBeCompleted && wf.Labels[common.LabelKeyWorkflowArchivingStatus] != "Pending", "to be done" }
`ToBeDone` replaces `ToFinish` which also makes sure the workflow is both complete not pending archiving. This additional check is not needed for most use case, however in `AfterTest` we delete the workflow and this creates a lot of warning messages in the logs that are cause by misuse rather than actual problems.
type E2ESuite ¶
type E2ESuite struct { suite.Suite Config *config.Config Persistence *Persistence RestConfig *rest.Config KubeClient kubernetes.Interface // contains filtered or unexported fields }
func (*E2ESuite) BeforeTest ¶
func (*E2ESuite) CheckError ¶
func (*E2ESuite) DeleteResources ¶
func (s *E2ESuite) DeleteResources()
func (*E2ESuite) GetBasicAuthToken ¶
func (*E2ESuite) GetServiceAccountToken ¶
func (*E2ESuite) SetupSuite ¶
func (s *E2ESuite) SetupSuite()
func (*E2ESuite) TearDownSuite ¶
func (s *E2ESuite) TearDownSuite()
type Given ¶
type Given struct {
// contains filtered or unexported fields
}
func (*Given) ClusterWorkflowTemplate ¶
func (*Given) CronWorkflow ¶
func (*Given) Workflow ¶
creates a workflow based on the parameter, this may be:
1. A file name if it starts with "@" 2. Raw YAML.
func (*Given) WorkflowEventBinding ¶
func (*Given) WorkflowName ¶
func (*Given) WorkflowTemplate ¶
type Persistence ¶
type Persistence struct {
// contains filtered or unexported fields
}
func (*Persistence) Close ¶
func (s *Persistence) Close()
func (*Persistence) IsEnabled ¶
func (s *Persistence) IsEnabled() bool
type Then ¶
type Then struct {
// contains filtered or unexported fields
}
func (*Then) ExpectAuditEvents ¶
func (*Then) ExpectCron ¶
func (*Then) ExpectWorkflow ¶
func (t *Then) ExpectWorkflow(block func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus)) *Then
func (*Then) ExpectWorkflowDeleted ¶
func (*Then) ExpectWorkflowList ¶
func (t *Then) ExpectWorkflowList(listOptions metav1.ListOptions, block func(t *testing.T, wfList *wfv1.WorkflowList)) *Then
func (*Then) ExpectWorkflowName ¶
func (t *Then) ExpectWorkflowName(workflowName string, block func(t *testing.T, metadata *metav1.ObjectMeta, status *wfv1.WorkflowStatus)) *Then
func (*Then) ExpectWorkflowNode ¶
func (t *Then) ExpectWorkflowNode(selector func(status wfv1.NodeStatus) bool, f func(t *testing.T, status *wfv1.NodeStatus, pod *apiv1.Pod)) *Then
Check on a specific node in the workflow. If no node matches the selector, then the NodeStatus and Pod will be nil. If the pod does not exist (e.g. because it was deleted) then the Pod will be nil too.
type When ¶
type When struct {
// contains filtered or unexported fields
}
func (*When) CreateClusterWorkflowTemplates ¶
func (*When) CreateConfigMap ¶
func (*When) CreateCronWorkflow ¶
func (*When) CreateWorkflowEventBinding ¶
func (*When) CreateWorkflowTemplates ¶
func (*When) DeleteConfigMap ¶
func (*When) DeleteMemoryQuota ¶
func (*When) DeletePodsQuota ¶
func (*When) DeleteStorageQuota ¶
func (*When) DeleteWorkflow ¶
func (*When) MemoryQuota ¶
func (*When) StorageQuota ¶
func (*When) SubmitWorkflow ¶
func (*When) SubmitWorkflowsFromClusterWorkflowTemplates ¶
func (*When) SubmitWorkflowsFromCronWorkflows ¶
func (*When) SubmitWorkflowsFromWorkflowTemplates ¶
func (*When) WaitForWorkflow ¶
Wait for a workflow to meet a condition: Options: * `time.Duration` - change the timeout - 30s by default * `string` - either:
- the workflow's name (not spaces)
- or a new message (if it contain spaces) - default "to finish"
* `Condition` - a condition - `ToFinish` by default