diff options
Diffstat (limited to 'metadata/config_test.go')
| -rw-r--r-- | metadata/config_test.go | 76 |
1 files changed, 64 insertions, 12 deletions
diff --git a/metadata/config_test.go b/metadata/config_test.go index 95afa04..3048757 100644 --- a/metadata/config_test.go +++ b/metadata/config_test.go @@ -21,19 +21,21 @@ package metadata import ( "bytes" - "reflect" + "encoding/json" "testing" + + "google.golang.org/protobuf/proto" ) var testConfig = &Config{ Source: SourceType_custom_passphrase, HashCosts: &HashingCosts{ - Time: 10, - Memory: 1 << 12, - Parallelism: 8, + Time: 10, + Memory: 1 << 12, + Parallelism: 8, + TruncationFixed: true, }, - Compatibility: "", - Options: DefaultOptions, + Options: DefaultOptions, } var testConfigString = `{ @@ -41,17 +43,29 @@ var testConfigString = `{ "hash_costs": { "time": "10", "memory": "4096", - "parallelism": "8" + "parallelism": "8", + "truncation_fixed": true }, - "compatibility": "", "options": { "padding": "32", "contents": "AES_256_XTS", - "filenames": "AES_256_CTS" - } + "filenames": "AES_256_CTS", + "policy_version": "1" + }, + "use_fs_keyring_for_v1_policies": false, + "allow_cross_user_metadata": false } ` +// Used for JSON string comparison while ignoring whitespace +func compact(t testing.TB, s string) string { + var b bytes.Buffer + if err := json.Compact(&b, []byte(s)); err != nil { + t.Fatalf("failed to compact json: %v", err) + } + return b.String() +} + // Makes sure that writing a config and reading it back gives the same thing. func TestWrite(t *testing.T) { var b bytes.Buffer @@ -60,7 +74,7 @@ func TestWrite(t *testing.T) { t.Fatal(err) } t.Logf("json encoded config:\n%s", b.String()) - if b.String() != testConfigString { + if compact(t, b.String()) != compact(t, testConfigString) { t.Errorf("did not match: %s", testConfigString) } } @@ -72,7 +86,45 @@ func TestRead(t *testing.T) { t.Fatal(err) } t.Logf("decoded config:\n%s", cfg) - if !reflect.DeepEqual(cfg, testConfig) { + if !proto.Equal(cfg, testConfig) { t.Errorf("did not match: %s", testConfig) } } + +// Makes sure we can parse a legacy config file that doesn't have the fields +// that were added later and that has the removed "compatibility" field. +func TestOptionalFields(t *testing.T) { + contents := `{ + "source": "custom_passphrase", + "hash_costs": { + "time": "10", + "memory": "4096", + "parallelism": "8" + }, + "compatibility": "legacy", + "options": { + "padding": "32", + "contents": "AES_256_XTS", + "filenames": "AES_256_CTS" + } + } + ` + buf := bytes.NewBufferString(contents) + cfg, err := ReadConfig(buf) + if err != nil { + t.Fatal(err) + } + if cfg.GetUseFsKeyringForV1Policies() { + t.Error("use_fs_keyring_for_v1_policies should be false, but was true") + } + if cfg.Options.PolicyVersion != 0 { + t.Errorf("policy version should be 0, but was %d", cfg.Options.PolicyVersion) + } + if err = cfg.CheckValidity(); err != nil { + t.Error(err) + } + // CheckValidity() should change an unset policy version to 1. + if cfg.Options.PolicyVersion != 1 { + t.Errorf("policy version should be 1 now, but was %d", cfg.Options.PolicyVersion) + } +} |