github.com/nektos/act@v0.2.63/pkg/container/docker_socket_test.go (about) 1 package container 2 3 import ( 4 "os" 5 "testing" 6 7 log "github.com/sirupsen/logrus" 8 assert "github.com/stretchr/testify/assert" 9 ) 10 11 func init() { 12 log.SetLevel(log.DebugLevel) 13 } 14 15 var originalCommonSocketLocations = CommonSocketLocations 16 17 func TestGetSocketAndHostWithSocket(t *testing.T) { 18 // Arrange 19 CommonSocketLocations = originalCommonSocketLocations 20 dockerHost := "unix:///my/docker/host.sock" 21 socketURI := "/path/to/my.socket" 22 os.Setenv("DOCKER_HOST", dockerHost) 23 24 // Act 25 ret, err := GetSocketAndHost(socketURI) 26 27 // Assert 28 assert.Nil(t, err) 29 assert.Equal(t, SocketAndHost{socketURI, dockerHost}, ret) 30 } 31 32 func TestGetSocketAndHostNoSocket(t *testing.T) { 33 // Arrange 34 dockerHost := "unix:///my/docker/host.sock" 35 os.Setenv("DOCKER_HOST", dockerHost) 36 37 // Act 38 ret, err := GetSocketAndHost("") 39 40 // Assert 41 assert.Nil(t, err) 42 assert.Equal(t, SocketAndHost{dockerHost, dockerHost}, ret) 43 } 44 45 func TestGetSocketAndHostOnlySocket(t *testing.T) { 46 // Arrange 47 socketURI := "/path/to/my.socket" 48 os.Unsetenv("DOCKER_HOST") 49 CommonSocketLocations = originalCommonSocketLocations 50 defaultSocket, defaultSocketFound := socketLocation() 51 52 // Act 53 ret, err := GetSocketAndHost(socketURI) 54 55 // Assert 56 assert.NoError(t, err, "Expected no error from GetSocketAndHost") 57 assert.Equal(t, true, defaultSocketFound, "Expected to find default socket") 58 assert.Equal(t, socketURI, ret.Socket, "Expected socket to match common location") 59 assert.Equal(t, defaultSocket, ret.Host, "Expected ret.Host to match default socket location") 60 } 61 62 func TestGetSocketAndHostDontMount(t *testing.T) { 63 // Arrange 64 CommonSocketLocations = originalCommonSocketLocations 65 dockerHost := "unix:///my/docker/host.sock" 66 os.Setenv("DOCKER_HOST", dockerHost) 67 68 // Act 69 ret, err := GetSocketAndHost("-") 70 71 // Assert 72 assert.Nil(t, err) 73 assert.Equal(t, SocketAndHost{"-", dockerHost}, ret) 74 } 75 76 func TestGetSocketAndHostNoHostNoSocket(t *testing.T) { 77 // Arrange 78 CommonSocketLocations = originalCommonSocketLocations 79 os.Unsetenv("DOCKER_HOST") 80 defaultSocket, found := socketLocation() 81 82 // Act 83 ret, err := GetSocketAndHost("") 84 85 // Assert 86 assert.Equal(t, true, found, "Expected a default socket to be found") 87 assert.Nil(t, err, "Expected no error from GetSocketAndHost") 88 assert.Equal(t, SocketAndHost{defaultSocket, defaultSocket}, ret, "Expected to match default socket location") 89 } 90 91 // Catch 92 // > Your code breaks setting DOCKER_HOST if shouldMount is false. 93 // > This happens if neither DOCKER_HOST nor --container-daemon-socket has a value, but socketLocation() returns a URI 94 func TestGetSocketAndHostNoHostNoSocketDefaultLocation(t *testing.T) { 95 // Arrange 96 mySocketFile, tmpErr := os.CreateTemp("", "act-*.sock") 97 mySocket := mySocketFile.Name() 98 unixSocket := "unix://" + mySocket 99 defer os.RemoveAll(mySocket) 100 assert.NoError(t, tmpErr) 101 os.Unsetenv("DOCKER_HOST") 102 103 CommonSocketLocations = []string{mySocket} 104 defaultSocket, found := socketLocation() 105 106 // Act 107 ret, err := GetSocketAndHost("") 108 109 // Assert 110 assert.Equal(t, unixSocket, defaultSocket, "Expected default socket to match common socket location") 111 assert.Equal(t, true, found, "Expected default socket to be found") 112 assert.Nil(t, err, "Expected no error from GetSocketAndHost") 113 assert.Equal(t, SocketAndHost{unixSocket, unixSocket}, ret, "Expected to match default socket location") 114 } 115 116 func TestGetSocketAndHostNoHostInvalidSocket(t *testing.T) { 117 // Arrange 118 os.Unsetenv("DOCKER_HOST") 119 mySocket := "/my/socket/path.sock" 120 CommonSocketLocations = []string{"/unusual", "/socket", "/location"} 121 defaultSocket, found := socketLocation() 122 123 // Act 124 ret, err := GetSocketAndHost(mySocket) 125 126 // Assert 127 assert.Equal(t, false, found, "Expected no default socket to be found") 128 assert.Equal(t, "", defaultSocket, "Expected no default socket to be found") 129 assert.Equal(t, SocketAndHost{}, ret, "Expected to match default socket location") 130 assert.Error(t, err, "Expected an error in invalid state") 131 } 132 133 func TestGetSocketAndHostOnlySocketValidButUnusualLocation(t *testing.T) { 134 // Arrange 135 socketURI := "unix:///path/to/my.socket" 136 CommonSocketLocations = []string{"/unusual", "/location"} 137 os.Unsetenv("DOCKER_HOST") 138 defaultSocket, found := socketLocation() 139 140 // Act 141 ret, err := GetSocketAndHost(socketURI) 142 143 // Assert 144 // Default socket locations 145 assert.Equal(t, "", defaultSocket, "Expect default socket location to be empty") 146 assert.Equal(t, false, found, "Expected no default socket to be found") 147 // Sane default 148 assert.Nil(t, err, "Expect no error from GetSocketAndHost") 149 assert.Equal(t, socketURI, ret.Host, "Expect host to default to unusual socket") 150 }