-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3294 from Achilleshiel/fix-copy-repofile
Add RepositoryFile2 Option for secondary repository
- Loading branch information
Showing
4 changed files
with
162 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
Enhancement: Add `--repository-file2` option to `init` and `copy` command | ||
|
||
The `init` and `copy` command can now be used with the `--repository-file2` | ||
option or the `$RESTIC_REPOSITORY_FILE2` environment variable. | ||
These to options are in addition to the `--repo2` flag and allow you to read | ||
the destination repository from a file. | ||
|
||
Using both `--repository-file` and `--repo2` options resulted in an error for | ||
the `copy` or `init` command. The handling of this combination of options has | ||
been fixed. A workaround for this issue is to only use `--repo` or `-r` and | ||
`--repo2` for `init` or `copy`. | ||
|
||
https://github.com/restic/restic/issues/3293 | ||
https://github.com/restic/restic/pull/3294 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
package main | ||
|
||
import ( | ||
"io/ioutil" | ||
"path/filepath" | ||
"testing" | ||
|
||
rtest "github.com/restic/restic/internal/test" | ||
) | ||
|
||
//TestFillSecondaryGlobalOpts tests valid and invalid data on fillSecondaryGlobalOpts-function | ||
func TestFillSecondaryGlobalOpts(t *testing.T) { | ||
//secondaryRepoTestCase defines a struct for test cases | ||
type secondaryRepoTestCase struct { | ||
Opts secondaryRepoOptions | ||
DstGOpts GlobalOptions | ||
} | ||
|
||
//validSecondaryRepoTestCases is a list with test cases that must pass | ||
var validSecondaryRepoTestCases = []secondaryRepoTestCase{ | ||
{ | ||
// Test if Repo and Password are parsed correctly. | ||
Opts: secondaryRepoOptions{ | ||
Repo: "backupDst", | ||
password: "secretDst", | ||
}, | ||
DstGOpts: GlobalOptions{ | ||
Repo: "backupDst", | ||
password: "secretDst", | ||
}, | ||
}, | ||
{ | ||
// Test if RepositoryFile and PasswordFile are parsed correctly. | ||
Opts: secondaryRepoOptions{ | ||
RepositoryFile: "backupDst", | ||
PasswordFile: "passwordFileDst", | ||
}, | ||
DstGOpts: GlobalOptions{ | ||
RepositoryFile: "backupDst", | ||
password: "secretDst", | ||
PasswordFile: "passwordFileDst", | ||
}, | ||
}, | ||
{ | ||
// Test if RepositoryFile and PasswordCommand are parsed correctly. | ||
Opts: secondaryRepoOptions{ | ||
RepositoryFile: "backupDst", | ||
PasswordCommand: "echo secretDst", | ||
}, | ||
DstGOpts: GlobalOptions{ | ||
RepositoryFile: "backupDst", | ||
password: "secretDst", | ||
PasswordCommand: "echo secretDst", | ||
}, | ||
}, | ||
} | ||
|
||
//invalidSecondaryRepoTestCases is a list with test cases that must fail | ||
var invalidSecondaryRepoTestCases = []secondaryRepoTestCase{ | ||
{ | ||
// Test must fail on no repo given. | ||
Opts: secondaryRepoOptions{}, | ||
}, | ||
{ | ||
// Test must fail as Repo and RepositoryFile are both given | ||
Opts: secondaryRepoOptions{ | ||
Repo: "backupDst", | ||
RepositoryFile: "backupDst", | ||
}, | ||
}, | ||
{ | ||
// Test must fail as PasswordFile and PasswordCommand are both given | ||
Opts: secondaryRepoOptions{ | ||
Repo: "backupDst", | ||
PasswordFile: "passwordFileDst", | ||
PasswordCommand: "notEmpty", | ||
}, | ||
}, | ||
{ | ||
// Test must fail as PasswordFile does not exist | ||
Opts: secondaryRepoOptions{ | ||
Repo: "backupDst", | ||
PasswordFile: "NonExistingFile", | ||
}, | ||
}, | ||
{ | ||
// Test must fail as PasswordCommand does not exist | ||
Opts: secondaryRepoOptions{ | ||
Repo: "backupDst", | ||
PasswordCommand: "notEmpty", | ||
}, | ||
}, | ||
{ | ||
// Test must fail as no password is given. | ||
Opts: secondaryRepoOptions{ | ||
Repo: "backupDst", | ||
}, | ||
}, | ||
} | ||
|
||
//gOpts defines the Global options used in the secondary repository tests | ||
var gOpts = GlobalOptions{ | ||
Repo: "backupSrc", | ||
RepositoryFile: "backupSrc", | ||
password: "secretSrc", | ||
PasswordFile: "passwordFileSrc", | ||
} | ||
|
||
//Create temp dir to create password file. | ||
dir, cleanup := rtest.TempDir(t) | ||
defer cleanup() | ||
|
||
cleanup = rtest.Chdir(t, dir) | ||
defer cleanup() | ||
|
||
//Create temporary password file | ||
err := ioutil.WriteFile(filepath.Join(dir, "passwordFileDst"), []byte("secretDst"), 0666) | ||
rtest.OK(t, err) | ||
|
||
// Test all valid cases | ||
for _, testCase := range validSecondaryRepoTestCases { | ||
DstGOpts, err := fillSecondaryGlobalOpts(testCase.Opts, gOpts, "destination") | ||
rtest.OK(t, err) | ||
rtest.Equals(t, DstGOpts, testCase.DstGOpts) | ||
} | ||
|
||
// Test all invalid cases | ||
for _, testCase := range invalidSecondaryRepoTestCases { | ||
_, err := fillSecondaryGlobalOpts(testCase.Opts, gOpts, "destination") | ||
rtest.Assert(t, err != nil, "Expected error, but function did not return an error") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters