| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | package sftp_test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 	"os" | 
					
						
							|  |  |  | 	"path/filepath" | 
					
						
							|  |  |  | 	"strings" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-23 14:21:03 +02:00
										 |  |  | 	"github.com/restic/restic/internal/backend/sftp" | 
					
						
							|  |  |  | 	"github.com/restic/restic/internal/backend/test" | 
					
						
							|  |  |  | 	"github.com/restic/restic/internal/errors" | 
					
						
							| 
									
										
										
										
											2017-10-02 15:06:39 +02:00
										 |  |  | 	rtest "github.com/restic/restic/internal/test" | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func findSFTPServerBinary() string { | 
					
						
							| 
									
										
										
										
											2017-10-02 15:06:39 +02:00
										 |  |  | 	for _, dir := range strings.Split(rtest.TestSFTPPath, ":") { | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | 		testpath := filepath.Join(dir, "sftp-server") | 
					
						
							|  |  |  | 		_, err := os.Stat(testpath) | 
					
						
							| 
									
										
										
										
											2022-06-13 20:35:37 +02:00
										 |  |  | 		if !errors.Is(err, os.ErrNotExist) { | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | 			return testpath | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return "" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var sftpServer = findSFTPServerBinary() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-21 21:06:56 +02:00
										 |  |  | func newTestSuite(t testing.TB) *test.Suite[sftp.Config] { | 
					
						
							|  |  |  | 	return &test.Suite[sftp.Config]{ | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | 		// NewConfig returns a config for a new temporary backend that will be used in tests. | 
					
						
							| 
									
										
										
										
											2023-04-21 21:35:34 +02:00
										 |  |  | 		NewConfig: func() (*sftp.Config, error) { | 
					
						
							| 
									
										
										
										
											2023-06-08 16:53:55 +02:00
										 |  |  | 			dir := rtest.TempDir(t) | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | 			t.Logf("create new backend at %v", dir) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-21 21:35:34 +02:00
										 |  |  | 			cfg := &sftp.Config{ | 
					
						
							| 
									
										
										
										
											2021-08-07 19:56:59 +02:00
										 |  |  | 				Path:        dir, | 
					
						
							|  |  |  | 				Command:     fmt.Sprintf("%q -e", sftpServer), | 
					
						
							|  |  |  | 				Connections: 5, | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			return cfg, nil | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-08 16:53:55 +02:00
										 |  |  | 		Factory: sftp.NewFactory(), | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-13 21:59:00 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestBackendSFTP(t *testing.T) { | 
					
						
							|  |  |  | 	defer func() { | 
					
						
							|  |  |  | 		if t.Skipped() { | 
					
						
							| 
									
										
										
										
											2017-10-02 15:06:39 +02:00
										 |  |  | 			rtest.SkipDisallowed(t, "restic/backend/sftp.TestBackendSFTP") | 
					
						
							| 
									
										
										
										
											2017-05-13 21:59:00 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	}() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if sftpServer == "" { | 
					
						
							|  |  |  | 		t.Skip("sftp server binary not found") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	newTestSuite(t).RunTests(t) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func BenchmarkBackendSFTP(t *testing.B) { | 
					
						
							|  |  |  | 	if sftpServer == "" { | 
					
						
							|  |  |  | 		t.Skip("sftp server binary not found") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-13 21:59:00 +02:00
										 |  |  | 	newTestSuite(t).RunBenchmarks(t) | 
					
						
							| 
									
										
										
										
											2017-05-01 22:55:09 +02:00
										 |  |  | } |