summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/tests/event.py499
1 files changed, 499 insertions, 0 deletions
diff --git a/bitbake/lib/bb/tests/event.py b/bitbake/lib/bb/tests/event.py
index 036fd7e18d..d3a5f6269f 100644
--- a/bitbake/lib/bb/tests/event.py
+++ b/bitbake/lib/bb/tests/event.py
@@ -485,3 +485,502 @@ class EventHandlingTest(unittest.TestCase):
485 # processed before finishing handling the first worker event. 485 # processed before finishing handling the first worker event.
486 self.assertEqual(self._threadlock_test_calls, 486 self.assertEqual(self._threadlock_test_calls,
487 ["w1_ui1", "w2_ui1", "w1_ui2", "w2_ui2"]) 487 ["w1_ui1", "w2_ui1", "w1_ui2", "w2_ui2"])
488
489
490class EventClassesTest(unittest.TestCase):
491 """ Event classes test class """
492
493 _worker_pid = 54321
494
495 def setUp(self):
496 bb.event.worker_pid = EventClassesTest._worker_pid
497
498 def test_Event(self):
499 """ Test the Event base class """
500 event = bb.event.Event()
501 self.assertEqual(event.pid, EventClassesTest._worker_pid)
502
503 def test_HeartbeatEvent(self):
504 """ Test the HeartbeatEvent class """
505 time = 10
506 event = bb.event.HeartbeatEvent(time)
507 self.assertEqual(event.time, time)
508 self.assertEqual(event.pid, EventClassesTest._worker_pid)
509
510 def test_OperationStarted(self):
511 """ Test OperationStarted event class """
512 msg = "Foo Bar"
513 event = bb.event.OperationStarted(msg)
514 self.assertEqual(event.msg, msg)
515 self.assertEqual(event.pid, EventClassesTest._worker_pid)
516
517 def test_OperationCompleted(self):
518 """ Test OperationCompleted event class """
519 msg = "Foo Bar"
520 total = 123
521 event = bb.event.OperationCompleted(total, msg)
522 self.assertEqual(event.msg, msg)
523 self.assertEqual(event.total, total)
524 self.assertEqual(event.pid, EventClassesTest._worker_pid)
525
526 def test_OperationProgress(self):
527 """ Test OperationProgress event class """
528 msg = "Foo Bar"
529 total = 123
530 current = 111
531 event = bb.event.OperationProgress(current, total, msg)
532 self.assertEqual(event.msg, msg + ": %s/%s" % (current, total))
533 self.assertEqual(event.pid, EventClassesTest._worker_pid)
534
535 def test_ConfigParsed(self):
536 """ Test the ConfigParsed class """
537 event = bb.event.ConfigParsed()
538 self.assertEqual(event.pid, EventClassesTest._worker_pid)
539
540 def test_MultiConfigParsed(self):
541 """ Test MultiConfigParsed event class """
542 mcdata = {"foobar": "Foo Bar"}
543 event = bb.event.MultiConfigParsed(mcdata)
544 self.assertEqual(event.mcdata, mcdata)
545 self.assertEqual(event.pid, EventClassesTest._worker_pid)
546
547 def test_RecipeEvent(self):
548 """ Test RecipeEvent event base class """
549 callback = lambda a: 2 * a
550 event = bb.event.RecipeEvent(callback)
551 self.assertEqual(event.fn(1), callback(1))
552 self.assertEqual(event.pid, EventClassesTest._worker_pid)
553
554 def test_RecipePreFinalise(self):
555 """ Test RecipePreFinalise event class """
556 callback = lambda a: 2 * a
557 event = bb.event.RecipePreFinalise(callback)
558 self.assertEqual(event.fn(1), callback(1))
559 self.assertEqual(event.pid, EventClassesTest._worker_pid)
560
561 def test_RecipeTaskPreProcess(self):
562 """ Test RecipeTaskPreProcess event class """
563 callback = lambda a: 2 * a
564 tasklist = [("foobar", callback)]
565 event = bb.event.RecipeTaskPreProcess(callback, tasklist)
566 self.assertEqual(event.fn(1), callback(1))
567 self.assertEqual(event.tasklist, tasklist)
568 self.assertEqual(event.pid, EventClassesTest._worker_pid)
569
570 def test_RecipeParsed(self):
571 """ Test RecipeParsed event base class """
572 callback = lambda a: 2 * a
573 event = bb.event.RecipeParsed(callback)
574 self.assertEqual(event.fn(1), callback(1))
575 self.assertEqual(event.pid, EventClassesTest._worker_pid)
576
577 def test_StampUpdate(self):
578 targets = ["foo", "bar"]
579 stampfns = [lambda:"foobar"]
580 event = bb.event.StampUpdate(targets, stampfns)
581 self.assertEqual(event.targets, targets)
582 self.assertEqual(event.stampPrefix, stampfns)
583 self.assertEqual(event.pid, EventClassesTest._worker_pid)
584
585 def test_BuildBase(self):
586 """ Test base class for bitbake build events """
587 name = "foo"
588 pkgs = ["bar"]
589 failures = 123
590 event = bb.event.BuildBase(name, pkgs, failures)
591 self.assertEqual(event.name, name)
592 self.assertEqual(event.pkgs, pkgs)
593 self.assertEqual(event.getFailures(), failures)
594 name = event.name = "bar"
595 pkgs = event.pkgs = ["foo"]
596 self.assertEqual(event.name, name)
597 self.assertEqual(event.pkgs, pkgs)
598 self.assertEqual(event.getFailures(), failures)
599 self.assertEqual(event.pid, EventClassesTest._worker_pid)
600
601 def test_BuildInit(self):
602 """ Test class for bitbake build invocation events """
603 event = bb.event.BuildInit()
604 self.assertEqual(event.name, None)
605 self.assertEqual(event.pkgs, [])
606 self.assertEqual(event.getFailures(), 0)
607 name = event.name = "bar"
608 pkgs = event.pkgs = ["foo"]
609 self.assertEqual(event.name, name)
610 self.assertEqual(event.pkgs, pkgs)
611 self.assertEqual(event.getFailures(), 0)
612 self.assertEqual(event.pid, EventClassesTest._worker_pid)
613
614 def test_BuildStarted(self):
615 """ Test class for build started events """
616 name = "foo"
617 pkgs = ["bar"]
618 failures = 123
619 event = bb.event.BuildStarted(name, pkgs, failures)
620 self.assertEqual(event.name, name)
621 self.assertEqual(event.pkgs, pkgs)
622 self.assertEqual(event.getFailures(), failures)
623 self.assertEqual(event.msg, "Building Started")
624 name = event.name = "bar"
625 pkgs = event.pkgs = ["foo"]
626 msg = event.msg = "foobar"
627 self.assertEqual(event.name, name)
628 self.assertEqual(event.pkgs, pkgs)
629 self.assertEqual(event.getFailures(), failures)
630 self.assertEqual(event.msg, msg)
631 self.assertEqual(event.pid, EventClassesTest._worker_pid)
632
633 def test_BuildCompleted(self):
634 """ Test class for build completed events """
635 total = 1000
636 name = "foo"
637 pkgs = ["bar"]
638 failures = 123
639 interrupted = 1
640 event = bb.event.BuildCompleted(total, name, pkgs, failures,
641 interrupted)
642 self.assertEqual(event.name, name)
643 self.assertEqual(event.pkgs, pkgs)
644 self.assertEqual(event.getFailures(), failures)
645 self.assertEqual(event.msg, "Building Failed")
646 event2 = bb.event.BuildCompleted(total, name, pkgs)
647 self.assertEqual(event2.name, name)
648 self.assertEqual(event2.pkgs, pkgs)
649 self.assertEqual(event2.getFailures(), 0)
650 self.assertEqual(event2.msg, "Building Succeeded")
651 self.assertEqual(event2.pid, EventClassesTest._worker_pid)
652
653 def test_DiskFull(self):
654 """ Test DiskFull event class """
655 dev = "/dev/foo"
656 type = "ext4"
657 freespace = "104M"
658 mountpoint = "/"
659 event = bb.event.DiskFull(dev, type, freespace, mountpoint)
660 self.assertEqual(event.pid, EventClassesTest._worker_pid)
661
662 def test_MonitorDiskEvent(self):
663 """ Test MonitorDiskEvent class """
664 available_bytes = 10000000
665 free_bytes = 90000000
666 total_bytes = 1000000000
667 du = bb.event.DiskUsageSample(available_bytes, free_bytes,
668 total_bytes)
669 event = bb.event.MonitorDiskEvent(du)
670 self.assertEqual(event.disk_usage.available_bytes, available_bytes)
671 self.assertEqual(event.disk_usage.free_bytes, free_bytes)
672 self.assertEqual(event.disk_usage.total_bytes, total_bytes)
673 self.assertEqual(event.pid, EventClassesTest._worker_pid)
674
675 def test_NoProvider(self):
676 """ Test NoProvider event class """
677 item = "foobar"
678 event1 = bb.event.NoProvider(item)
679 self.assertEqual(event1.getItem(), item)
680 self.assertEqual(event1.isRuntime(), False)
681 self.assertEqual(str(event1), "Nothing PROVIDES 'foobar'")
682 runtime = True
683 dependees = ["foo", "bar"]
684 reasons = None
685 close_matches = ["foibar", "footbar"]
686 event2 = bb.event.NoProvider(item, runtime, dependees, reasons,
687 close_matches)
688 self.assertEqual(event2.isRuntime(), True)
689 expected = ("Nothing RPROVIDES 'foobar' (but foo, bar RDEPENDS"
690 " on or otherwise requires it). Close matches:\n"
691 " foibar\n"
692 " footbar")
693 self.assertEqual(str(event2), expected)
694 reasons = ["Item does not exist on database"]
695 close_matches = ["foibar", "footbar"]
696 event3 = bb.event.NoProvider(item, runtime, dependees, reasons,
697 close_matches)
698 expected = ("Nothing RPROVIDES 'foobar' (but foo, bar RDEPENDS"
699 " on or otherwise requires it)\n"
700 "Item does not exist on database")
701 self.assertEqual(str(event3), expected)
702 self.assertEqual(event3.pid, EventClassesTest._worker_pid)
703
704 def test_MultipleProviders(self):
705 """ Test MultipleProviders event class """
706 item = "foobar"
707 candidates = ["foobarv1", "foobars"]
708 event1 = bb.event.MultipleProviders(item, candidates)
709 self.assertEqual(event1.isRuntime(), False)
710 self.assertEqual(event1.getItem(), item)
711 self.assertEqual(event1.getCandidates(), candidates)
712 expected = ("Multiple providers are available for foobar (foobarv1,"
713 " foobars)\n"
714 "Consider defining a PREFERRED_PROVIDER entry to match "
715 "foobar")
716 self.assertEqual(str(event1), expected)
717 runtime = True
718 event2 = bb.event.MultipleProviders(item, candidates, runtime)
719 self.assertEqual(event2.isRuntime(), runtime)
720 expected = ("Multiple providers are available for runtime foobar "
721 "(foobarv1, foobars)\n"
722 "Consider defining a PREFERRED_RPROVIDER entry to match "
723 "foobar")
724 self.assertEqual(str(event2), expected)
725 self.assertEqual(event2.pid, EventClassesTest._worker_pid)
726
727 def test_ParseStarted(self):
728 """ Test ParseStarted event class """
729 total = 123
730 event = bb.event.ParseStarted(total)
731 self.assertEqual(event.msg, "Recipe parsing Started")
732 self.assertEqual(event.total, total)
733 self.assertEqual(event.pid, EventClassesTest._worker_pid)
734
735 def test_ParseCompleted(self):
736 """ Test ParseCompleted event class """
737 cached = 10
738 parsed = 13
739 skipped = 7
740 virtuals = 2
741 masked = 1
742 errors = 0
743 total = 23
744 event = bb.event.ParseCompleted(cached, parsed, skipped, masked,
745 virtuals, errors, total)
746 self.assertEqual(event.msg, "Recipe parsing Completed")
747 expected = [cached, parsed, skipped, virtuals, masked, errors,
748 cached + parsed, total]
749 actual = [event.cached, event.parsed, event.skipped, event.virtuals,
750 event.masked, event.errors, event.sofar, event.total]
751 self.assertEqual(str(actual), str(expected))
752 self.assertEqual(event.pid, EventClassesTest._worker_pid)
753
754 def test_ParseProgress(self):
755 """ Test ParseProgress event class """
756 current = 10
757 total = 100
758 event = bb.event.ParseProgress(current, total)
759 self.assertEqual(event.msg,
760 "Recipe parsing" + ": %s/%s" % (current, total))
761 self.assertEqual(event.pid, EventClassesTest._worker_pid)
762
763 def test_CacheLoadStarted(self):
764 """ Test CacheLoadStarted event class """
765 total = 123
766 event = bb.event.CacheLoadStarted(total)
767 self.assertEqual(event.msg, "Loading cache Started")
768 self.assertEqual(event.total, total)
769 self.assertEqual(event.pid, EventClassesTest._worker_pid)
770
771 def test_CacheLoadProgress(self):
772 """ Test CacheLoadProgress event class """
773 current = 10
774 total = 100
775 event = bb.event.CacheLoadProgress(current, total)
776 self.assertEqual(event.msg,
777 "Loading cache" + ": %s/%s" % (current, total))
778 self.assertEqual(event.pid, EventClassesTest._worker_pid)
779
780 def test_CacheLoadCompleted(self):
781 """ Test CacheLoadCompleted event class """
782 total = 23
783 num_entries = 12
784 event = bb.event.CacheLoadCompleted(total, num_entries)
785 self.assertEqual(event.msg, "Loading cache Completed")
786 expected = [total, num_entries]
787 actual = [event.total, event.num_entries]
788 self.assertEqual(str(actual), str(expected))
789 self.assertEqual(event.pid, EventClassesTest._worker_pid)
790
791 def test_TreeDataPreparationStarted(self):
792 """ Test TreeDataPreparationStarted event class """
793 event = bb.event.TreeDataPreparationStarted()
794 self.assertEqual(event.msg, "Preparing tree data Started")
795 self.assertEqual(event.pid, EventClassesTest._worker_pid)
796
797 def test_TreeDataPreparationProgress(self):
798 """ Test TreeDataPreparationProgress event class """
799 current = 10
800 total = 100
801 event = bb.event.TreeDataPreparationProgress(current, total)
802 self.assertEqual(event.msg,
803 "Preparing tree data" + ": %s/%s" % (current, total))
804 self.assertEqual(event.pid, EventClassesTest._worker_pid)
805
806 def test_TreeDataPreparationCompleted(self):
807 """ Test TreeDataPreparationCompleted event class """
808 total = 23
809 event = bb.event.TreeDataPreparationCompleted(total)
810 self.assertEqual(event.msg, "Preparing tree data Completed")
811 self.assertEqual(event.total, total)
812 self.assertEqual(event.pid, EventClassesTest._worker_pid)
813
814 def test_DepTreeGenerated(self):
815 """ Test DepTreeGenerated event class """
816 depgraph = Mock()
817 event = bb.event.DepTreeGenerated(depgraph)
818 self.assertEqual(event.pid, EventClassesTest._worker_pid)
819
820 def test_TargetsTreeGenerated(self):
821 """ Test TargetsTreeGenerated event class """
822 model = Mock()
823 event = bb.event.TargetsTreeGenerated(model)
824 self.assertEqual(event.pid, EventClassesTest._worker_pid)
825
826 def test_ReachableStamps(self):
827 """ Test ReachableStamps event class """
828 stamps = [Mock(), Mock()]
829 event = bb.event.ReachableStamps(stamps)
830 self.assertEqual(event.stamps, stamps)
831 self.assertEqual(event.pid, EventClassesTest._worker_pid)
832
833 def test_FilesMatchingFound(self):
834 """ Test FilesMatchingFound event class """
835 pattern = "foo.*bar"
836 matches = ["foobar"]
837 event = bb.event.FilesMatchingFound(pattern, matches)
838 self.assertEqual(event.pid, EventClassesTest._worker_pid)
839
840 def test_ConfigFilesFound(self):
841 """ Test ConfigFilesFound event class """
842 variable = "FOO_BAR"
843 values = ["foo", "bar"]
844 event = bb.event.ConfigFilesFound(variable, values)
845 self.assertEqual(event.pid, EventClassesTest._worker_pid)
846
847 def test_ConfigFilePathFound(self):
848 """ Test ConfigFilePathFound event class """
849 path = "/foo/bar"
850 event = bb.event.ConfigFilePathFound(path)
851 self.assertEqual(event.pid, EventClassesTest._worker_pid)
852
853 def test_message_classes(self):
854 """ Test message event classes """
855 msg = "foobar foo bar"
856 event = bb.event.MsgBase(msg)
857 self.assertEqual(event.pid, EventClassesTest._worker_pid)
858 event = bb.event.MsgDebug(msg)
859 self.assertEqual(event.pid, EventClassesTest._worker_pid)
860 event = bb.event.MsgNote(msg)
861 self.assertEqual(event.pid, EventClassesTest._worker_pid)
862 event = bb.event.MsgWarn(msg)
863 self.assertEqual(event.pid, EventClassesTest._worker_pid)
864 event = bb.event.MsgError(msg)
865 self.assertEqual(event.pid, EventClassesTest._worker_pid)
866 event = bb.event.MsgFatal(msg)
867 self.assertEqual(event.pid, EventClassesTest._worker_pid)
868 event = bb.event.MsgPlain(msg)
869 self.assertEqual(event.pid, EventClassesTest._worker_pid)
870
871 def test_LogExecTTY(self):
872 """ Test LogExecTTY event class """
873 msg = "foo bar"
874 prog = "foo.sh"
875 sleep_delay = 10
876 retries = 3
877 event = bb.event.LogExecTTY(msg, prog, sleep_delay, retries)
878 self.assertEqual(event.msg, msg)
879 self.assertEqual(event.prog, prog)
880 self.assertEqual(event.sleep_delay, sleep_delay)
881 self.assertEqual(event.retries, retries)
882 self.assertEqual(event.pid, EventClassesTest._worker_pid)
883
884 def _throw_zero_division_exception(self):
885 a = 1 / 0
886 return
887
888 def _worker_handler(self, event, d):
889 self._returned_event = event
890 return
891
892 def test_LogHandler(self):
893 """ Test LogHandler class """
894 logger = logging.getLogger("TestEventClasses")
895 logger.propagate = False
896 handler = bb.event.LogHandler(logging.INFO)
897 logger.addHandler(handler)
898 bb.event.worker_fire = self._worker_handler
899 try:
900 self._throw_zero_division_exception()
901 except ZeroDivisionError as ex:
902 logger.exception(ex)
903 event = self._returned_event
904 try:
905 pe = pickle.dumps(event)
906 newevent = pickle.loads(pe)
907 except:
908 self.fail('Logged event is not serializable')
909 self.assertEqual(event.taskpid, EventClassesTest._worker_pid)
910
911 def test_MetadataEvent(self):
912 """ Test MetadataEvent class """
913 eventtype = "footype"
914 eventdata = {"foo": "bar"}
915 event = bb.event.MetadataEvent(eventtype, eventdata)
916 self.assertEqual(event.type, eventtype)
917 self.assertEqual(event.pid, EventClassesTest._worker_pid)
918
919 def test_ProcessStarted(self):
920 """ Test ProcessStarted class """
921 processname = "foo"
922 total = 9783128974
923 event = bb.event.ProcessStarted(processname, total)
924 self.assertEqual(event.processname, processname)
925 self.assertEqual(event.total, total)
926 self.assertEqual(event.pid, EventClassesTest._worker_pid)
927
928 def test_ProcessProgress(self):
929 """ Test ProcessProgress class """
930 processname = "foo"
931 progress = 243224
932 event = bb.event.ProcessProgress(processname, progress)
933 self.assertEqual(event.processname, processname)
934 self.assertEqual(event.progress, progress)
935 self.assertEqual(event.pid, EventClassesTest._worker_pid)
936
937 def test_ProcessFinished(self):
938 """ Test ProcessFinished class """
939 processname = "foo"
940 total = 1242342344
941 event = bb.event.ProcessFinished(processname)
942 self.assertEqual(event.processname, processname)
943 self.assertEqual(event.pid, EventClassesTest._worker_pid)
944
945 def test_SanityCheck(self):
946 """ Test SanityCheck class """
947 event1 = bb.event.SanityCheck()
948 self.assertEqual(event1.generateevents, True)
949 self.assertEqual(event1.pid, EventClassesTest._worker_pid)
950 generateevents = False
951 event2 = bb.event.SanityCheck(generateevents)
952 self.assertEqual(event2.generateevents, generateevents)
953 self.assertEqual(event2.pid, EventClassesTest._worker_pid)
954
955 def test_SanityCheckPassed(self):
956 """ Test SanityCheckPassed class """
957 event = bb.event.SanityCheckPassed()
958 self.assertEqual(event.pid, EventClassesTest._worker_pid)
959
960 def test_SanityCheckFailed(self):
961 """ Test SanityCheckFailed class """
962 msg = "The sanity test failed."
963 event1 = bb.event.SanityCheckFailed(msg)
964 self.assertEqual(event1.pid, EventClassesTest._worker_pid)
965 network_error = True
966 event2 = bb.event.SanityCheckFailed(msg, network_error)
967 self.assertEqual(event2.pid, EventClassesTest._worker_pid)
968
969 def test_network_event_classes(self):
970 """ Test network event classes """
971 event1 = bb.event.NetworkTest()
972 generateevents = False
973 self.assertEqual(event1.pid, EventClassesTest._worker_pid)
974 event2 = bb.event.NetworkTest(generateevents)
975 self.assertEqual(event2.pid, EventClassesTest._worker_pid)
976 event3 = bb.event.NetworkTestPassed()
977 self.assertEqual(event3.pid, EventClassesTest._worker_pid)
978 event4 = bb.event.NetworkTestFailed()
979 self.assertEqual(event4.pid, EventClassesTest._worker_pid)
980
981 def test_FindSigInfoResult(self):
982 """ Test FindSigInfoResult event class """
983 result = [Mock()]
984 event = bb.event.FindSigInfoResult(result)
985 self.assertEqual(event.result, result)
986 self.assertEqual(event.pid, EventClassesTest._worker_pid)