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  }