2019-05-27 19:20:54 +00:00
package main
import (
2024-05-18 16:59:29 +00:00
"context"
2022-12-02 18:36:43 +00:00
"os"
2020-09-30 20:32:14 +00:00
"path/filepath"
2024-05-18 16:59:29 +00:00
"strings"
2019-05-27 19:20:54 +00:00
"testing"
2024-06-01 13:15:06 +00:00
"github.com/restic/restic/internal/errors"
2019-05-27 19:20:54 +00:00
rtest "github.com/restic/restic/internal/test"
)
func Test_PrintFunctionsRespectsGlobalStdout ( t * testing . T ) {
for _ , p := range [ ] func ( ) {
func ( ) { Println ( "message" ) } ,
func ( ) { Print ( "message\n" ) } ,
func ( ) { Printf ( "mes%s\n" , "sage" ) } ,
} {
2023-05-07 20:06:39 +00:00
buf , _ := withCaptureStdout ( func ( ) error {
p ( )
return nil
} )
2019-05-27 19:20:54 +00:00
rtest . Equals ( t , "message\n" , buf . String ( ) )
}
}
2020-09-30 20:32:14 +00:00
2024-06-01 13:15:06 +00:00
type errorReader struct { err error }
func ( r * errorReader ) Read ( [ ] byte ) ( int , error ) { return 0 , r . err }
func TestReadPassword ( t * testing . T ) {
want := errors . New ( "foo" )
_ , err := readPassword ( & errorReader { want } )
rtest . Assert ( t , errors . Is ( err , want ) , "wrong error %v" , err )
}
2020-09-30 20:32:14 +00:00
func TestReadRepo ( t * testing . T ) {
2023-05-18 15:44:56 +00:00
tempDir := rtest . TempDir ( t )
2020-09-30 20:32:14 +00:00
// test --repo option
var opts GlobalOptions
opts . Repo = tempDir
repo , err := ReadRepo ( opts )
rtest . OK ( t , err )
rtest . Equals ( t , tempDir , repo )
// test --repository-file option
foo := filepath . Join ( tempDir , "foo" )
2022-12-02 18:36:43 +00:00
err = os . WriteFile ( foo , [ ] byte ( tempDir + "\n" ) , 0666 )
2020-09-30 20:32:14 +00:00
rtest . OK ( t , err )
var opts2 GlobalOptions
opts2 . RepositoryFile = foo
repo , err = ReadRepo ( opts2 )
rtest . OK ( t , err )
rtest . Equals ( t , tempDir , repo )
var opts3 GlobalOptions
opts3 . RepositoryFile = foo + "-invalid"
2021-01-30 19:43:53 +00:00
_ , err = ReadRepo ( opts3 )
2020-09-30 20:32:14 +00:00
if err == nil {
t . Fatal ( "must not read repository path from invalid file path" )
}
}
2024-05-18 16:59:29 +00:00
func TestReadEmptyPassword ( t * testing . T ) {
opts := GlobalOptions { InsecureNoPassword : true }
password , err := ReadPassword ( context . TODO ( ) , opts , "test" )
rtest . OK ( t , err )
rtest . Equals ( t , "" , password , "got unexpected password" )
opts . password = "invalid"
_ , err = ReadPassword ( context . TODO ( ) , opts , "test" )
rtest . Assert ( t , strings . Contains ( err . Error ( ) , "must not be specified together with providing a password via a cli option or environment variable" ) , "unexpected error message, got %v" , err )
}