diff options
4 files changed, 120 insertions, 0 deletions
diff --git a/meta-selftest/classes/base-do-configure-modified.bbclass b/meta-selftest/classes/base-do-configure-modified.bbclass new file mode 100644 index 0000000000..3f96827a42 --- /dev/null +++ b/meta-selftest/classes/base-do-configure-modified.bbclass | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | base_do_configure:append () { | ||
| 2 | echo "this changes base_do_configure() definiton" | ||
| 3 | } | ||
diff --git a/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend b/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend new file mode 100644 index 0000000000..205720982c --- /dev/null +++ b/meta-selftest/recipes-test/gcc-source/gcc-source_%.bbappend | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | # This bbappend is used to alter the recipe using the test_recipe.inc file created by tests. | ||
| 2 | include test_recipe.inc | ||
diff --git a/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend b/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend new file mode 100644 index 0000000000..205720982c --- /dev/null +++ b/meta-selftest/recipes-test/quilt-native/quilt-native_%.bbappend | |||
| @@ -0,0 +1,2 @@ | |||
| 1 | # This bbappend is used to alter the recipe using the test_recipe.inc file created by tests. | ||
| 2 | include test_recipe.inc | ||
diff --git a/meta/lib/oeqa/selftest/cases/sstatetests.py b/meta/lib/oeqa/selftest/cases/sstatetests.py index bdad9088d3..b96eacc9ad 100644 --- a/meta/lib/oeqa/selftest/cases/sstatetests.py +++ b/meta/lib/oeqa/selftest/cases/sstatetests.py | |||
| @@ -773,3 +773,116 @@ addtask tmptask2 before do_tmptask1 | |||
| 773 | latestfiles = sorted(filedates.keys(), key=lambda f: filedates[f])[-2:] | 773 | latestfiles = sorted(filedates.keys(), key=lambda f: filedates[f])[-2:] |
| 774 | bb.siggen.compare_sigfiles(latestfiles[-2], latestfiles[-1], recursecb) | 774 | bb.siggen.compare_sigfiles(latestfiles[-2], latestfiles[-1], recursecb) |
| 775 | self.assertEqual(recursecb_count,1) | 775 | self.assertEqual(recursecb_count,1) |
| 776 | |||
| 777 | class SStatePrintdiff(SStateBase): | ||
| 778 | # FIXME: OEBasicHash setting is necessary for now as otherwise the following error can occur: | ||
| 779 | # ERROR: Can't find a task we're supposed to have written out? (hash: e79d70b9c2cc72030c1ce822525510699a1eeb1ddf5986271d3217422244366a)? | ||
| 780 | # The underlying issue should be investigated and addressed. | ||
| 781 | def run_test_printdiff_changerecipe(self, target, change_recipe, change_bbtask, change_content, expected_sametmp_output, expected_difftmp_output): | ||
| 782 | self.write_config(""" | ||
| 783 | TMPDIR = "${TOPDIR}/tmp-sstateprintdiff" | ||
| 784 | BB_SIGNATURE_HANDLER = "OEBasicHash" | ||
| 785 | """) | ||
| 786 | self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff") | ||
| 787 | bitbake(target) | ||
| 788 | bitbake("-S none {}".format(target)) | ||
| 789 | bitbake(change_bbtask) | ||
| 790 | self.write_recipeinc(change_recipe, change_content) | ||
| 791 | result_sametmp = bitbake("-S printdiff {}".format(target)) | ||
| 792 | |||
| 793 | self.write_config(""" | ||
| 794 | TMPDIR = "${TOPDIR}/tmp-sstateprintdiff-2" | ||
| 795 | BB_SIGNATURE_HANDLER = "OEBasicHash" | ||
| 796 | """) | ||
| 797 | self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff-2") | ||
| 798 | result_difftmp = bitbake("-S printdiff {}".format(target)) | ||
| 799 | |||
| 800 | self.delete_recipeinc(change_recipe) | ||
| 801 | for item in expected_sametmp_output: | ||
| 802 | self.assertIn(item, result_sametmp.output) | ||
| 803 | for item in expected_difftmp_output: | ||
| 804 | self.assertIn(item, result_difftmp.output) | ||
| 805 | |||
| 806 | def run_test_printdiff_changeconfig(self, target, change_content, expected_sametmp_output, expected_difftmp_output): | ||
| 807 | self.write_config(""" | ||
| 808 | TMPDIR = "${TOPDIR}/tmp-sstateprintdiff" | ||
| 809 | BB_SIGNATURE_HANDLER = "OEBasicHash" | ||
| 810 | """) | ||
| 811 | self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff") | ||
| 812 | bitbake(target) | ||
| 813 | bitbake("-S none {}".format(target)) | ||
| 814 | self.append_config(change_content) | ||
| 815 | result_sametmp = bitbake("-S printdiff {}".format(target)) | ||
| 816 | |||
| 817 | self.write_config(""" | ||
| 818 | TMPDIR = "${TOPDIR}/tmp-sstateprintdiff-2" | ||
| 819 | BB_SIGNATURE_HANDLER = "OEBasicHash" | ||
| 820 | """) | ||
| 821 | self.append_config(change_content) | ||
| 822 | self.track_for_cleanup(self.topdir + "/tmp-sstateprintdiff-2") | ||
| 823 | result_difftmp = bitbake("-S printdiff {}".format(target)) | ||
| 824 | |||
| 825 | for item in expected_sametmp_output: | ||
| 826 | self.assertIn(item, result_sametmp.output) | ||
| 827 | for item in expected_difftmp_output: | ||
| 828 | self.assertIn(item, result_difftmp.output) | ||
| 829 | |||
| 830 | |||
| 831 | # Check if printdiff walks the full dependency chain from the image target to where the change is in a specific recipe | ||
| 832 | def test_image_minimal_vs_quilt(self): | ||
| 833 | expected_output = ("Task quilt-native:do_install couldn't be used from the cache because:", | ||
| 834 | "We need hash", | ||
| 835 | "most recent matching task was") | ||
| 836 | expected_sametmp_output = expected_output + ("Variable do_install value changed",'+ echo "this changes the task signature"') | ||
| 837 | expected_difftmp_output = expected_output | ||
| 838 | |||
| 839 | self.run_test_printdiff_changerecipe("core-image-minimal", "quilt-native", "-c do_install quilt-native", | ||
| 840 | """ | ||
| 841 | do_install:append() { | ||
| 842 | echo "this changes the task signature" | ||
| 843 | } | ||
| 844 | """, | ||
| 845 | expected_sametmp_output, expected_difftmp_output) | ||
| 846 | |||
| 847 | # Check if changes to gcc-source (which uses tmp/work-shared) are correctly discovered | ||
| 848 | def test_gcc_runtime_vs_gcc_source(self): | ||
| 849 | gcc_source_pn = 'gcc-source-%s' % get_bb_vars(['PV'], 'gcc')['PV'] | ||
| 850 | |||
| 851 | expected_output = ("Task {}:do_preconfigure couldn't be used from the cache because:".format(gcc_source_pn), | ||
| 852 | "We need hash", | ||
| 853 | "most recent matching task was") | ||
| 854 | expected_sametmp_output = expected_output + ("Variable do_preconfigure value changed",'+ print("this changes the task signature")') | ||
| 855 | #FIXME: printdiff is supposed to find at least one preconfigure task signature in the sstate cache, but isn't able to | ||
| 856 | #expected_difftmp_output = expected_output | ||
| 857 | expected_difftmp_output = () | ||
| 858 | |||
| 859 | self.run_test_printdiff_changerecipe("gcc-runtime", "gcc-source", "-c do_preconfigure {}".format(gcc_source_pn), | ||
| 860 | """ | ||
| 861 | python do_preconfigure:append() { | ||
| 862 | print("this changes the task signature") | ||
| 863 | } | ||
| 864 | """, | ||
| 865 | expected_sametmp_output, expected_difftmp_output) | ||
| 866 | |||
| 867 | # Check if changing a really base task definiton is reported against multiple core recipes using it | ||
| 868 | def test_image_minimal_vs_base_do_configure(self): | ||
| 869 | expected_output = ("Task zstd-native:do_configure couldn't be used from the cache because:", | ||
| 870 | "Task texinfo-dummy-native:do_configure couldn't be used from the cache because:", | ||
| 871 | "Task ldconfig-native:do_configure couldn't be used from the cache because:", | ||
| 872 | "Task gettext-minimal-native:do_configure couldn't be used from the cache because:", | ||
| 873 | "Task tzcode-native:do_configure couldn't be used from the cache because:", | ||
| 874 | "Task makedevs-native:do_configure couldn't be used from the cache because:", | ||
| 875 | "Task pigz-native:do_configure couldn't be used from the cache because:", | ||
| 876 | "Task update-rc.d-native:do_configure couldn't be used from the cache because:", | ||
| 877 | "Task unzip-native:do_configure couldn't be used from the cache because:", | ||
| 878 | "Task gnu-config-native:do_configure couldn't be used from the cache because:", | ||
| 879 | "We need hash", | ||
| 880 | "most recent matching task was") | ||
| 881 | expected_sametmp_output = expected_output + ("Variable base_do_configure value changed",'+ echo "this changes base_do_configure() definiton"') | ||
| 882 | expected_difftmp_output = expected_output | ||
| 883 | |||
| 884 | self.run_test_printdiff_changeconfig("core-image-minimal", | ||
| 885 | """ | ||
| 886 | INHERIT += "base-do-configure-modified" | ||
| 887 | """, | ||
| 888 | expected_sametmp_output, expected_difftmp_output) | ||
