Skip to content

Commit

Permalink
MarshalBinary/UnmarshalBinary test
Browse files Browse the repository at this point in the history
  • Loading branch information
BenLubar committed Feb 24, 2017
1 parent 8e960ae commit edb2c31
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 14 deletions.
22 changes: 14 additions & 8 deletions binary.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ const (
)

func (n *Node) MarshalBinary() ([]byte, error) {
if n == nil {
return nil, nil
}

var buf bytes.Buffer

if err := n.writeAsBinary(&buf); err != nil {
Expand Down Expand Up @@ -106,26 +110,25 @@ func (n *Node) writeAsBinary(w io.Writer) error {
return err
}
}
if n != nil {
if _, err := w.Write([]byte{ptNullMarker}); err != nil {
return err
}
if _, err := w.Write([]byte{ptNullMarker}); err != nil {
return err
}
return nil
}

func (n *Node) UnmarshalBinary(b []byte) error {
*n = Node{}
return n.readAsBinary(bufio.NewReader(bytes.NewReader(b)))
return n.readAsBinary(bufio.NewReader(bytes.NewReader(b)), nil)
}

func (n *Node) readAsBinary(r *bufio.Reader) error {
func (n *Node) readAsBinary(r *bufio.Reader, parent *Node) error {
packType, err := r.ReadByte()
if err != nil {
return err
}

for c := n; packType != ptNullMarker; {
c.parent = parent
name, err := r.ReadString(0)
if err != nil {
return err
Expand All @@ -136,9 +139,13 @@ func (n *Node) readAsBinary(r *bufio.Reader) error {
case ptNone:
var sub Node
c.Append(&sub)
if err := sub.readAsBinary(r); err != nil {
sub.parent = nil
if err := sub.readAsBinary(r, c); err != nil {
return err
}
if sub.parent == nil {
c.child = nil
}
case ptString:
v, err := r.ReadString(0)
if err != nil {
Expand Down Expand Up @@ -201,7 +208,6 @@ func (n *Node) readAsBinary(r *bufio.Reader) error {
}

var peer Node
peer.parent = c.parent
c.next = &peer
peer.prev = c
c = &peer
Expand Down
59 changes: 59 additions & 0 deletions binary_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package vdf_test

import (
"bytes"
"encoding/hex"
"io/ioutil"
"os"
"os/exec"
"testing"

"github.com/BenLubar/vdf"
)

func TestBinaryReEncode(t *testing.T) {
in, err := ioutil.ReadFile("testdata/UserGameStatsSchema_630.bin")
if err != nil {
t.Fatal(err)
}

var n vdf.Node
err = n.UnmarshalBinary(in)
if err != nil {
t.Fatal(err)
}

out, err := n.MarshalBinary()
if err != nil {
t.Fatal(err)
}

if bytes.Equal(in, out) {
return
}

err = ioutil.WriteFile("test_in", []byte(hex.Dump(in)), 0644)
if err != nil {
panic(err)
}
defer os.Remove("test_in")
err = ioutil.WriteFile("test_out", []byte(hex.Dump(out)), 0644)
if err != nil {
panic(err)
}
defer os.Remove("test_out")

txt, err := n.MarshalText()
if err != nil {
panic(err)
}
t.Log(string(txt))

t.Error("Byte slices differ!")
cmd := exec.Command("diff", "-u", "test_in", "test_out")
cmd.Stdout = os.Stdout
err = cmd.Run()
if err != nil {
panic(err)
}
}
16 changes: 10 additions & 6 deletions interface_test.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package vdf
package vdf_test

import "encoding"
import (
"encoding"

var _ encoding.TextMarshaler = (*Node)(nil)
var _ encoding.TextUnmarshaler = (*Node)(nil)
var _ encoding.BinaryMarshaler = (*Node)(nil)
var _ encoding.BinaryUnmarshaler = (*Node)(nil)
"github.com/BenLubar/vdf"
)

var _ encoding.TextMarshaler = (*vdf.Node)(nil)
var _ encoding.TextUnmarshaler = (*vdf.Node)(nil)
var _ encoding.BinaryMarshaler = (*vdf.Node)(nil)
var _ encoding.BinaryUnmarshaler = (*vdf.Node)(nil)
Binary file added testdata/UserGameStatsSchema_630.bin
Binary file not shown.

0 comments on commit edb2c31

Please sign in to comment.