package pktline_test import ( "io" "io/ioutil" "os" "strings" "testing" "gopkg.in/src-d/go-git.v4/formats/packp/pktline" . "gopkg.in/check.v1" ) func Test(t *testing.T) { TestingT(t) } type SuitePktLine struct { } var _ = Suite(&SuitePktLine{}) func (s *SuitePktLine) TestNew(c *C) { for i, test := range [...]struct { input [][]byte expected []byte }{ { input: [][]byte{}, expected: []byte{}, }, { input: [][]byte{ []byte(nil), }, expected: []byte("0000"), }, { input: [][]byte{ []byte{}, }, expected: []byte("0000"), }, { input: [][]byte{ []byte(""), }, expected: []byte("0000"), }, { input: [][]byte{ []byte("hello\n"), }, expected: []byte("000ahello\n"), }, { input: [][]byte{ []byte("hello\n"), []byte("world!\n"), []byte(""), []byte("foo"), []byte(""), }, expected: []byte("000ahello\n000bworld!\n00000007foo0000"), }, { input: [][]byte{ []byte(strings.Repeat("a", pktline.MaxPayloadSize)), }, expected: []byte("fff0" + strings.Repeat("a", pktline.MaxPayloadSize)), }, } { r, err := pktline.New(test.input...) c.Assert(err, IsNil, Commentf("input %d = %v", i, test.input)) obtained, err := ioutil.ReadAll(r) c.Assert(err, IsNil, Commentf("input %d = %v", i, test.input)) c.Assert(obtained, DeepEquals, test.expected, Commentf("input %d = %v", i, test.input)) } } func (s *SuitePktLine) TestNewErrPayloadTooLong(c *C) { for _, input := range [...][][]byte{ [][]byte{ []byte(strings.Repeat("a", pktline.MaxPayloadSize+1)), }, [][]byte{ []byte("hello world!"), []byte(""), []byte(strings.Repeat("a", pktline.MaxPayloadSize+1)), }, [][]byte{ []byte("hello world!"), []byte(strings.Repeat("a", pktline.MaxPayloadSize+1)), []byte("foo"), }, } { _, err := pktline.New(input...) c.Assert(err, Equals, pktline.ErrPayloadTooLong, Commentf("%v\n", input)) } } func (s *SuitePktLine) TestNewFromStrings(c *C) { for _, test := range [...]struct { input []string expected []byte }{ { input: []string(nil), expected: []byte{}, }, { input: []string{}, expected: []byte{}, }, { input: []string{""}, expected: []byte("0000"), }, { input: []string{"hello\n"}, expected: []byte("000ahello\n"), }, { input: []string{"hello\n", "world!\n", "", "foo", ""}, expected: []byte("000ahello\n000bworld!\n00000007foo0000"), }, { input: []string{ strings.Repeat("a", pktline.MaxPayloadSize), }, expected: []byte("fff0" + strings.Repeat("a", pktline.MaxPayloadSize)), }, } { r, err := pktline.NewFromStrings(test.input...) c.Assert(err, IsNil) obtained, err := ioutil.ReadAll(r) c.Assert(err, IsNil) c.Assert(obtained, DeepEquals, test.expected, Commentf("input = %v\n", test.input)) } } func (s *SuitePktLine) TestNewFromStringsErrPayloadTooLong(c *C) { for _, input := range [...][]string{ []string{ strings.Repeat("a", pktline.MaxPayloadSize+1), }, []string{ "hello world!", "", strings.Repeat("a", pktline.MaxPayloadSize+1), }, []string{ "hello world!", strings.Repeat("a", pktline.MaxPayloadSize+1), "foo", }, } { _, err := pktline.NewFromStrings(input...) c.Assert(err, Equals, pktline.ErrPayloadTooLong, Commentf("%v\n", input)) } } func ExampleNew() { // These are the payloads we want to turn into pkt-lines, // the empty slice at the end will generate a flush-pkt. payloads := [][]byte{ []byte{'h', 'e', 'l', 'l', 'o', '\n'}, []byte{'w', 'o', 'r', 'l', 'd', '!', '\n'}, []byte{}, } // Create the pkt-lines, ignoring errors... pktlines, _ := pktline.New(payloads...) // Send the raw data to stdout, ignoring errors... _, _ = io.Copy(os.Stdout, pktlines) // Output: 000ahello // 000bworld! // 0000 } func ExampleNewFromStrings() { // These are the payloads we want to turn into pkt-lines, // the empty string at the end will generate a flush-pkt. payloads := []string{ "hello\n", "world!\n", "", } // Create the pkt-lines, ignoring errors... pktlines, _ := pktline.NewFromStrings(payloads...) // Send the raw data to stdout, ignoring errors... _, _ = io.Copy(os.Stdout, pktlines) // Output: 000ahello // 000bworld! // 0000 }