Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(260)

Side by Side Diff: go/src/infra/appengine/test-results/model/aggregate_result_test.go

Issue 2231393002: test-results: Add merge and trim methods (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: tests: remove unecessary Trim calls Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 package model 1 package model
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
5 "encoding/json" 5 "encoding/json"
6 "io/ioutil" 6 "io/ioutil"
7 "path/filepath" 7 "path/filepath"
8 "testing" 8 "testing"
9 9
10 . "github.com/smartystreets/goconvey/convey" 10 . "github.com/smartystreets/goconvey/convey"
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 So(err, ShouldBeNil) 406 So(err, ShouldBeNil)
407 407
408 So(json.Unmarshal(b, &actual), S houldBeNil) 408 So(json.Unmarshal(b, &actual), S houldBeNil)
409 So(actual, ShouldResemble, t) 409 So(actual, ShouldResemble, t)
410 }) 410 })
411 }) 411 })
412 }) 412 })
413 }) 413 })
414 }) 414 })
415 } 415 }
416
417 func TestMerge(t *testing.T) {
418 t.Parallel()
419
420 Convey("Merge", t, func() {
421 Convey("AggregateTestLeaf", func() {
422 leaf := &AggregateTestLeaf{
423 Bugs: []string{"crbug.com/baz"},
424 Expected: []string{"FAIL"},
425 Results: []ResultSummary{{2, "P"}, {30, "F"}},
426 Runtimes: []RuntimeSummary{{1, 500}, {4, 750}, { 1, 250}},
427 }
428 x := &AggregateTestLeaf{
429 Bugs: []string{"crbug.com/foo", "crbug.com/b ar"},
430 Results: []ResultSummary{{1, "P"}, {42, "X"}},
431 Runtimes: []RuntimeSummary{{2, 5000}, {4, 5000}, {8, 6000}},
432 }
433
434 Convey("Use x.Bugs, x.Expected", func() {
435 x.Expected = []string{"FAIL PASS"}
436 So(leaf.Merge(x), ShouldBeNil)
437 So(leaf.Bugs, ShouldResemble, x.Bugs)
438 So(leaf.Expected, ShouldResemble, x.Expected)
439 })
440
441 Convey(`Do not use x.Expected if == "PASS"`, func() {
442 x.Expected = []string{"PASS"}
443 So(leaf.Merge(x), ShouldBeNil)
444 So(leaf.Bugs, ShouldResemble, x.Bugs)
445 So(leaf.Expected, ShouldResemble, []string{"FAIL "})
446 })
447
448 Convey("Merge matching Results", func() {
449 So(leaf.Merge(x), ShouldBeNil)
450 So(leaf.Results, ShouldResemble, []ResultSummary {
451 {42, "X"},
452 {3, "P"},
453 {30, "F"},
454 })
455 })
456
457 Convey("Merge matching Runtimes", func() {
458 So(leaf.Merge(x), ShouldBeNil)
459 So(leaf.Runtimes, ShouldResemble, []RuntimeSumma ry{
460 {8, 6000},
461 {6, 5000},
462 {1, 500},
463 {4, 750},
464 {1, 250},
465 })
466 })
467 })
468
469 Convey("AggregateTest", func() {
470 Convey("Join all AggregateTest multi-level", func() {
471 at := AggregateTest{
472 "foo": &AggregateTestLeaf{
473 Results: []ResultSummary{{10, " P"}},
474 Runtimes: []RuntimeSummary{{1, 2 }},
475 },
476 "qux": AggregateTest{
477 "experiment": &AggregateTestLeaf {
478 Results: []ResultSummar y{{20, "A"}},
479 Runtimes: []RuntimeSumma ry{{3, 5}},
480 },
481 "paper": &AggregateTestLeaf{
482 Results: []ResultSummar y{{1, "B"}},
483 Runtimes: []RuntimeSumma ry{{30, 10}},
484 },
485 },
486 }
487 x := AggregateTest{
488 "bar": &AggregateTestLeaf{
489 Results: []ResultSummary{{20, " F"}},
490 Runtimes: []RuntimeSummary{{3, 0 }},
491 },
492 "qux": AggregateTest{
493 "paper": &AggregateTestLeaf{
494 Results: []ResultSummar y{{6, "F"}},
495 Runtimes: []RuntimeSumma ry{{2, 3}},
496 },
497 "pencil": &AggregateTestLeaf{
498 Results: []ResultSummar y{{75, "Z"}},
499 Runtimes: []RuntimeSumma ry{{15, 60}},
500 },
501 },
502 }
503 expected := AggregateTest{
504 "foo": &AggregateTestLeaf{
505 Results: []ResultSummary{{1, "N "}, {10, "P"}},
506 Runtimes: []RuntimeSummary{{1, 0 }, {1, 2}},
507 },
508 "bar": &AggregateTestLeaf{
509 Results: []ResultSummary{{20, " F"}},
510 Runtimes: []RuntimeSummary{{3, 0 }},
511 },
512 "qux": AggregateTest{
513 "experiment": &AggregateTestLeaf {
514 Results: []ResultSummar y{{1, "N"}, {20, "A"}},
515 Runtimes: []RuntimeSumma ry{{1, 0}, {3, 5}},
516 },
517 "paper": &AggregateTestLeaf{
518 Results: []ResultSummar y{{6, "F"}, {1, "B"}},
519 Runtimes: []RuntimeSumma ry{{2, 3}, {30, 10}},
520 },
521 "pencil": &AggregateTestLeaf{
522 Results: []ResultSummar y{{75, "Z"}},
523 Runtimes: []RuntimeSumma ry{{15, 60}},
524 },
525 },
526 }
527 So(at.Merge(x), ShouldBeNil)
528 So(at, ShouldResemble, expected)
529 })
530
531 Convey("Mismatched type", func() {
532 Convey("Merge AggregateTestLeaf into AggregateTe st", func() {
533 at := AggregateTest{
534 "foo": AggregateTest{
535 "bar": &AggregateTestLea f{
536 Results: []Resu ltSummary{{10, "P"}},
537 Runtimes: []Runt imeSummary{{1, 2}},
538 },
539 },
540 }
541 x := AggregateTest{
542 "foo": AggregateTest{
543 "bar": AggregateTest{
544 "baz": &Aggregat eTestLeaf{
545 Results: []ResultSummary{{20, "F"}},
546 Runtimes : []RuntimeSummary{{3, 0}},
547 },
548 },
549 },
550 }
551 err := at.Merge(x)
552 So(err, ShouldNotBeNil)
553 So(err.Error(), ShouldContainSubstring, " *AggregateTestLeaf")
554 })
555
556 Convey("Merge AggregateTest into AggregateTestLe af", func() {
557 at := AggregateTest{
558 "foo": AggregateTest{
559 "bar": &AggregateTestLea f{
560 Results: []Resu ltSummary{{10, "P"}},
561 Runtimes: []Runt imeSummary{{1, 2}},
562 },
563 },
564 }
565 x := AggregateTest{
566 "foo": &AggregateTestLeaf{
567 Results: []ResultSummar y{{20, "F"}},
568 Runtimes: []RuntimeSumma ry{{3, 0}},
569 },
570 }
571 err := at.Merge(x)
572 So(err, ShouldNotBeNil)
573 So(err.Error(), ShouldContainSubstring, " AggregateTest")
574 })
575 })
576
577 Convey("Merge (all together)", func() {
578 at := AggregateTest{
579 "presentation": AggregateTest{
580 "presentation": &AggregateTestLe af{
581 Results: []ResultSummar y{{10, "P"}},
582 Runtimes: []RuntimeSumma ry{{1, 2}},
583 },
584 "readme": &AggregateTestLeaf{
585 Results: []ResultSummar y{{20, "Q"}},
586 Runtimes: []RuntimeSumma ry{{3, 4}},
587 },
588 },
589 "io": AggregateTest{
590 "serial": &AggregateTestLeaf{
591 Results: []ResultSummar y{{40, "S"}},
592 Runtimes: []RuntimeSumma ry{{8, 9}},
593 },
594 },
595 "hello": AggregateTest{
596 "world": AggregateTest{
597 "main": &AggregateTestLe af{
598 Results: []Resu ltSummary{{50, "T"}},
599 Runtimes: []Runt imeSummary{{10, 11}},
600 },
601 },
602 },
603 }
604 x := AggregateTest{
605 "presentation": AggregateTest{
606 "presentation": &AggregateTestLe af{
607 Results: []ResultSummar y{{10, "A"}},
608 Runtimes: []RuntimeSumma ry{{1, 2}},
609 },
610 "readme": &AggregateTestLeaf{
611 Results: []ResultSummar y{{10, "B"}},
612 Runtimes: []RuntimeSumma ry{{1, 2}},
613 },
614 },
615 "io": AggregateTest{
616 "analog": &AggregateTestLeaf{
617 Results: []ResultSummar y{{10, "D"}},
618 Runtimes: []RuntimeSumma ry{{3, 0}},
619 },
620 "parallel": AggregateTest{
621 "duplex": &AggregateTest Leaf{
622 Results: []Resu ltSummary{{10, "E"}},
623 Runtimes: []Runt imeSummary{{3, 5}},
624 },
625 "simplex": &AggregateTes tLeaf{
626 Results: []Resu ltSummary{{60, "H"}},
627 Runtimes: []Runt imeSummary{{30, 50}},
628 },
629 },
630 },
631 "cool": AggregateTest{
632 "world": AggregateTest{
633 "main": &AggregateTestLe af{
634 Results: []Resu ltSummary{{10, "F"}},
635 Runtimes: []Runt imeSummary{{3, 6}},
636 },
637 },
638 },
639 }
640 expected := AggregateTest{
641 "presentation": AggregateTest{
642 "presentation": &AggregateTestLe af{
643 Results: []ResultSummar y{{10, "A"}, {10, "P"}},
644 Runtimes: []RuntimeSumma ry{{2, 2}},
645 },
646 "readme": &AggregateTestLeaf{
647 Results: []ResultSummar y{{10, "B"}, {20, "Q"}},
648 Runtimes: []RuntimeSumma ry{{1, 2}, {3, 4}},
649 },
650 },
651 "io": AggregateTest{
652 "serial": &AggregateTestLeaf{
653 Results: []ResultSummar y{{1, "N"}, {40, "S"}},
654 Runtimes: []RuntimeSumma ry{{1, 0}, {8, 9}},
655 },
656 "analog": &AggregateTestLeaf{
657 Results: []ResultSummar y{{10, "D"}},
658 Runtimes: []RuntimeSumma ry{{3, 0}},
659 },
660 "parallel": AggregateTest{
661 "duplex": &AggregateTest Leaf{
662 Results: []Resu ltSummary{{10, "E"}},
663 Runtimes: []Runt imeSummary{{3, 5}},
664 },
665 "simplex": &AggregateTes tLeaf{
666 Results: []Resu ltSummary{{60, "H"}},
667 Runtimes: []Runt imeSummary{{30, 50}},
668 },
669 },
670 },
671 "hello": AggregateTest{
672 "world": AggregateTest{
673 "main": &AggregateTestLe af{
674 Results: []Resu ltSummary{{1, "N"}, {50, "T"}},
675 Runtimes: []Runt imeSummary{{1, 0}, {10, 11}},
676 },
677 },
678 },
679 "cool": AggregateTest{
680 "world": AggregateTest{
681 "main": &AggregateTestLe af{
682 Results: []Resu ltSummary{{10, "F"}},
683 Runtimes: []Runt imeSummary{{3, 6}},
684 },
685 },
686 },
687 }
688 So(at.Merge(x), ShouldBeNil)
689 So(at, ShouldResemble, expected)
690 })
691 })
692
693 Convey("AggregateResult", func() {
694 Convey("Basic merge with same test names", func() {
695 ag := &AggregateResult{
696 Version: ResultsVersion,
697 Builder: "foo_builder",
698 BuilderInfo: &BuilderInfo{
699 SecondsEpoch: []int64{1, 2},
700 BlinkRevs: []Number{3, 4},
701 BuildNumbers: []Number{5, 6},
702 ChromeRevs: []string{"a", "1"} ,
703 Tests: AggregateTest{
704 "foo": &AggregateTestLea f{
705 Results: []Resu ltSummary{{1, "A"}, {3, "B"}},
706 Runtimes: []Runt imeSummary{{1, 2}, {3, 4}},
707 },
708 },
709 FailureMap: FailureLongNames,
710 FailuresByType: map[string][]int {
711 "AUDIO": {1, 2, 3, 4},
712 "CRASH": {100, 200},
713 "LEAKY": {0},
714 "PASS": {5},
715 },
716 },
717 }
718 x := &AggregateResult{
719 Builder: "foo_builder",
720 BuilderInfo: &BuilderInfo{
721 SecondsEpoch: []int64{10, 20},
722 BlinkRevs: []Number{30, 40},
723 BuildNumbers: []Number{50, 60},
724 ChromeRevs: []string{"b", "c"} ,
725 Tests: AggregateTest{
726 "foo": &AggregateTestLea f{
727 Results: []Resu ltSummary{{1, "C"}, {3, "D"}},
728 Runtimes: []Runt imeSummary{{10, 20}, {30, 40}},
729 },
730 },
731 FailureMap: map[string]string{},
732 FailuresByType: map[string][]int {
733 "AUDIO": {80, 90},
734 "CRASH": {110, 220},
735 "FAILURE": {42},
736 "LEAKY": {2},
737 },
738 },
739 }
740 expected := &AggregateResult{
741 Version: ResultsVersion,
742 Builder: "foo_builder",
743 BuilderInfo: &BuilderInfo{
744 SecondsEpoch: []int64{10, 20, 1, 2},
745 BlinkRevs: []Number{30, 40, 3 , 4},
746 BuildNumbers: []Number{50, 60, 5 , 6},
747 ChromeRevs: []string{"b", "c", "a", "1"},
748 Tests: AggregateTest{
749 "foo": &AggregateTestLea f{
750 Results: []Resu ltSummary{{3, "D"}, {1, "C"}, {1, "A"}, {3, "B"}},
751 Runtimes: []Runt imeSummary{{30, 40}, {10, 20}, {1, 2}, {3, 4}},
752 },
753 },
754 FailureMap: FailureLongNames,
755 FailuresByType: map[string][]int {
756 "AUDIO": {80, 90, 1, 2 , 3, 4},
757 "CRASH": {110, 220, 10 0, 200},
758 "FAILURE": {42},
759 "PASS": {5},
760 "LEAKY": {2, 0},
761 },
762 },
763 }
764 So(ag.Merge(x), ShouldBeNil)
765 So(ag, ShouldResemble, expected)
766 })
767 })
768 })
769 }
770
771 // TestMergeAndTrim tests are ported from "model/test/jsonresults_test.py"
772 // in the Python implementation.
773 func TestMergeAndTrim(t *testing.T) {
774 t.Parallel()
775
776 Convey("Test Merge/Trim", t, func() {
777 Convey("empty aggregated results", func() {
778 aggr := &AggregateResult{}
779 x := &AggregateResult{
780 BuilderInfo: &BuilderInfo{
781 BuildNumbers: []Number{2, 1},
782 Tests: AggregateTest{
783 "001.html": &AggregateTestLeaf{
784 Results: []ResultSummar y{{200, "F"}},
785 Runtimes: []RuntimeSumma ry{{200, 0}},
786 },
787 },
788 },
789 }
790 expected := &AggregateResult{
791 Version: ResultsVersion,
792 BuilderInfo: &BuilderInfo{
793 FailureMap: FailureLongNames,
794 BuildNumbers: []Number{2, 1},
795 Tests: AggregateTest{
796 "001.html": &AggregateTestLeaf{
797 Results: []ResultSummar y{{200, "F"}},
798 Runtimes: []RuntimeSumma ry{{200, 0}},
799 },
800 },
801 },
802 }
803 So(aggr.Merge(x), ShouldBeNil)
804 So(aggr, ShouldResemble, expected)
805 })
806
807 Convey("duplicate build number", func() {
808 aggr := &AggregateResult{
809 BuilderInfo: &BuilderInfo{
810 BuildNumbers: []Number{2, 1},
811 Tests: AggregateTest{
812 "001.html": &AggregateTestLeaf{
813 Results: []ResultSummar y{{100, "F"}},
814 Runtimes: []RuntimeSumma ry{{100, 0}},
815 },
816 },
817 },
818 }
819 x := &AggregateResult{
820 BuilderInfo: &BuilderInfo{
821 BuildNumbers: []Number{2},
822 Tests: AggregateTest{
823 "001.html": &AggregateTestLeaf{
824 Results: []ResultSummar y{{1, "F"}},
825 Runtimes: []RuntimeSumma ry{{1, 0}},
826 },
827 },
828 },
829 }
830 So(aggr.Merge(x), ShouldEqual, ErrBuildNumberConflict)
831 })
832
833 Convey("incremental single test single run same result", func() {
834 aggr := &AggregateResult{
835 BuilderInfo: &BuilderInfo{
836 BuildNumbers: []Number{2, 1},
837 Tests: AggregateTest{
838 "001.html": &AggregateTestLeaf{
839 Results: []ResultSummar y{{200, "F"}},
840 Runtimes: []RuntimeSumma ry{{200, 0}},
841 },
842 },
843 },
844 }
845 x := &AggregateResult{
846 BuilderInfo: &BuilderInfo{
847 BuildNumbers: []Number{3},
848 Tests: AggregateTest{
849 "001.html": &AggregateTestLeaf{
850 Results: []ResultSummar y{{1, "F"}},
851 Runtimes: []RuntimeSumma ry{{1, 0}},
852 },
853 },
854 },
855 }
856 expected := &AggregateResult{
857 Version: ResultsVersion,
858 BuilderInfo: &BuilderInfo{
859 FailureMap: FailureLongNames,
860 BuildNumbers: []Number{3, 2, 1},
861 Tests: AggregateTest{
862 "001.html": &AggregateTestLeaf{
863 Results: []ResultSummar y{{201, "F"}},
864 Runtimes: []RuntimeSumma ry{{201, 0}},
865 },
866 },
867 },
868 }
869 So(aggr.Merge(x), ShouldBeNil)
870 So(aggr, ShouldResemble, expected)
871 })
872
873 Convey("single test single run different result", func() {
874 aggr := &AggregateResult{
875 Version: ResultsVersion,
876 BuilderInfo: &BuilderInfo{
877 BuildNumbers: []Number{2, 1},
878 Tests: AggregateTest{
879 "001.html": &AggregateTestLeaf{
880 Results: []ResultSummar y{{200, "F"}},
881 Runtimes: []RuntimeSumma ry{{200, 0}},
882 },
883 },
884 },
885 }
886 x := &AggregateResult{
887 BuilderInfo: &BuilderInfo{
888 BuildNumbers: []Number{3},
889 Tests: AggregateTest{
890 "001.html": &AggregateTestLeaf{
891 Results: []ResultSummar y{{1, "I"}},
892 Runtimes: []RuntimeSumma ry{{1, 1}},
893 },
894 },
895 },
896 }
897 expected := &AggregateResult{
898 Version: ResultsVersion,
899 BuilderInfo: &BuilderInfo{
900 FailureMap: FailureLongNames,
901 BuildNumbers: []Number{3, 2, 1},
902 Tests: AggregateTest{
903 "001.html": &AggregateTestLeaf{
904 Results: []ResultSummar y{{1, "I"}, {200, "F"}},
905 Runtimes: []RuntimeSumma ry{{1, 1}, {200, 0}},
906 },
907 },
908 },
909 }
910 So(aggr.Merge(x), ShouldBeNil)
911 So(aggr, ShouldResemble, expected)
912 })
913
914 Convey("single test single run, result changed", func() {
915 aggr := &AggregateResult{
916 BuilderInfo: &BuilderInfo{
917 BuildNumbers: []Number{2, 1},
918 Tests: AggregateTest{
919 "001.html": &AggregateTestLeaf{
920 Results: []ResultSummar y{{200, "F"}, {10, "I"}},
921 Runtimes: []RuntimeSumma ry{{200, 0}, {10, 1}},
922 },
923 },
924 },
925 }
926 x := &AggregateResult{
927 BuilderInfo: &BuilderInfo{
928 BuildNumbers: []Number{3},
929 Tests: AggregateTest{
930 "001.html": &AggregateTestLeaf{
931 Results: []ResultSummar y{{1, "I"}},
932 Runtimes: []RuntimeSumma ry{{1, 1}},
933 },
934 },
935 },
936 }
937 expected := &AggregateResult{
938 Version: ResultsVersion,
939 BuilderInfo: &BuilderInfo{
940 FailureMap: FailureLongNames,
941 BuildNumbers: []Number{3, 2, 1},
942 Tests: AggregateTest{
943 "001.html": &AggregateTestLeaf{
944 Results: []ResultSummar y{{1, "I"}, {200, "F"}, {10, "I"}},
945 Runtimes: []RuntimeSumma ry{{1, 1}, {200, 0}, {10, 1}},
946 },
947 },
948 },
949 }
950 So(aggr.Merge(x), ShouldBeNil)
951 So(aggr, ShouldResemble, expected)
952 })
953
954 Convey("multiple tests single run", func() {
955 aggr := &AggregateResult{
956 BuilderInfo: &BuilderInfo{
957 BuildNumbers: []Number{2, 1},
958 Tests: AggregateTest{
959 "001.html": &AggregateTestLeaf{
960 Results: []ResultSummar y{{200, "F"}},
961 Runtimes: []RuntimeSumma ry{{200, 0}},
962 },
963 "002.html": &AggregateTestLeaf{
964 Results: []ResultSummar y{{100, "I"}},
965 Runtimes: []RuntimeSumma ry{{100, 1}},
966 },
967 },
968 },
969 }
970 x := &AggregateResult{
971 BuilderInfo: &BuilderInfo{
972 BuildNumbers: []Number{3},
973 Tests: AggregateTest{
974 "001.html": &AggregateTestLeaf{
975 Results: []ResultSummar y{{1, "F"}},
976 Runtimes: []RuntimeSumma ry{{1, 0}},
977 },
978 "002.html": &AggregateTestLeaf{
979 Results: []ResultSummar y{{1, "I"}},
980 Runtimes: []RuntimeSumma ry{{1, 1}},
981 },
982 },
983 },
984 }
985 expected := &AggregateResult{
986 Version: ResultsVersion,
987 BuilderInfo: &BuilderInfo{
988 FailureMap: FailureLongNames,
989 BuildNumbers: []Number{3, 2, 1},
990 Tests: AggregateTest{
991 "001.html": &AggregateTestLeaf{
992 Results: []ResultSummar y{{201, "F"}},
993 Runtimes: []RuntimeSumma ry{{201, 0}},
994 },
995 "002.html": &AggregateTestLeaf{
996 Results: []ResultSummar y{{101, "I"}},
997 Runtimes: []RuntimeSumma ry{{101, 1}},
998 },
999 },
1000 },
1001 }
1002 So(aggr.Merge(x), ShouldBeNil)
1003 So(aggr, ShouldResemble, expected)
1004 })
1005
1006 Convey("multiple tests single run no result", func() {
1007 aggr := &AggregateResult{
1008 BuilderInfo: &BuilderInfo{
1009 BuildNumbers: []Number{2, 1},
1010 Tests: AggregateTest{
1011 "001.html": &AggregateTestLeaf{
1012 Results: []ResultSummar y{{200, "F"}},
1013 Runtimes: []RuntimeSumma ry{{200, 0}},
1014 },
1015 "002.html": &AggregateTestLeaf{
1016 Results: []ResultSummar y{{100, "I"}},
1017 Runtimes: []RuntimeSumma ry{{100, 1}},
1018 },
1019 },
1020 },
1021 }
1022 x := &AggregateResult{
1023 BuilderInfo: &BuilderInfo{
1024 BuildNumbers: []Number{3},
1025 Tests: AggregateTest{
1026 "002.html": &AggregateTestLeaf{
1027 Results: []ResultSummar y{{1, "I"}},
1028 Runtimes: []RuntimeSumma ry{{1, 1}},
1029 },
1030 },
1031 },
1032 }
1033 expected := &AggregateResult{
1034 Version: ResultsVersion,
1035 BuilderInfo: &BuilderInfo{
1036 FailureMap: FailureLongNames,
1037 BuildNumbers: []Number{3, 2, 1},
1038 Tests: AggregateTest{
1039 "001.html": &AggregateTestLeaf{
1040 Results: []ResultSummar y{{1, "N"}, {200, "F"}},
1041 Runtimes: []RuntimeSumma ry{{201, 0}},
1042 },
1043 "002.html": &AggregateTestLeaf{
1044 Results: []ResultSummar y{{101, "I"}},
1045 Runtimes: []RuntimeSumma ry{{101, 1}},
1046 },
1047 },
1048 },
1049 }
1050 So(aggr.Merge(x), ShouldBeNil)
1051 So(aggr, ShouldResemble, expected)
1052 })
1053
1054 Convey("single test multiple runs", func() {
1055 aggr := &AggregateResult{
1056 BuilderInfo: &BuilderInfo{
1057 BuildNumbers: []Number{2, 1},
1058 Tests: AggregateTest{
1059 "001.html": &AggregateTestLeaf{
1060 Results: []ResultSummar y{{200, "F"}},
1061 Runtimes: []RuntimeSumma ry{{200, 0}},
1062 },
1063 },
1064 },
1065 }
1066 x := &AggregateResult{
1067 BuilderInfo: &BuilderInfo{
1068 BuildNumbers: []Number{4, 3},
1069 Tests: AggregateTest{
1070 "001.html": &AggregateTestLeaf{
1071 Results: []ResultSummar y{{2, "I"}, {1, "Q"}},
1072 Runtimes: []RuntimeSumma ry{{3, 2}},
1073 },
1074 },
1075 },
1076 }
1077 expected := &AggregateResult{
1078 Version: ResultsVersion,
1079 BuilderInfo: &BuilderInfo{
1080 FailureMap: FailureLongNames,
1081 BuildNumbers: []Number{4, 3, 2, 1},
1082 Tests: AggregateTest{
1083 "001.html": &AggregateTestLeaf{
1084 Results: []ResultSummar y{{1, "Q"}, {2, "I"}, {200, "F"}},
1085 Runtimes: []RuntimeSumma ry{{3, 2}, {200, 0}},
1086 },
1087 },
1088 },
1089 }
1090 So(aggr.Merge(x), ShouldBeNil)
1091 So(aggr, ShouldResemble, expected)
1092 })
1093
1094 Convey("multiple tests multiple runs", func() {
1095 aggr := &AggregateResult{
1096 BuilderInfo: &BuilderInfo{
1097 BuildNumbers: []Number{2, 1},
1098 Tests: AggregateTest{
1099 "001.html": &AggregateTestLeaf{
1100 Results: []ResultSummar y{{200, "F"}},
1101 Runtimes: []RuntimeSumma ry{{200, 0}},
1102 },
1103 "002.html": &AggregateTestLeaf{
1104 Results: []ResultSummar y{{10, "Z"}},
1105 Runtimes: []RuntimeSumma ry{{10, 0}},
1106 },
1107 },
1108 },
1109 }
1110 x := &AggregateResult{
1111 BuilderInfo: &BuilderInfo{
1112 BuildNumbers: []Number{4, 3},
1113 Tests: AggregateTest{
1114 "001.html": &AggregateTestLeaf{
1115 Results: []ResultSummar y{{2, "I"}},
1116 Runtimes: []RuntimeSumma ry{{2, 2}},
1117 },
1118 "002.html": &AggregateTestLeaf{
1119 Results: []ResultSummar y{{1, "C"}},
1120 Runtimes: []RuntimeSumma ry{{1, 1}},
1121 },
1122 },
1123 },
1124 }
1125 expected := &AggregateResult{
1126 Version: ResultsVersion,
1127 BuilderInfo: &BuilderInfo{
1128 FailureMap: FailureLongNames,
1129 BuildNumbers: []Number{4, 3, 2, 1},
1130 Tests: AggregateTest{
1131 "001.html": &AggregateTestLeaf{
1132 Results: []ResultSummar y{{2, "I"}, {200, "F"}},
1133 Runtimes: []RuntimeSumma ry{{2, 2}, {200, 0}},
1134 },
1135 "002.html": &AggregateTestLeaf{
1136 Results: []ResultSummar y{{1, "C"}, {10, "Z"}},
1137 Runtimes: []RuntimeSumma ry{{1, 1}, {10, 0}},
1138 },
1139 },
1140 },
1141 }
1142 So(aggr.Merge(x), ShouldBeNil)
1143 So(aggr, ShouldResemble, expected)
1144 })
1145
1146 Convey("incremental result older build", func() {
1147 aggr := &AggregateResult{
1148 BuilderInfo: &BuilderInfo{
1149 BuildNumbers: []Number{3, 1},
1150 Tests: AggregateTest{
1151 "001.html": &AggregateTestLeaf{
1152 Results: []ResultSummar y{{5, "F"}},
1153 Runtimes: []RuntimeSumma ry{{5, 0}},
1154 },
1155 },
1156 },
1157 }
1158 x := &AggregateResult{
1159 BuilderInfo: &BuilderInfo{
1160 BuildNumbers: []Number{2},
1161 Tests: AggregateTest{
1162 "001.html": &AggregateTestLeaf{
1163 Results: []ResultSummar y{{1, "F"}},
1164 Runtimes: []RuntimeSumma ry{{1, 0}},
1165 },
1166 },
1167 },
1168 }
1169 expected := &AggregateResult{
1170 Version: ResultsVersion,
1171 BuilderInfo: &BuilderInfo{
1172 FailureMap: FailureLongNames,
1173 BuildNumbers: []Number{2, 3, 1},
1174 Tests: AggregateTest{
1175 "001.html": &AggregateTestLeaf{
1176 Results: []ResultSummar y{{6, "F"}},
1177 Runtimes: []RuntimeSumma ry{{6, 0}},
1178 },
1179 },
1180 },
1181 }
1182 So(aggr.Merge(x), ShouldBeNil)
1183 So(aggr, ShouldResemble, expected)
1184 })
1185
1186 Convey("incremental result same build", func() {
1187 aggr := &AggregateResult{
1188 BuilderInfo: &BuilderInfo{
1189 BuildNumbers: []Number{2, 1},
1190 Tests: AggregateTest{
1191 "001.html": &AggregateTestLeaf{
1192 Results: []ResultSummar y{{5, "F"}},
1193 Runtimes: []RuntimeSumma ry{{5, 0}},
1194 },
1195 },
1196 },
1197 }
1198 x := &AggregateResult{
1199 BuilderInfo: &BuilderInfo{
1200 BuildNumbers: []Number{3, 2},
1201 Tests: AggregateTest{
1202 "001.html": &AggregateTestLeaf{
1203 Results: []ResultSummar y{{2, "F"}},
1204 Runtimes: []RuntimeSumma ry{{2, 0}},
1205 },
1206 },
1207 },
1208 }
1209 expected := &AggregateResult{
1210 Version: ResultsVersion,
1211 BuilderInfo: &BuilderInfo{
1212 FailureMap: FailureLongNames,
1213 BuildNumbers: []Number{3, 2, 2, 1},
1214 Tests: AggregateTest{
1215 "001.html": &AggregateTestLeaf{
1216 Results: []ResultSummar y{{7, "F"}},
1217 Runtimes: []RuntimeSumma ry{{7, 0}},
1218 },
1219 },
1220 },
1221 }
1222 So(aggr.Merge(x), ShouldBeNil)
1223 So(aggr, ShouldResemble, expected)
1224 })
1225
1226 Convey("remove new test", func() {
1227 aggr := &AggregateResult{
1228 BuilderInfo: &BuilderInfo{
1229 BuildNumbers: []Number{2, 1},
1230 Tests: AggregateTest{
1231 "001.html": &AggregateTestLeaf{
1232 Results: []ResultSummar y{{199, "F"}},
1233 Runtimes: []RuntimeSumma ry{{199, 0}},
1234 },
1235 },
1236 },
1237 }
1238 x := &AggregateResult{
1239 BuilderInfo: &BuilderInfo{
1240 BuildNumbers: []Number{3},
1241 Tests: AggregateTest{
1242 "001.html": &AggregateTestLeaf{
1243 Results: []ResultSummar y{{1, "F"}},
1244 Runtimes: []RuntimeSumma ry{{1, 0}},
1245 },
1246 "002.html": &AggregateTestLeaf{
1247 Results: []ResultSummar y{{1, "P"}},
1248 Runtimes: []RuntimeSumma ry{{1, 0}},
1249 },
1250 "notrun.html": &AggregateTestLea f{
1251 Results: []ResultSummar y{{1, "Y"}},
1252 Runtimes: []RuntimeSumma ry{{1, 0}},
1253 },
1254 "003.html": &AggregateTestLeaf{
1255 Results: []ResultSummar y{{1, "N"}},
1256 Runtimes: []RuntimeSumma ry{{1, 0}},
1257 },
1258 },
1259 },
1260 }
1261 expected := &AggregateResult{
1262 Version: ResultsVersion,
1263 BuilderInfo: &BuilderInfo{
1264 FailureMap: FailureLongNames,
1265 BuildNumbers: []Number{3, 2, 1},
1266 Tests: AggregateTest{
1267 "001.html": &AggregateTestLeaf{
1268 Results: []ResultSummar y{{200, "F"}},
1269 Runtimes: []RuntimeSumma ry{{200, 0}},
1270 },
1271 },
1272 },
1273 }
1274 So(aggr.Merge(x), ShouldBeNil)
1275 So(aggr.Trim(200), ShouldBeNil)
1276 So(aggr, ShouldResemble, expected)
1277 })
1278
1279 Convey("remove test", func() {
1280 aggr := &AggregateResult{
1281 BuilderInfo: &BuilderInfo{
1282 BuildNumbers: []Number{2, 1},
1283 Tests: AggregateTest{
1284 "directory": AggregateTest{
1285 "directory": AggregateTe st{
1286 "001.html": &Agg regateTestLeaf{
1287 Results: []ResultSummary{{200, "P"}},
1288 Runtimes : []RuntimeSummary{{200, 0}},
1289 },
1290 },
1291 },
1292 "002.html": &AggregateTestLeaf{
1293 Results: []ResultSummar y{{10, "F"}},
1294 Runtimes: []RuntimeSumma ry{{10, 0}},
1295 },
1296 "003.html": &AggregateTestLeaf{
1297 Results: []ResultSummar y{{190, "P"}, {9, "N"}, {1, "F"}},
1298 Runtimes: []RuntimeSumma ry{{200, 0}},
1299 },
1300 },
1301 },
1302 }
1303 x := &AggregateResult{
1304 BuilderInfo: &BuilderInfo{
1305 BuildNumbers: []Number{3},
1306 Tests: AggregateTest{
1307 "directory": AggregateTest{
1308 "directory": AggregateTe st{
1309 "001.html": &Agg regateTestLeaf{
1310 Results: []ResultSummary{{1, "P"}},
1311 Runtimes : []RuntimeSummary{{1, 0}},
1312 },
1313 },
1314 },
1315 "002.html": &AggregateTestLeaf{
1316 Results: []ResultSummar y{{1, "P"}},
1317 Runtimes: []RuntimeSumma ry{{1, 0}},
1318 },
1319 "003.html": &AggregateTestLeaf{
1320 Results: []ResultSummar y{{1, "P"}},
1321 Runtimes: []RuntimeSumma ry{{1, 0}},
1322 },
1323 },
1324 },
1325 }
1326 expected := &AggregateResult{
1327 Version: ResultsVersion,
1328 BuilderInfo: &BuilderInfo{
1329 FailureMap: FailureLongNames,
1330 BuildNumbers: []Number{3, 2, 1},
1331 Tests: AggregateTest{
1332 "002.html": &AggregateTestLeaf{
1333 Results: []ResultSummar y{{1, "P"}, {10, "F"}},
1334 Runtimes: []RuntimeSumma ry{{11, 0}},
1335 },
1336 },
1337 },
1338 }
1339 So(aggr.Merge(x), ShouldBeNil)
1340 So(aggr.Trim(200), ShouldBeNil)
1341 So(aggr, ShouldResemble, expected)
1342 })
1343
1344 Convey("updates expected", func() {
1345 aggr := &AggregateResult{
1346 BuilderInfo: &BuilderInfo{
1347 BuildNumbers: []Number{2, 1},
1348 Tests: AggregateTest{
1349 "directory": AggregateTest{
1350 "directory": AggregateTe st{
1351 "001.html": &Agg regateTestLeaf{
1352 Expected : []string{"FAIL"},
1353 Results: []ResultSummary{{200, "P"}},
1354 Runtimes : []RuntimeSummary{{200, 0}},
1355 },
1356 },
1357 },
1358 "002.html": &AggregateTestLeaf{
1359 Bugs: []string{"crbu g.com/1234"},
1360 Expected: []string{"FAIL "},
1361 Results: []ResultSummar y{{10, "F"}},
1362 Runtimes: []RuntimeSumma ry{{10, 0}},
1363 },
1364 "003.html": &AggregateTestLeaf{
1365 Expected: []string{"FAIL "},
1366 Results: []ResultSummar y{{190, "P"}, {9, "N"}, {1, "F"}},
1367 Runtimes: []RuntimeSumma ry{{200, 0}},
1368 },
1369 "004.html": &AggregateTestLeaf{
1370 Results: []ResultSummar y{{199, "P"}, {1, "F"}},
1371 Runtimes: []RuntimeSumma ry{{200, 0}},
1372 },
1373 },
1374 },
1375 }
1376 x := &AggregateResult{
1377 BuilderInfo: &BuilderInfo{
1378 BuildNumbers: []Number{3},
1379 Tests: AggregateTest{
1380 "002.html": &AggregateTestLeaf{
1381 Expected: []string{"PASS "},
1382 Results: []ResultSummar y{{1, "P"}},
1383 Runtimes: []RuntimeSumma ry{{1, 0}},
1384 },
1385 "003.html": &AggregateTestLeaf{
1386 Expected: []string{"TIME OUT"},
1387 Results: []ResultSummar y{{1, "P"}},
1388 Runtimes: []RuntimeSumma ry{{1, 0}},
1389 },
1390 "004.html": &AggregateTestLeaf{
1391 Bugs: []string{"crbu g.com/1234"},
1392 Results: []ResultSummar y{{1, "P"}},
1393 Runtimes: []RuntimeSumma ry{{1, 0}},
1394 },
1395 },
1396 },
1397 }
1398 expected := &AggregateResult{
1399 Version: ResultsVersion,
1400 BuilderInfo: &BuilderInfo{
1401 FailureMap: FailureLongNames,
1402 BuildNumbers: []Number{3, 2, 1},
1403 Tests: AggregateTest{
1404 "002.html": &AggregateTestLeaf{
1405 Results: []ResultSummar y{{1, "P"}, {10, "F"}},
1406 Runtimes: []RuntimeSumma ry{{11, 0}},
1407 },
1408 "003.html": &AggregateTestLeaf{
1409 Expected: []string{"TIME OUT"},
1410 Results: []ResultSummar y{{191, "P"}, {9, "N"}},
1411 Runtimes: []RuntimeSumma ry{{200, 0}},
1412 },
1413 "004.html": &AggregateTestLeaf{
1414 Bugs: []string{"crbu g.com/1234"},
1415 Results: []ResultSummar y{{200, "P"}},
1416 Runtimes: []RuntimeSumma ry{{200, 0}},
1417 },
1418 },
1419 },
1420 }
1421 So(aggr.Merge(x), ShouldBeNil)
1422 So(aggr.Trim(200), ShouldBeNil)
1423 So(aggr, ShouldResemble, expected)
1424 })
1425
1426 Convey("keep test with all pass but slow time", func() {
1427 aggr := &AggregateResult{
1428 BuilderInfo: &BuilderInfo{
1429 BuildNumbers: []Number{2, 1},
1430 Tests: AggregateTest{
1431 "001.html": &AggregateTestLeaf{
1432 Results: []ResultSummar y{{200, "P"}},
1433 Runtimes: []RuntimeSumma ry{{200, runtimeThresholdNormal}},
1434 },
1435 "002.html": &AggregateTestLeaf{
1436 Results: []ResultSummar y{{10, "F"}},
1437 Runtimes: []RuntimeSumma ry{{10, 0}},
1438 },
1439 },
1440 },
1441 }
1442 x := &AggregateResult{
1443 BuilderInfo: &BuilderInfo{
1444 BuildNumbers: []Number{3},
1445 Tests: AggregateTest{
1446 "001.html": &AggregateTestLeaf{
1447 Results: []ResultSummar y{{1, "P"}},
1448 Runtimes: []RuntimeSumma ry{{1, 1}},
1449 },
1450 "002.html": &AggregateTestLeaf{
1451 Results: []ResultSummar y{{1, "P"}},
1452 Runtimes: []RuntimeSumma ry{{1, 0}},
1453 },
1454 },
1455 },
1456 }
1457 expected := &AggregateResult{
1458 Version: ResultsVersion,
1459 BuilderInfo: &BuilderInfo{
1460 FailureMap: FailureLongNames,
1461 BuildNumbers: []Number{3, 2, 1},
1462 Tests: AggregateTest{
1463 "001.html": &AggregateTestLeaf{
1464 Results: []ResultSummar y{{201, "P"}},
1465 Runtimes: []RuntimeSumma ry{{1, 1}, {200, runtimeThresholdNormal}},
1466 },
1467 "002.html": &AggregateTestLeaf{
1468 Results: []ResultSummar y{{1, "P"}, {10, "F"}},
1469 Runtimes: []RuntimeSumma ry{{11, 0}},
1470 },
1471 },
1472 },
1473 }
1474 So(aggr.Merge(x), ShouldBeNil)
1475 So(aggr, ShouldResemble, expected)
1476 })
1477
1478 Convey("pruning slow tests for debug builders", func() {
1479 aggr := &AggregateResult{
1480 Builder: "MockBuilder(dbg)",
1481 BuilderInfo: &BuilderInfo{
1482 BuildNumbers: []Number{2, 1},
1483 Tests: AggregateTest{
1484 "001.html": &AggregateTestLeaf{
1485 Results: []ResultSummar y{{200, "P"}},
1486 Runtimes: []RuntimeSumma ry{{200, runtimeThresholdDebug}},
1487 },
1488 "002.html": &AggregateTestLeaf{
1489 Results: []ResultSummar y{{10, "F"}},
1490 Runtimes: []RuntimeSumma ry{{10, 0}},
1491 },
1492 },
1493 },
1494 }
1495 x := &AggregateResult{
1496 Builder: "MockBuilder(dbg)",
1497 BuilderInfo: &BuilderInfo{
1498 BuildNumbers: []Number{3},
1499 Tests: AggregateTest{
1500 "001.html": &AggregateTestLeaf{
1501 Results: []ResultSummar y{{1, "P"}},
1502 Runtimes: []RuntimeSumma ry{{1, 1}},
1503 },
1504 "002.html": &AggregateTestLeaf{
1505 Results: []ResultSummar y{{1, "P"}},
1506 Runtimes: []RuntimeSumma ry{{1, 0}},
1507 },
1508 "003.html": &AggregateTestLeaf{
1509 Results: []ResultSummar y{{1, "P"}},
1510 Runtimes: []RuntimeSumma ry{{1, 3}},
1511 },
1512 },
1513 },
1514 }
1515 expected := &AggregateResult{
1516 Version: ResultsVersion,
1517 Builder: "MockBuilder(dbg)",
1518 BuilderInfo: &BuilderInfo{
1519 FailureMap: FailureLongNames,
1520 BuildNumbers: []Number{3, 2, 1},
1521 Tests: AggregateTest{
1522 "001.html": &AggregateTestLeaf{
1523 Results: []ResultSummar y{{201, "P"}},
1524 Runtimes: []RuntimeSumma ry{{1, 1}, {200, runtimeThresholdDebug}},
1525 },
1526 "002.html": &AggregateTestLeaf{
1527 Results: []ResultSummar y{{1, "P"}, {10, "F"}},
1528 Runtimes: []RuntimeSumma ry{{11, 0}},
1529 },
1530 },
1531 },
1532 }
1533 So(aggr.Merge(x), ShouldBeNil)
1534 So(aggr.Trim(ResultsSize), ShouldBeNil)
1535 So(aggr, ShouldResemble, expected)
1536 })
1537
1538 Convey("prune extra results", func() {
1539 size := ResultsSize
1540 aggr := &AggregateResult{
1541 BuilderInfo: &BuilderInfo{
1542 BuildNumbers: []Number{2, 1},
1543 Tests: AggregateTest{
1544 "001.html": &AggregateTestLeaf{
1545 Results: []ResultSummar y{{size, "F"}, {1, "I"}},
1546 Runtimes: []RuntimeSumma ry{{size, 0}, {1, 1}},
1547 },
1548 },
1549 },
1550 }
1551 x := &AggregateResult{
1552 BuilderInfo: &BuilderInfo{
1553 BuildNumbers: []Number{3},
1554 Tests: AggregateTest{
1555 "001.html": &AggregateTestLeaf{
1556 Results: []ResultSummar y{{1, "T"}},
1557 Runtimes: []RuntimeSumma ry{{1, 1}},
1558 },
1559 },
1560 },
1561 }
1562 expected := &AggregateResult{
1563 Version: ResultsVersion,
1564 BuilderInfo: &BuilderInfo{
1565 FailureMap: FailureLongNames,
1566 BuildNumbers: []Number{3, 2, 1},
1567 Tests: AggregateTest{
1568 "001.html": &AggregateTestLeaf{
1569 Results: []ResultSummar y{{1, "T"}, {size, "F"}},
1570 Runtimes: []RuntimeSumma ry{{1, 1}, {size, 0}},
1571 },
1572 },
1573 },
1574 }
1575 So(aggr.Merge(x), ShouldBeNil)
1576 So(aggr.Trim(size), ShouldBeNil)
1577 So(aggr, ShouldResemble, expected)
1578 })
1579
1580 Convey("prune extra results small", func() {
1581 size := ResultsSmallSize
1582 aggr := &AggregateResult{
1583 BuilderInfo: &BuilderInfo{
1584 BuildNumbers: []Number{2, 1},
1585 Tests: AggregateTest{
1586 "001.html": &AggregateTestLeaf{
1587 Results: []ResultSummar y{{size, "F"}, {1, "I"}},
1588 Runtimes: []RuntimeSumma ry{{size, 0}, {1, 1}},
1589 },
1590 },
1591 },
1592 }
1593 x := &AggregateResult{
1594 BuilderInfo: &BuilderInfo{
1595 BuildNumbers: []Number{3},
1596 Tests: AggregateTest{
1597 "001.html": &AggregateTestLeaf{
1598 Results: []ResultSummar y{{1, "T"}},
1599 Runtimes: []RuntimeSumma ry{{1, 1}},
1600 },
1601 },
1602 },
1603 }
1604 expected := &AggregateResult{
1605 Version: ResultsVersion,
1606 BuilderInfo: &BuilderInfo{
1607 FailureMap: FailureLongNames,
1608 BuildNumbers: []Number{3, 2, 1},
1609 Tests: AggregateTest{
1610 "001.html": &AggregateTestLeaf{
1611 Results: []ResultSummar y{{1, "T"}, {size, "F"}},
1612 Runtimes: []RuntimeSumma ry{{1, 1}, {size, 0}},
1613 },
1614 },
1615 },
1616 }
1617 So(aggr.Merge(x), ShouldBeNil)
1618 So(aggr.Trim(size), ShouldBeNil)
1619 So(aggr, ShouldResemble, expected)
1620 })
1621
1622 Convey("prune extra results with new results of same type", func () {
1623 size := ResultsSmallSize
1624 aggr := &AggregateResult{
1625 BuilderInfo: &BuilderInfo{
1626 BuildNumbers: []Number{2, 1},
1627 Tests: AggregateTest{
1628 "001.html": &AggregateTestLeaf{
1629 Results: []ResultSummar y{{size, "F"}, {1, "N"}},
1630 Runtimes: []RuntimeSumma ry{{size, 0}, {1, 1}},
1631 },
1632 },
1633 },
1634 }
1635 x := &AggregateResult{
1636 BuilderInfo: &BuilderInfo{
1637 BuildNumbers: []Number{3},
1638 Tests: AggregateTest{
1639 "001.html": &AggregateTestLeaf{
1640 Results: []ResultSummar y{{1, "F"}},
1641 Runtimes: []RuntimeSumma ry{{1, 0}},
1642 },
1643 },
1644 },
1645 }
1646 expected := &AggregateResult{
1647 Version: ResultsVersion,
1648 BuilderInfo: &BuilderInfo{
1649 FailureMap: FailureLongNames,
1650 BuildNumbers: []Number{3, 2, 1},
1651 Tests: AggregateTest{
1652 "001.html": &AggregateTestLeaf{
1653 Results: []ResultSummar y{{size, "F"}},
1654 Runtimes: []RuntimeSumma ry{{size, 0}},
1655 },
1656 },
1657 },
1658 }
1659 So(aggr.Merge(x), ShouldBeNil)
1660 So(aggr.Trim(size), ShouldBeNil)
1661 So(aggr, ShouldResemble, expected)
1662 })
1663
1664 Convey("merge build directory hierarchy", func() {
1665 aggr := &AggregateResult{
1666 Version: ResultsVersion,
1667 BuilderInfo: &BuilderInfo{
1668 BuildNumbers: []Number{2, 1},
1669 Tests: AggregateTest{
1670 "bar": AggregateTest{
1671 "baz": AggregateTest{
1672 "003.html": &Agg regateTestLeaf{
1673 Results: []ResultSummary{{25, "F"}},
1674 Runtimes : []RuntimeSummary{{25, 0}},
1675 },
1676 },
1677 },
1678 "foo": AggregateTest{
1679 "001.html": &AggregateTe stLeaf{
1680 Results: []Resu ltSummary{{50, "F"}},
1681 Runtimes: []Runt imeSummary{{50, 0}},
1682 },
1683 "002.html": &AggregateTe stLeaf{
1684 Results: []Resu ltSummary{{100, "I"}},
1685 Runtimes: []Runt imeSummary{{100, 0}},
1686 },
1687 },
1688 },
1689 },
1690 }
1691 x := &AggregateResult{
1692 Version: ResultsVersion,
1693 BuilderInfo: &BuilderInfo{
1694 BuildNumbers: []Number{3},
1695 Tests: AggregateTest{
1696 "baz": AggregateTest{
1697 "004.html": &AggregateTe stLeaf{
1698 Results: []Resu ltSummary{{1, "I"}},
1699 Runtimes: []Runt imeSummary{{1, 0}},
1700 },
1701 },
1702 "foo": AggregateTest{
1703 "001.html": &AggregateTe stLeaf{
1704 Results: []Resu ltSummary{{1, "F"}},
1705 Runtimes: []Runt imeSummary{{1, 0}},
1706 },
1707 "002.html": &AggregateTe stLeaf{
1708 Results: []Resu ltSummary{{1, "I"}},
1709 Runtimes: []Runt imeSummary{{1, 0}},
1710 },
1711 },
1712 },
1713 },
1714 }
1715 expected := &AggregateResult{
1716 Version: ResultsVersion,
1717 BuilderInfo: &BuilderInfo{
1718 FailureMap: FailureLongNames,
1719 BuildNumbers: []Number{3, 2, 1},
1720 Tests: AggregateTest{
1721 "bar": AggregateTest{
1722 "baz": AggregateTest{
1723 "003.html": &Agg regateTestLeaf{
1724 Results: []ResultSummary{{1, "N"}, {25, "F"}},
1725 Runtimes : []RuntimeSummary{{26, 0}},
1726 },
1727 },
1728 },
1729 "baz": AggregateTest{
1730 "004.html": &AggregateTe stLeaf{
1731 Results: []Resu ltSummary{{1, "I"}},
1732 Runtimes: []Runt imeSummary{{1, 0}},
1733 },
1734 },
1735 "foo": AggregateTest{
1736 "001.html": &AggregateTe stLeaf{
1737 Results: []Resu ltSummary{{51, "F"}},
1738 Runtimes: []Runt imeSummary{{51, 0}},
1739 },
1740 "002.html": &AggregateTe stLeaf{
1741 Results: []Resu ltSummary{{101, "I"}},
1742 Runtimes: []Runt imeSummary{{101, 0}},
1743 },
1744 },
1745 },
1746 },
1747 }
1748 So(aggr.Merge(x), ShouldBeNil)
1749 So(aggr, ShouldResemble, expected)
1750 })
1751
1752 Convey("treats multiple results as a unique type", func() {
1753 aggr := &AggregateResult{
1754 BuilderInfo: &BuilderInfo{
1755 BuildNumbers: []Number{3, 1},
1756 Tests: AggregateTest{
1757 "001.html": &AggregateTestLeaf{
1758 Results: []ResultSummar y{{5, "F"}},
1759 Runtimes: []RuntimeSumma ry{{5, 0}},
1760 },
1761 "002.html": &AggregateTestLeaf{
1762 Results: []ResultSummar y{{3, "FQ"}},
1763 Runtimes: []RuntimeSumma ry{{3, 0}},
1764 },
1765 },
1766 },
1767 }
1768 x := &AggregateResult{
1769 BuilderInfo: &BuilderInfo{
1770 BuildNumbers: []Number{2},
1771 Tests: AggregateTest{
1772 "001.html": &AggregateTestLeaf{
1773 Results: []ResultSummar y{{1, "FIQ"}},
1774 Runtimes: []RuntimeSumma ry{{1, 0}},
1775 },
1776 "002.html": &AggregateTestLeaf{
1777 Results: []ResultSummar y{{1, "FQ"}},
1778 Runtimes: []RuntimeSumma ry{{1, 0}},
1779 },
1780 },
1781 },
1782 }
1783 expected := &AggregateResult{
1784 Version: ResultsVersion,
1785 BuilderInfo: &BuilderInfo{
1786 FailureMap: FailureLongNames,
1787 BuildNumbers: []Number{2, 3, 1},
1788 Tests: AggregateTest{
1789 "001.html": &AggregateTestLeaf{
1790 Results: []ResultSummar y{{1, "FIQ"}, {5, "F"}},
1791 Runtimes: []RuntimeSumma ry{{6, 0}},
1792 },
1793 "002.html": &AggregateTestLeaf{
1794 Results: []ResultSummar y{{4, "FQ"}},
1795 Runtimes: []RuntimeSumma ry{{4, 0}},
1796 },
1797 },
1798 },
1799 }
1800 So(aggr.Merge(x), ShouldBeNil)
1801 So(aggr, ShouldResemble, expected)
1802 })
1803
1804 Convey("gtest", func() {
1805 aggr := &AggregateResult{
1806 BuilderInfo: &BuilderInfo{
1807 BuildNumbers: []Number{2, 1},
1808 Tests: AggregateTest{
1809 "foo.bar": &AggregateTestLeaf{
1810 Results: []ResultSummar y{{50, "F"}},
1811 Runtimes: []RuntimeSumma ry{{50, 0}},
1812 },
1813 "foo.bar2": &AggregateTestLeaf{
1814 Results: []ResultSummar y{{100, "I"}},
1815 Runtimes: []RuntimeSumma ry{{100, 0}},
1816 },
1817 "test.failed": &AggregateTestLea f{
1818 Results: []ResultSummar y{{5, "Q"}},
1819 Runtimes: []RuntimeSumma ry{{5, 0}},
1820 },
1821 },
1822 },
1823 }
1824 x := &AggregateResult{
1825 BuilderInfo: &BuilderInfo{
1826 BuildNumbers: []Number{3},
1827 Tests: AggregateTest{
1828 "foo.bar2": &AggregateTestLeaf{
1829 Results: []ResultSummar y{{1, "I"}},
1830 Runtimes: []RuntimeSumma ry{{1, 0}},
1831 },
1832 "foo.bar3": &AggregateTestLeaf{
1833 Results: []ResultSummar y{{1, "F"}},
1834 Runtimes: []RuntimeSumma ry{{1, 0}},
1835 },
1836 "test.failed": &AggregateTestLea f{
1837 Results: []ResultSummar y{{5, "Q"}},
1838 Runtimes: []RuntimeSumma ry{{5, 0}},
1839 },
1840 },
1841 },
1842 }
1843 expected := &AggregateResult{
1844 Version: ResultsVersion,
1845 BuilderInfo: &BuilderInfo{
1846 FailureMap: FailureLongNames,
1847 BuildNumbers: []Number{3, 2, 1},
1848 Tests: AggregateTest{
1849 "foo.bar": &AggregateTestLeaf{
1850 Results: []ResultSummar y{{1, "N"}, {50, "F"}},
1851 Runtimes: []RuntimeSumma ry{{51, 0}},
1852 },
1853 "foo.bar2": &AggregateTestLeaf{
1854 Results: []ResultSummar y{{101, "I"}},
1855 Runtimes: []RuntimeSumma ry{{101, 0}},
1856 },
1857 "foo.bar3": &AggregateTestLeaf{
1858 Results: []ResultSummar y{{1, "F"}},
1859 Runtimes: []RuntimeSumma ry{{1, 0}},
1860 },
1861 "test.failed": &AggregateTestLea f{
1862 Results: []ResultSummar y{{10, "Q"}},
1863 Runtimes: []RuntimeSumma ry{{10, 0}},
1864 },
1865 },
1866 },
1867 }
1868 So(aggr.Merge(x), ShouldBeNil)
1869 So(aggr, ShouldResemble, expected)
1870 })
1871 })
1872 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698