github.com/containers/podman/v4@v4.9.4/pkg/machine/define/vmfile_test.go (about)

     1  //go:build (amd64 && !windows) || (arm64 && !windows)
     2  // +build amd64,!windows arm64,!windows
     3  
     4  package define
     5  
     6  import (
     7  	"os"
     8  	"path/filepath"
     9  	"reflect"
    10  	"testing"
    11  
    12  	"github.com/containers/podman/v4/test/utils"
    13  )
    14  
    15  func TestMachineFile_GetPath(t *testing.T) {
    16  	path := "/var/tmp/podman/my.sock"
    17  	sym := "/tmp/podman/my.sock"
    18  	type fields struct {
    19  		Path    string
    20  		Symlink *string
    21  	}
    22  	tests := []struct {
    23  		name   string
    24  		fields fields
    25  		want   string
    26  	}{
    27  		{
    28  			name:   "Original path",
    29  			fields: fields{path, nil},
    30  			want:   path,
    31  		},
    32  		{
    33  			name: "Symlink over path",
    34  			fields: fields{
    35  				Path:    path,
    36  				Symlink: &sym,
    37  			},
    38  			want: sym,
    39  		},
    40  	}
    41  	for _, tt := range tests {
    42  		t.Run(tt.name, func(t *testing.T) {
    43  			m := &VMFile{
    44  				Path:    tt.fields.Path,    //nolint: scopelint
    45  				Symlink: tt.fields.Symlink, //nolint: scopelint
    46  			}
    47  			if got := m.GetPath(); got != tt.want { //nolint: scopelint
    48  				t.Errorf("GetPath() = %v, want %v", got, tt.want) //nolint: scopelint
    49  			}
    50  		})
    51  	}
    52  }
    53  
    54  func TestNewMachineFile(t *testing.T) {
    55  	empty := ""
    56  
    57  	homedir := t.TempDir()
    58  	longTemp := t.TempDir()
    59  	oldhome := os.Getenv("HOME")
    60  	os.Setenv("HOME", homedir) //nolint: tenv
    61  	defer os.Setenv("HOME", oldhome)
    62  
    63  	p := "/var/tmp/podman/my.sock"
    64  	longp := filepath.Join(longTemp, utils.RandomString(100), "my.sock")
    65  	err := os.MkdirAll(filepath.Dir(longp), 0755)
    66  	if err != nil {
    67  		panic(err)
    68  	}
    69  	f, err := os.Create(longp)
    70  	if err != nil {
    71  		panic(err)
    72  	}
    73  	_ = f.Close()
    74  	sym := "my.sock"
    75  	longSym := filepath.Join(homedir, ".podman", sym)
    76  
    77  	m := VMFile{
    78  		Path:    p,
    79  		Symlink: nil,
    80  	}
    81  	type args struct {
    82  		path    string
    83  		symlink *string
    84  	}
    85  	tests := []struct {
    86  		name    string
    87  		args    args
    88  		want    *VMFile
    89  		wantErr bool
    90  	}{
    91  		{
    92  			name:    "Good",
    93  			args:    args{path: p},
    94  			want:    &m,
    95  			wantErr: false,
    96  		},
    97  		{
    98  			name:    "Good with short symlink",
    99  			args:    args{p, &sym},
   100  			want:    &VMFile{Path: p},
   101  			wantErr: false,
   102  		},
   103  		{
   104  			name:    "Bad path name",
   105  			args:    args{empty, nil},
   106  			want:    nil,
   107  			wantErr: true,
   108  		},
   109  		{
   110  			name:    "Bad symlink name",
   111  			args:    args{p, &empty},
   112  			want:    nil,
   113  			wantErr: true,
   114  		},
   115  		{
   116  			name:    "Good with long symlink",
   117  			args:    args{longp, &sym},
   118  			want:    &VMFile{Path: longp, Symlink: &longSym},
   119  			wantErr: false,
   120  		},
   121  	}
   122  	for _, tt := range tests {
   123  		tt := tt
   124  		t.Run(tt.name, func(t *testing.T) {
   125  			got, err := NewMachineFile(tt.args.path, tt.args.symlink)
   126  			if (err != nil) != tt.wantErr {
   127  				t.Errorf("NewMachineFile() error = %v, wantErr %v", err, tt.wantErr)
   128  				return
   129  			}
   130  			if !reflect.DeepEqual(got, tt.want) {
   131  				t.Errorf("NewMachineFile() got = %v, want %v", got, tt.want)
   132  			}
   133  		})
   134  	}
   135  }