diff options
author | Laria Carolin Chabowski <laria@laria.me> | 2017-06-25 21:49:04 +0200 |
---|---|---|
committer | Laria Carolin Chabowski <laria@laria.me> | 2017-06-25 21:49:04 +0200 |
commit | f98b4e4b8165497b64d28d3e54babd1a43ad46d6 (patch) | |
tree | 56f6a34122d46a210d975849c7c599adb924f820 /objects/object_file_test.go | |
parent | 1d21280ec755525c6158cd18d01ec4e9ca73d7a0 (diff) | |
download | petrific-f98b4e4b8165497b64d28d3e54babd1a43ad46d6.tar.gz petrific-f98b4e4b8165497b64d28d3e54babd1a43ad46d6.tar.bz2 petrific-f98b4e4b8165497b64d28d3e54babd1a43ad46d6.zip |
File and Blob objects
Diffstat (limited to 'objects/object_file_test.go')
-rw-r--r-- | objects/object_file_test.go | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/objects/object_file_test.go b/objects/object_file_test.go new file mode 100644 index 0000000..f1cb584 --- /dev/null +++ b/objects/object_file_test.go @@ -0,0 +1,98 @@ +package objects + +import ( + "bytes" + "testing" +) + +var ( + testFileObj = File{ + FileFragment{Blob: genId(0x11), Size: 10}, + FileFragment{Blob: genId(0x22), Size: 20}, + FileFragment{Blob: genId(0x33), Size: 30}, + FileFragment{Blob: genId(0x44), Size: 40}, + FileFragment{Blob: genId(0x55), Size: 50}, + } + + testFileSerialization = []byte("" + + "blob=sha3-256:1111111111111111111111111111111111111111111111111111111111111111&size=10\n" + + "blob=sha3-256:2222222222222222222222222222222222222222222222222222222222222222&size=20\n" + + "blob=sha3-256:3333333333333333333333333333333333333333333333333333333333333333&size=30\n" + + "blob=sha3-256:4444444444444444444444444444444444444444444444444444444444444444&size=40\n" + + "blob=sha3-256:5555555555555555555555555555555555555555555555555555555555555555&size=50\n") +) + +func genId(b byte) (oid ObjectId) { + oid.Algo = OIdAlgoSHA3_256 + oid.Sum = make([]byte, OIdAlgoSHA3_256.sumLength()) + for i := 0; i < OIdAlgoSHA3_256.sumLength(); i++ { + oid.Sum[i] = b + } + + return +} + +func TestSerializeFile(t *testing.T) { + have := testFileObj.Payload() + + if !bytes.Equal(have, testFileSerialization) { + t.Errorf("Unexpected serialization result: %s", have) + } +} + +func TestSerializeEmptyFile(t *testing.T) { + f := File{} + + have := f.Payload() + want := []byte{} + + if !bytes.Equal(have, want) { + t.Errorf("Unexpected serialization result: %s", have) + } +} + +func TestUnserializeFile(t *testing.T) { + have := File{} + err := have.FromPayload(testFileSerialization) + + if err != nil { + t.Fatalf("Unexpected error: %s", err) + } + + if !have.Equals(testFileObj) { + t.Errorf("Unexpeced unserialization result: %v", have) + } +} + +func TestUnserializeEmptyFile(t *testing.T) { + have := File{} + err := have.FromPayload([]byte{}) + + if err != nil { + t.Fatalf("Unexpected error: %s", err) + } + + if len(have) != 0 { + t.Errorf("Unexpeced unserialization result: %v", have) + } +} + +func TestUnserializeFailure(t *testing.T) { + subtests := []struct{ name, payload string }{ + {"missing blob", "size=100\n"}, + {"empty blob", "blob=&size=100"}, + {"invalid blob", "blob=foobar&size=100"}, // Variations of invalid IDs are tested elsewhere + {"missing size", "blob=sha3-256:0000000000000000000000000000000000000000000000000000000000000000\n"}, + {"empty size", "blob=sha3-256:0000000000000000000000000000000000000000000000000000000000000000&size=\n"}, + {"invalid size", "blob=sha3-256:0000000000000000000000000000000000000000000000000000000000000000&size=foobar\n"}, + {"no props", "foobar\n"}, + } + + for _, subtest := range subtests { + have := File{} + err := have.FromPayload([]byte(subtest.payload)) + if err == nil { + t.Errorf("Unexpected unserialization success: %v", have) + } + } +} |