summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/hashserv/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/hashserv/tests.py')
-rw-r--r--bitbake/lib/hashserv/tests.py198
1 files changed, 198 insertions, 0 deletions
diff --git a/bitbake/lib/hashserv/tests.py b/bitbake/lib/hashserv/tests.py
index 869f7636c5..aeedab3575 100644
--- a/bitbake/lib/hashserv/tests.py
+++ b/bitbake/lib/hashserv/tests.py
@@ -810,6 +810,27 @@ class HashEquivalenceCommonTests(object):
810 with self.auth_perms("@user-admin") as client: 810 with self.auth_perms("@user-admin") as client:
811 become = client.become_user(client.username) 811 become = client.become_user(client.username)
812 812
813 def test_auth_gc(self):
814 admin_client = self.start_auth_server()
815
816 with self.auth_perms() as client, self.assertRaises(InvokeError):
817 client.gc_mark("ABC", {"unihash": "123"})
818
819 with self.auth_perms() as client, self.assertRaises(InvokeError):
820 client.gc_status()
821
822 with self.auth_perms() as client, self.assertRaises(InvokeError):
823 client.gc_sweep("ABC")
824
825 with self.auth_perms("@db-admin") as client:
826 client.gc_mark("ABC", {"unihash": "123"})
827
828 with self.auth_perms("@db-admin") as client:
829 client.gc_status()
830
831 with self.auth_perms("@db-admin") as client:
832 client.gc_sweep("ABC")
833
813 def test_get_db_usage(self): 834 def test_get_db_usage(self):
814 usage = self.client.get_db_usage() 835 usage = self.client.get_db_usage()
815 836
@@ -837,6 +858,147 @@ class HashEquivalenceCommonTests(object):
837 data = client.get_taskhash(self.METHOD, taskhash, True) 858 data = client.get_taskhash(self.METHOD, taskhash, True)
838 self.assertEqual(data["owner"], user["username"]) 859 self.assertEqual(data["owner"], user["username"])
839 860
861 def test_gc(self):
862 taskhash = '53b8dce672cb6d0c73170be43f540460bfc347b4'
863 outhash = '5a9cb1649625f0bf41fc7791b635cd9c2d7118c7f021ba87dcd03f72b67ce7a8'
864 unihash = 'f37918cc02eb5a520b1aff86faacbc0a38124646'
865
866 result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
867 self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
868
869 taskhash2 = '3bf6f1e89d26205aec90da04854fbdbf73afe6b4'
870 outhash2 = '77623a549b5b1a31e3732dfa8fe61d7ce5d44b3370f253c5360e136b852967b4'
871 unihash2 = 'af36b199320e611fbb16f1f277d3ee1d619ca58b'
872
873 result = self.client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
874 self.assertClientGetHash(self.client, taskhash2, unihash2)
875
876 # Mark the first unihash to be kept
877 ret = self.client.gc_mark("ABC", {"unihash": unihash, "method": self.METHOD})
878 self.assertEqual(ret, {"count": 1})
879
880 ret = self.client.gc_status()
881 self.assertEqual(ret, {"mark": "ABC", "keep": 1, "remove": 1})
882
883 # Second hash is still there; mark doesn't delete hashes
884 self.assertClientGetHash(self.client, taskhash2, unihash2)
885
886 ret = self.client.gc_sweep("ABC")
887 self.assertEqual(ret, {"count": 1})
888
889 # Hash is gone. Taskhash is returned for second hash
890 self.assertClientGetHash(self.client, taskhash2, None)
891 # First hash is still present
892 self.assertClientGetHash(self.client, taskhash, unihash)
893
894 def test_gc_switch_mark(self):
895 taskhash = '53b8dce672cb6d0c73170be43f540460bfc347b4'
896 outhash = '5a9cb1649625f0bf41fc7791b635cd9c2d7118c7f021ba87dcd03f72b67ce7a8'
897 unihash = 'f37918cc02eb5a520b1aff86faacbc0a38124646'
898
899 result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
900 self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
901
902 taskhash2 = '3bf6f1e89d26205aec90da04854fbdbf73afe6b4'
903 outhash2 = '77623a549b5b1a31e3732dfa8fe61d7ce5d44b3370f253c5360e136b852967b4'
904 unihash2 = 'af36b199320e611fbb16f1f277d3ee1d619ca58b'
905
906 result = self.client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
907 self.assertClientGetHash(self.client, taskhash2, unihash2)
908
909 # Mark the first unihash to be kept
910 ret = self.client.gc_mark("ABC", {"unihash": unihash, "method": self.METHOD})
911 self.assertEqual(ret, {"count": 1})
912
913 ret = self.client.gc_status()
914 self.assertEqual(ret, {"mark": "ABC", "keep": 1, "remove": 1})
915
916 # Second hash is still there; mark doesn't delete hashes
917 self.assertClientGetHash(self.client, taskhash2, unihash2)
918
919 # Switch to a different mark and mark the second hash. This will start
920 # a new collection cycle
921 ret = self.client.gc_mark("DEF", {"unihash": unihash2, "method": self.METHOD})
922 self.assertEqual(ret, {"count": 1})
923
924 ret = self.client.gc_status()
925 self.assertEqual(ret, {"mark": "DEF", "keep": 1, "remove": 1})
926
927 # Both hashes are still present
928 self.assertClientGetHash(self.client, taskhash2, unihash2)
929 self.assertClientGetHash(self.client, taskhash, unihash)
930
931 # Sweep with the new mark
932 ret = self.client.gc_sweep("DEF")
933 self.assertEqual(ret, {"count": 1})
934
935 # First hash is gone, second is kept
936 self.assertClientGetHash(self.client, taskhash2, unihash2)
937 self.assertClientGetHash(self.client, taskhash, None)
938
939 def test_gc_switch_sweep_mark(self):
940 taskhash = '53b8dce672cb6d0c73170be43f540460bfc347b4'
941 outhash = '5a9cb1649625f0bf41fc7791b635cd9c2d7118c7f021ba87dcd03f72b67ce7a8'
942 unihash = 'f37918cc02eb5a520b1aff86faacbc0a38124646'
943
944 result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
945 self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
946
947 taskhash2 = '3bf6f1e89d26205aec90da04854fbdbf73afe6b4'
948 outhash2 = '77623a549b5b1a31e3732dfa8fe61d7ce5d44b3370f253c5360e136b852967b4'
949 unihash2 = 'af36b199320e611fbb16f1f277d3ee1d619ca58b'
950
951 result = self.client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
952 self.assertClientGetHash(self.client, taskhash2, unihash2)
953
954 # Mark the first unihash to be kept
955 ret = self.client.gc_mark("ABC", {"unihash": unihash, "method": self.METHOD})
956 self.assertEqual(ret, {"count": 1})
957
958 ret = self.client.gc_status()
959 self.assertEqual(ret, {"mark": "ABC", "keep": 1, "remove": 1})
960
961 # Sweeping with a different mark raises an error
962 with self.assertRaises(InvokeError):
963 self.client.gc_sweep("DEF")
964
965 # Both hashes are present
966 self.assertClientGetHash(self.client, taskhash2, unihash2)
967 self.assertClientGetHash(self.client, taskhash, unihash)
968
969 def test_gc_new_hashes(self):
970 taskhash = '53b8dce672cb6d0c73170be43f540460bfc347b4'
971 outhash = '5a9cb1649625f0bf41fc7791b635cd9c2d7118c7f021ba87dcd03f72b67ce7a8'
972 unihash = 'f37918cc02eb5a520b1aff86faacbc0a38124646'
973
974 result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
975 self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
976
977 # Start a new garbage collection
978 ret = self.client.gc_mark("ABC", {"unihash": unihash, "method": self.METHOD})
979 self.assertEqual(ret, {"count": 1})
980
981 ret = self.client.gc_status()
982 self.assertEqual(ret, {"mark": "ABC", "keep": 1, "remove": 0})
983
984 # Add second hash. It should inherit the mark from the current garbage
985 # collection operation
986
987 taskhash2 = '3bf6f1e89d26205aec90da04854fbdbf73afe6b4'
988 outhash2 = '77623a549b5b1a31e3732dfa8fe61d7ce5d44b3370f253c5360e136b852967b4'
989 unihash2 = 'af36b199320e611fbb16f1f277d3ee1d619ca58b'
990
991 result = self.client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
992 self.assertClientGetHash(self.client, taskhash2, unihash2)
993
994 # Sweep should remove nothing
995 ret = self.client.gc_sweep("ABC")
996 self.assertEqual(ret, {"count": 0})
997
998 # Both hashes are present
999 self.assertClientGetHash(self.client, taskhash2, unihash2)
1000 self.assertClientGetHash(self.client, taskhash, unihash)
1001
840 1002
841class TestHashEquivalenceClient(HashEquivalenceTestSetup, unittest.TestCase): 1003class TestHashEquivalenceClient(HashEquivalenceTestSetup, unittest.TestCase):
842 def get_server_addr(self, server_idx): 1004 def get_server_addr(self, server_idx):
@@ -1086,6 +1248,42 @@ class TestHashEquivalenceClient(HashEquivalenceTestSetup, unittest.TestCase):
1086 "get-db-query-columns", 1248 "get-db-query-columns",
1087 ], check=True) 1249 ], check=True)
1088 1250
1251 def test_gc(self):
1252 taskhash = '53b8dce672cb6d0c73170be43f540460bfc347b4'
1253 outhash = '5a9cb1649625f0bf41fc7791b635cd9c2d7118c7f021ba87dcd03f72b67ce7a8'
1254 unihash = 'f37918cc02eb5a520b1aff86faacbc0a38124646'
1255
1256 result = self.client.report_unihash(taskhash, self.METHOD, outhash, unihash)
1257 self.assertEqual(result['unihash'], unihash, 'Server returned bad unihash')
1258
1259 taskhash2 = '3bf6f1e89d26205aec90da04854fbdbf73afe6b4'
1260 outhash2 = '77623a549b5b1a31e3732dfa8fe61d7ce5d44b3370f253c5360e136b852967b4'
1261 unihash2 = 'af36b199320e611fbb16f1f277d3ee1d619ca58b'
1262
1263 result = self.client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
1264 self.assertClientGetHash(self.client, taskhash2, unihash2)
1265
1266 # Mark the first unihash to be kept
1267 self.run_hashclient([
1268 "--address", self.server_address,
1269 "gc-mark", "ABC",
1270 "--where", "unihash", unihash,
1271 "--where", "method", self.METHOD
1272 ], check=True)
1273
1274 # Second hash is still there; mark doesn't delete hashes
1275 self.assertClientGetHash(self.client, taskhash2, unihash2)
1276
1277 self.run_hashclient([
1278 "--address", self.server_address,
1279 "gc-sweep", "ABC",
1280 ], check=True)
1281
1282 # Hash is gone. Taskhash is returned for second hash
1283 self.assertClientGetHash(self.client, taskhash2, None)
1284 # First hash is still present
1285 self.assertClientGetHash(self.client, taskhash, unihash)
1286
1089 1287
1090class TestHashEquivalenceUnixServer(HashEquivalenceTestSetup, HashEquivalenceCommonTests, unittest.TestCase): 1288class TestHashEquivalenceUnixServer(HashEquivalenceTestSetup, HashEquivalenceCommonTests, unittest.TestCase):
1091 def get_server_addr(self, server_idx): 1289 def get_server_addr(self, server_idx):