repository: fix test setup race conditions
This commit is contained in:
parent
8155dbe711
commit
5e98f1e2eb
3 changed files with 25 additions and 16 deletions
|
@ -43,9 +43,9 @@ type Key struct {
|
|||
id restic.ID
|
||||
}
|
||||
|
||||
// Params tracks the parameters used for the KDF. If not set, it will be
|
||||
// params tracks the parameters used for the KDF. If not set, it will be
|
||||
// calibrated on the first run of AddKey().
|
||||
var Params *crypto.Params
|
||||
var params *crypto.Params
|
||||
|
||||
const (
|
||||
// KDFTimeout specifies the maximum runtime for the KDF.
|
||||
|
@ -196,13 +196,13 @@ func LoadKey(ctx context.Context, s *Repository, id restic.ID) (k *Key, err erro
|
|||
// AddKey adds a new key to an already existing repository.
|
||||
func AddKey(ctx context.Context, s *Repository, password, username, hostname string, template *crypto.Key) (*Key, error) {
|
||||
// make sure we have valid KDF parameters
|
||||
if Params == nil {
|
||||
if params == nil {
|
||||
p, err := crypto.Calibrate(KDFTimeout, KDFMemory)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "Calibrate")
|
||||
}
|
||||
|
||||
Params = &p
|
||||
params = &p
|
||||
debug.Log("calibrated KDF parameters are %v", p)
|
||||
}
|
||||
|
||||
|
@ -213,9 +213,9 @@ func AddKey(ctx context.Context, s *Repository, password, username, hostname str
|
|||
Hostname: hostname,
|
||||
|
||||
KDF: "scrypt",
|
||||
N: Params.N,
|
||||
R: Params.R,
|
||||
P: Params.P,
|
||||
N: params.N,
|
||||
R: params.R,
|
||||
P: params.P,
|
||||
}
|
||||
|
||||
if newkey.Hostname == "" {
|
||||
|
@ -237,7 +237,7 @@ func AddKey(ctx context.Context, s *Repository, password, username, hostname str
|
|||
}
|
||||
|
||||
// call KDF to derive user key
|
||||
newkey.user, err = crypto.KDF(*Params, newkey.Salt, password)
|
||||
newkey.user, err = crypto.KDF(*params, newkey.Salt, password)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/restic/restic/internal/backend"
|
||||
|
@ -21,14 +22,18 @@ type logger interface {
|
|||
Logf(format string, args ...interface{})
|
||||
}
|
||||
|
||||
var paramsOnce sync.Once
|
||||
|
||||
// TestUseLowSecurityKDFParameters configures low-security KDF parameters for testing.
|
||||
func TestUseLowSecurityKDFParameters(t logger) {
|
||||
t.Logf("using low-security KDF parameters for test")
|
||||
Params = &crypto.Params{
|
||||
N: 128,
|
||||
R: 1,
|
||||
P: 1,
|
||||
}
|
||||
paramsOnce.Do(func() {
|
||||
params = &crypto.Params{
|
||||
N: 128,
|
||||
R: 1,
|
||||
P: 1,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// TestBackend returns a fully configured in-memory backend.
|
||||
|
@ -36,7 +41,7 @@ func TestBackend(_ testing.TB) backend.Backend {
|
|||
return mem.New()
|
||||
}
|
||||
|
||||
const TestChunkerPol = chunker.Pol(0x3DA3358B4DC173)
|
||||
const testChunkerPol = chunker.Pol(0x3DA3358B4DC173)
|
||||
|
||||
// TestRepositoryWithBackend returns a repository initialized with a test
|
||||
// password. If be is nil, an in-memory backend is used. A constant polynomial
|
||||
|
@ -55,7 +60,7 @@ func TestRepositoryWithBackend(t testing.TB, be backend.Backend, version uint, o
|
|||
t.Fatalf("TestRepository(): new repo failed: %v", err)
|
||||
}
|
||||
|
||||
cfg := restic.TestCreateConfig(t, TestChunkerPol, version)
|
||||
cfg := restic.TestCreateConfig(t, testChunkerPol, version)
|
||||
err = repo.init(context.TODO(), test.TestPassword, cfg)
|
||||
if err != nil {
|
||||
t.Fatalf("TestRepository(): initialize repo failed: %v", err)
|
||||
|
|
|
@ -2,6 +2,7 @@ package restic
|
|||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/restic/restic/internal/errors"
|
||||
|
@ -67,12 +68,15 @@ func TestCreateConfig(t testing.TB, pol chunker.Pol, version uint) (cfg Config)
|
|||
}
|
||||
|
||||
var checkPolynomial = true
|
||||
var checkPolynomialOnce sync.Once
|
||||
|
||||
// TestDisableCheckPolynomial disables the check that the polynomial used for
|
||||
// the chunker.
|
||||
func TestDisableCheckPolynomial(t testing.TB) {
|
||||
t.Logf("disabling check of the chunker polynomial")
|
||||
checkPolynomial = false
|
||||
checkPolynomialOnce.Do(func() {
|
||||
checkPolynomial = false
|
||||
})
|
||||
}
|
||||
|
||||
// LoadConfig returns loads, checks and returns the config for a repository.
|
||||
|
|
Loading…
Add table
Reference in a new issue