aboutsummaryrefslogtreecommitdiff
path: root/metadata/config_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'metadata/config_test.go')
-rw-r--r--metadata/config_test.go76
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)
+ }
+}