| 535 | } |
| 536 | |
| 537 | func (s *SuiteCommit) TestDecodeRequiresTreeFirst(c *C) { |
| 538 | const ( |
| 539 | validTree = "eba74343e2f15d62adedfd8c883ee0262b5c8021" |
| 540 | validParent = "35e85108805c84807bc66a02d91535e1e24b38b9" |
| 541 | validIdent = "Foo <foo@example.local> 1427802494 +0200" |
| 542 | ) |
| 543 | |
| 544 | cases := []struct { |
| 545 | name string |
| 546 | raw string |
| 547 | }{ |
| 548 | { |
| 549 | name: "missing tree", |
| 550 | raw: "author " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 551 | }, |
| 552 | { |
| 553 | name: "parent before tree", |
| 554 | raw: "parent " + validParent + "\ntree " + validTree + "\nauthor " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 555 | }, |
| 556 | { |
| 557 | name: "extra header before tree", |
| 558 | raw: "x-extra hi\ntree " + validTree + "\nauthor " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 559 | }, |
| 560 | { |
| 561 | name: "empty", |
| 562 | raw: "", |
| 563 | }, |
| 564 | { |
| 565 | name: "non-hex tree value", |
| 566 | raw: "tree zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\nauthor " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 567 | }, |
| 568 | { |
| 569 | name: "tree value too short", |
| 570 | raw: "tree abcd\nauthor " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 571 | }, |
| 572 | { |
| 573 | name: "tree value too long", |
| 574 | raw: "tree " + validTree + "00\nauthor " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 575 | }, |
| 576 | { |
| 577 | name: "tree value missing", |
| 578 | raw: "tree\nauthor " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 579 | }, |
| 580 | { |
| 581 | name: "non-hex parent value", |
| 582 | raw: "tree " + validTree + "\nparent zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\nauthor " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 583 | }, |
| 584 | { |
| 585 | name: "parent value too short", |
| 586 | raw: "tree " + validTree + "\nparent abcd\nauthor " + validIdent + "\ncommitter " + validIdent + "\n\nmsg\n", |
| 587 | }, |
| 588 | } |
| 589 | |
| 590 | for _, tc := range cases { |
| 591 | c.Log(tc.name) |
| 592 | obj := &plumbing.MemoryObject{} |
| 593 | obj.SetType(plumbing.CommitObject) |
| 594 | _, err := obj.Write([]byte(tc.raw)) |