github.com/pkg/sftp@v1.13.6/sftp_test.go (about)

     1  package sftp
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"io"
     7  	"syscall"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/assert"
    11  )
    12  
    13  func TestErrFxCode(t *testing.T) {
    14  	table := []struct {
    15  		err error
    16  		fx  fxerr
    17  	}{
    18  		{err: errors.New("random error"), fx: ErrSSHFxFailure},
    19  		{err: EBADF, fx: ErrSSHFxFailure},
    20  		{err: syscall.ENOENT, fx: ErrSSHFxNoSuchFile},
    21  		{err: syscall.EPERM, fx: ErrSSHFxPermissionDenied},
    22  		{err: io.EOF, fx: ErrSSHFxEOF},
    23  		{err: fmt.Errorf("wrapped permission denied error: %w", ErrSSHFxPermissionDenied), fx: ErrSSHFxPermissionDenied},
    24  		{err: fmt.Errorf("wrapped op unsupported error: %w", ErrSSHFxOpUnsupported), fx: ErrSSHFxOpUnsupported},
    25  	}
    26  	for _, tt := range table {
    27  		statusErr := statusFromError(1, tt.err).StatusError
    28  		assert.Equal(t, statusErr.FxCode(), tt.fx)
    29  	}
    30  }
    31  
    32  func TestSupportedExtensions(t *testing.T) {
    33  	for _, supportedExtension := range supportedSFTPExtensions {
    34  		_, err := getSupportedExtensionByName(supportedExtension.Name)
    35  		assert.NoError(t, err)
    36  	}
    37  	_, err := getSupportedExtensionByName("invalid@example.com")
    38  	assert.Error(t, err)
    39  }
    40  
    41  func TestExtensions(t *testing.T) {
    42  	var supportedExtensions []string
    43  	for _, supportedExtension := range supportedSFTPExtensions {
    44  		supportedExtensions = append(supportedExtensions, supportedExtension.Name)
    45  	}
    46  
    47  	testSFTPExtensions := []string{"hardlink@openssh.com"}
    48  	expectedSFTPExtensions := []sshExtensionPair{
    49  		{"hardlink@openssh.com", "1"},
    50  	}
    51  	err := SetSFTPExtensions(testSFTPExtensions...)
    52  	assert.NoError(t, err)
    53  	assert.Equal(t, expectedSFTPExtensions, sftpExtensions)
    54  
    55  	invalidSFTPExtensions := []string{"invalid@example.com"}
    56  	err = SetSFTPExtensions(invalidSFTPExtensions...)
    57  	assert.Error(t, err)
    58  	assert.Equal(t, expectedSFTPExtensions, sftpExtensions)
    59  
    60  	emptySFTPExtensions := []string{}
    61  	expectedSFTPExtensions = []sshExtensionPair{}
    62  	err = SetSFTPExtensions(emptySFTPExtensions...)
    63  	assert.NoError(t, err)
    64  	assert.Equal(t, expectedSFTPExtensions, sftpExtensions)
    65  
    66  	// if we only have an invalid extension nothing will be modified.
    67  	invalidSFTPExtensions = []string{
    68  		"hardlink@openssh.com",
    69  		"invalid@example.com",
    70  	}
    71  	err = SetSFTPExtensions(invalidSFTPExtensions...)
    72  	assert.Error(t, err)
    73  	assert.Equal(t, expectedSFTPExtensions, sftpExtensions)
    74  
    75  	err = SetSFTPExtensions(supportedExtensions...)
    76  	assert.NoError(t, err)
    77  	assert.Equal(t, supportedSFTPExtensions, sftpExtensions)
    78  }