| 
									
										
										
										
											2019-10-07 07:49:46 +08:00
										 |  |  | package sftp | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2021-06-05 05:18:41 +08:00
										 |  |  | 	"errors" | 
					
						
							| 
									
										
										
										
											2022-12-26 00:21:42 +08:00
										 |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2019-10-07 07:49:46 +08:00
										 |  |  | 	"io" | 
					
						
							|  |  |  | 	"syscall" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestErrFxCode(t *testing.T) { | 
					
						
							|  |  |  | 	table := []struct { | 
					
						
							|  |  |  | 		err error | 
					
						
							|  |  |  | 		fx  fxerr | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{err: errors.New("random error"), fx: ErrSSHFxFailure}, | 
					
						
							| 
									
										
										
										
											2020-09-11 00:11:47 +08:00
										 |  |  | 		{err: EBADF, fx: ErrSSHFxFailure}, | 
					
						
							| 
									
										
										
										
											2019-10-07 07:49:46 +08:00
										 |  |  | 		{err: syscall.ENOENT, fx: ErrSSHFxNoSuchFile}, | 
					
						
							|  |  |  | 		{err: syscall.EPERM, fx: ErrSSHFxPermissionDenied}, | 
					
						
							|  |  |  | 		{err: io.EOF, fx: ErrSSHFxEOF}, | 
					
						
							| 
									
										
										
										
											2022-12-26 00:21:42 +08:00
										 |  |  | 		{err: fmt.Errorf("wrapped permission denied error: %w", ErrSSHFxPermissionDenied), fx: ErrSSHFxPermissionDenied}, | 
					
						
							|  |  |  | 		{err: fmt.Errorf("wrapped op unsupported error: %w", ErrSSHFxOpUnsupported), fx: ErrSSHFxOpUnsupported}, | 
					
						
							| 
									
										
										
										
											2019-10-07 07:49:46 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	for _, tt := range table { | 
					
						
							| 
									
										
										
										
											2021-02-22 20:00:27 +08:00
										 |  |  | 		statusErr := statusFromError(1, tt.err).StatusError | 
					
						
							| 
									
										
										
										
											2019-10-07 07:49:46 +08:00
										 |  |  | 		assert.Equal(t, statusErr.FxCode(), tt.fx) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-11-12 01:04:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestSupportedExtensions(t *testing.T) { | 
					
						
							|  |  |  | 	for _, supportedExtension := range supportedSFTPExtensions { | 
					
						
							|  |  |  | 		_, err := getSupportedExtensionByName(supportedExtension.Name) | 
					
						
							|  |  |  | 		assert.NoError(t, err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	_, err := getSupportedExtensionByName("invalid@example.com") | 
					
						
							|  |  |  | 	assert.Error(t, err) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestExtensions(t *testing.T) { | 
					
						
							|  |  |  | 	var supportedExtensions []string | 
					
						
							|  |  |  | 	for _, supportedExtension := range supportedSFTPExtensions { | 
					
						
							|  |  |  | 		supportedExtensions = append(supportedExtensions, supportedExtension.Name) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	testSFTPExtensions := []string{"hardlink@openssh.com"} | 
					
						
							|  |  |  | 	expectedSFTPExtensions := []sshExtensionPair{ | 
					
						
							|  |  |  | 		{"hardlink@openssh.com", "1"}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	err := SetSFTPExtensions(testSFTPExtensions...) | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, expectedSFTPExtensions, sftpExtensions) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	invalidSFTPExtensions := []string{"invalid@example.com"} | 
					
						
							|  |  |  | 	err = SetSFTPExtensions(invalidSFTPExtensions...) | 
					
						
							|  |  |  | 	assert.Error(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, expectedSFTPExtensions, sftpExtensions) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	emptySFTPExtensions := []string{} | 
					
						
							|  |  |  | 	expectedSFTPExtensions = []sshExtensionPair{} | 
					
						
							|  |  |  | 	err = SetSFTPExtensions(emptySFTPExtensions...) | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, expectedSFTPExtensions, sftpExtensions) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// if we only have an invalid extension nothing will be modified.
 | 
					
						
							|  |  |  | 	invalidSFTPExtensions = []string{ | 
					
						
							|  |  |  | 		"hardlink@openssh.com", | 
					
						
							|  |  |  | 		"invalid@example.com", | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	err = SetSFTPExtensions(invalidSFTPExtensions...) | 
					
						
							|  |  |  | 	assert.Error(t, err) | 
					
						
							|  |  |  | 	assert.Equal(t, expectedSFTPExtensions, sftpExtensions) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	err = SetSFTPExtensions(supportedExtensions...) | 
					
						
							| 
									
										
										
										
											2021-08-21 03:27:27 +08:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2019-11-12 01:04:56 +08:00
										 |  |  | 	assert.Equal(t, supportedSFTPExtensions, sftpExtensions) | 
					
						
							|  |  |  | } |