package podman import ( "os" "reflect" "testing" "time" corev1 "k8s.io/api/core/v1" ) func TestPodmanCli_PodLs(t *testing.T) { type fields struct { podmanCmd string podmanCmdInitTimeout time.Duration containerRunGlobalExtraArgs []string containerRunExtraArgs []string } tests := []struct { name string fields fields populateFS func() want map[string]bool wantErr bool }{ { name: "command fails", fields: fields{ podmanCmd: "false", }, wantErr: true, }, { name: "command works, returns nothing", fields: fields{ podmanCmd: "true", }, wantErr: false, want: map[string]bool{}, }, { name: "command works, returns pods", fields: fields{ podmanCmd: "./podman.fake.sh", }, populateFS: func() { script := []byte(`#!/bin/sh case "$*" in "pod list --format {{.Name}} --noheading") echo name1 echo name2 echo name3 ;; esac`) err := os.WriteFile("podman.fake.sh", script, 0755) if err != nil { t.Fatal(err) } }, wantErr: false, want: map[string]bool{ "name1": true, "name2": true, "name3": true, }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if tt.populateFS != nil { originWd, err := os.Getwd() if err != nil { t.Fatal(err) } defer func() { _ = os.Chdir(originWd) }() cwd := t.TempDir() err = os.Chdir(cwd) if err != nil { t.Fatal(err) } tt.populateFS() } o := &PodmanCli{ podmanCmd: tt.fields.podmanCmd, podmanCmdInitTimeout: tt.fields.podmanCmdInitTimeout, containerRunGlobalExtraArgs: tt.fields.containerRunGlobalExtraArgs, containerRunExtraArgs: tt.fields.containerRunExtraArgs, } got, err := o.PodLs() if (err != nil) != tt.wantErr { t.Errorf("PodmanCli.PodLs() error = %v, wantErr %v", err, tt.wantErr) return } if !reflect.DeepEqual(got, tt.want) { t.Errorf("PodmanCli.PodLs() = %v, want %v", got, tt.want) } }) } } func TestPodmanCli_KubeGenerate(t *testing.T) { type fields struct { podmanCmd string podmanCmdInitTimeout time.Duration containerRunGlobalExtraArgs []string containerRunExtraArgs []string } type args struct { name string } tests := []struct { name string fields fields populateFS func() args args checkResult func(*corev1.Pod) wantErr bool }{ { name: "pod not found", args: args{ name: "pod-not-found", }, fields: fields{ podmanCmd: "./podman.fake.sh", }, populateFS: func() { script := []byte(`#!/bin/sh case "$*" in "generate kube pod-not-found") exit 125 ;; esac`) err := os.WriteFile("podman.fake.sh", script, 0755) if err != nil { t.Fatal(err) } }, wantErr: true, }, { name: "command works, returns pod", args: args{ name: "my-pod", }, fields: fields{ podmanCmd: "./podman.fake.sh", }, populateFS: func() { script := []byte(`#!/bin/sh case "$*" in "generate kube my-pod") cat <