BitgesellOfficial / bitgesell

Bitgesell (BGL) is a digital currency with built-in scarcity
https://www.bitgesell.ca
MIT License
25 stars 37 forks source link

test: functional: Fix mempool-* functional tests. #125

Closed gitcoindev closed 8 months ago

gitcoindev commented 1 year ago

Goal of this pull request is to fix mempool_* functional tests in bitcoinsync2022 branch.

Notes

bitgesell-2022$ test/functional/test_runner.py test/functional/mempool_*

...

TEST                             | STATUS    | DURATION

mempool_accept.py                | ✓ Passed  | 1 s
mempool_accept_wtxid.py          | ✓ Passed  | 12 s
mempool_datacarrier.py           | ✓ Passed  | 1 s
mempool_expiry.py                | ✓ Passed  | 1 s
mempool_limit.py                 | ✓ Passed  | 3 s
mempool_package_limits.py        | ✓ Passed  | 2 s
mempool_package_onemore.py       | ✓ Passed  | 1 s
mempool_packages.py              | ✓ Passed  | 6 s
mempool_persist.py --descriptors | ✓ Passed  | 14 s
mempool_reorg.py                 | ✓ Passed  | 2 s
mempool_resurrect.py             | ✓ Passed  | 1 s
mempool_spend_coinbase.py        | ✓ Passed  | 1 s
mempool_unbroadcast.py           | ✓ Passed  | 6 s
mempool_compatibility.py         | ○ Skipped | 0 s
mempool_updatefromblock.py       | ○ Skipped | 0 s

ALL                              | ✓ Passed  | 51 s (accumulated) 
naftalimurgor commented 1 year ago

Hey @gitcoindev, This is coming along great, were you able to build the bitcoinsync2022 branch successfully?

gitcoindev commented 1 year ago

Hi @naftalimurgor thank you!. The 2022 branch does not build out of the box, seems due to some integration hiccup, build system complains about QT and cpp tests Makefiles and this will need to be repaired in the future.

The exact error message is already shown in the autogen.sh run:

configure.ac:1968: error: required file 'src/qt/Makefile' not found
configure.ac:1969: error: required file 'src/qt/test/Makefile' not found
configure.ac:1970: error: required file 'src/test/Makefile' not found

Since I am working on functional tests, I do not need QT nor cpp unit tests and I was able to copy missing parts from my master branch workspace and build as follows:

$ cp ../bitgesell-integration/src/qt/Makefile src/qt/Makefile
$ cp ../bitgesell-integration/src/qt/test/Makefile src/qt/test/Makefile
$ touch src/test/Makefile
$ ./autogen.sh
$ ./configure --with-incompatible-bdb --with-gui=no --disable-tests
$ make -j16

--with-gui=no disables QT part --disable-tests disables CPP unit tests

I had to use --with-incompatible-bdb as well (BDB from contrib/install_sb4.sh works perfectly fine on my master branch and I used it for wallet tests).

I hope that helps and will enable you to build as well.

naftalimurgor commented 1 year ago

Thanks @gitcoindev What's your discord/Telegram?

gitcoindev commented 1 year ago

Thanks @gitcoindev What's your discord/Telegram?

I am on discord @korrrba , but mostly offline, checking it just from time to time.

naftalimurgor commented 1 year ago

Awesome, I'll shoot you a message there

janus commented 1 year ago

Hi @naftalimurgor thank you!. The 2022 branch does not build out of the box, seems due to some integration hiccup, build system complains about QT and cpp tests Makefiles and this will need to be repaired in the future.

The exact error message is already shown in the autogen.sh run:

configure.ac:1968: error: required file 'src/qt/Makefile' not found
configure.ac:1969: error: required file 'src/qt/test/Makefile' not found
configure.ac:1970: error: required file 'src/test/Makefile' not found

The above is not an issue but leftover from legacy code. Bitcoin added some lines to check and link those Makefile during autogen.sh run. However, we have not updated .gitignore to properly pick those files.

Since I am working on functional tests, I do not need QT nor cpp unit tests and I was able to copy missing parts from my master branch workspace and build as follows:

$ cp ../bitgesell-integration/src/qt/Makefile src/qt/Makefile
$ cp ../bitgesell-integration/src/qt/test/Makefile src/qt/test/Makefile
$ touch src/test/Makefile
$ ./autogen.sh
$ ./configure --with-incompatible-bdb --with-gui=no --disable-tests
$ make -j16

--with-gui=no disables QT part --disable-tests disables CPP unit tests

I had to use --with-incompatible-bdb as well (BDB from contrib/install_sb4.sh works perfectly fine on my master branch and I used it for wallet tests).

I hope that helps and will enable you to build as well.

I would go through your code (review).

janus commented 1 year ago

Goal of this pull request is to fix mempool_* functional tests in bitcoinsync2022 branch.

Notes

bitgesell-2022$ test/functional/test_runner.py test/functional/mempool_*

...

TEST                             | STATUS    | DURATION

mempool_accept.py                | ✓ Passed  | 1 s
mempool_accept_wtxid.py          | ✓ Passed  | 12 s
mempool_datacarrier.py           | ✓ Passed  | 1 s
mempool_expiry.py                | ✓ Passed  | 1 s
mempool_limit.py                 | ✓ Passed  | 3 s
mempool_package_limits.py        | ✓ Passed  | 2 s
mempool_package_onemore.py       | ✓ Passed  | 1 s
mempool_packages.py              | ✓ Passed  | 6 s
mempool_persist.py --descriptors | ✓ Passed  | 14 s
mempool_reorg.py                 | ✓ Passed  | 2 s
mempool_resurrect.py             | ✓ Passed  | 1 s
mempool_spend_coinbase.py        | ✓ Passed  | 1 s
mempool_unbroadcast.py           | ✓ Passed  | 6 s
mempool_compatibility.py         | ○ Skipped | 0 s
mempool_updatefromblock.py       | ○ Skipped | 0 s

ALL                              | ✓ Passed  | 51 s (accumulated) 

Got the following:

TEST | STATUS | DURATION

mempool_accept.py | ✓ Passed | 8 s mempool_accept_wtxid.py | ✓ Passed | 19 s mempool_datacarrier.py | ✓ Passed | 8 s mempool_expiry.py | ✓ Passed | 10 s mempool_limit.py | ✓ Passed | 7 s mempool_package_limits.py | ✓ Passed | 7 s mempool_package_onemore.py | ✓ Passed | 4 s mempool_packages.py | ✓ Passed | 18 s mempool_persist.py --descriptors | ✓ Passed | 33 s mempool_reorg.py | ✓ Passed | 9 s mempool_resurrect.py | ✓ Passed | 6 s mempool_spend_coinbase.py | ✓ Passed | 8 s mempool_unbroadcast.py | ✓ Passed | 21 s mempool_compatibility.py | ○ Skipped | 1 s mempool_updatefromblock.py | ✖ Failed | 5 s

ALL | ✖ Failed | 164 s (accumulated) Runtime: 48 s

I used your branch, bugfix/bitcoinsync2022-fix-mempool-functional-tests b598dc76a test: functional: Fix mempool- functional tests.

Did you flag updatefromblock.py to be skipped? If yes, it looks like you didn't include it to your commit. I am going to re-run your branch.

gitcoindev commented 1 year ago

Hi @janus let me check again. I have worked on an older laptop before on Ubuntu 18.04. Now will try with Ubuntu 20.04, both clang and gcc. I did not mark it as skipped, but if it is skipped will check why.

gitcoindev commented 1 year ago

Hi @janus just a follow up on this, the test was not enabled due to bdb not installed. I installed bdb and it fails, but there is indeed something wrong on bitcoin2022 branch with the memory pool. The test case prepares 100 transactions and mines them in batches of 25 using generate function. After a batch of transactions is mined, the memory pool should be emptied, but last 2-4 transactions are left out which causes the test case to fail:

-4675-> getrawmempool {}
<-4675- [0.000928] ["573ed9b27f5707afc2a1898df1f4991224fd3049d50bf7684d633d47467bd491", "1c8c4b22a0c2ca19816f15afdcb21c2ba4ee1130dad478736996eceffaa19e45", "5bbda968352510a890aee6a0cc06479f8cf9c7cf6bfcdf2f8ab39dd8634514a9", "37c64a364fa1b6cbe19adff3f0301ad86d477ef75654ad0ced74429c3d2ecddd", "d102d04c4af891568e550771c747c66759460dd6f93d3e85cbbddf295fd5d0d8", "35b4d2edd1565f257bcb2d177dc48e2c7a2c59063a9dac4a422b7c574fd266af", "d7b53e2af901b7945570e49d5bf634831dc247d47a41562bd7d55a55d048f8e1", "6fde1af0bf44d61335f7edc36880c7bd5029b6303e13ae227dc2226fd71d9b60", "dfc788544bcae8667969ae744d575028bff4c800e1909b0695f86f6d551d6b1b", "ece96d0219733abf777644500c0c1663e1c4baab2d16b5d7b83eb62a05613c5b", "9fbeaee77f821a59dd9da67e339956595045e30225f8fd864e1ee3c0987bb49e", "7b5c68a74cab10efdfe8bced52ae5a0be079be473bba39f1f46d35409829c2ac", "68410c6cf79871a5fedf416d6314bd2d997974e7d52bc26c59eb050401459ec2", "de856d95f665a16ae25af394eb3f8c7df09126a979da8eb0a19b7744bf7dd3a3", "e8171f9dbfcd621039488fe321088b3cc1f32257154a8325ffcd8c5d001e3f97", "826ca1c4865de847097b3ad35d99f807044246e941ef24bdd4835199ef2fc0be", "b28fc0999669932499df5a4b2116b5225d7edd8b2047f1f7220a963230b60dbf", "2318a82f9ebbbaef1771d8a6c7076b71d537bb1dcbb97e7c97ad448052dfe8d8", "6c937bcb3125881500e12c740b9902cb07de6ee11d51eb726c78357d7e641d08", "b8b7b7d77985aa634f2e34480897a49b661596a67cb0ec32572112bb764b8fbf", "08ea01e3c9d4bf5627ed9b9e81d0e9034dbf974163a0402bd83674fbd0c7a3c7", "d2a049d6eb7d8cb0560268b6aabdc0461962811a92c3d733a5dc2d3127a7a774", "142fe7bf3e52ec881ec13c2495004d2a3a86084fe945663aa712e1cfbc000b8b", "fede1e02c3e0902ed5d74546da6c599d141e5d2348610df68f7d70a8fcaf66d2", "c9848ca040f31b822bd51e906a307acdfc0f720d96d5e1807e13f9dc3df7f22f"]
2023-07-03T15:53:15.610000Z TestFramework (INFO): The batch of 25 transactions has been accepted into the mempool.
2023-07-03T15:53:15.610000Z TestFramework.node0 (DEBUG): TestNode.generate() dispatches `generate` call to `generatetoaddress`
-4676-> generatetoaddress {"nblocks": 1, "address": "rbgl1qqpmtreykaj2jphmyf3358sn3wudm6thfypzzut", "maxtries": 1000000}
<-4676- [0.014817] ["46e1e2e652518ae03ce38471982047647369ba79534b86f209fa0b7350b5e891"]
-4677-> getbestblockhash {}
<-4677- [0.000486] "46e1e2e652518ae03ce38471982047647369ba79534b86f209fa0b7350b5e891"
-4678-> getrawmempool {}
<-4678- [0.000579] ["fede1e02c3e0902ed5d74546da6c599d141e5d2348610df68f7d70a8fcaf66d2", "c9848ca040f31b822bd51e906a307acdfc0f720d96d5e1807e13f9dc3df7f22f"] <--- this list should be empty

I need some more time to find a root cause and fix this.

janus commented 1 year ago

Hi @janus just a follow up on this, the test was not enabled due to bdb not installed. I installed bdb and it fails, but there is indeed something wrong on bitcoin2022 branch with the memory pool. The test case prepares 100 transactions and mines them in batches of 25 using generate function. After a batch of transactions is mined, the memory pool should be emptied, but last 2-4 transactions are left out which causes the test case to fail:

-4675-> getrawmempool {}
<-4675- [0.000928] ["573ed9b27f5707afc2a1898df1f4991224fd3049d50bf7684d633d47467bd491", "1c8c4b22a0c2ca19816f15afdcb21c2ba4ee1130dad478736996eceffaa19e45", "5bbda968352510a890aee6a0cc06479f8cf9c7cf6bfcdf2f8ab39dd8634514a9", "37c64a364fa1b6cbe19adff3f0301ad86d477ef75654ad0ced74429c3d2ecddd", "d102d04c4af891568e550771c747c66759460dd6f93d3e85cbbddf295fd5d0d8", "35b4d2edd1565f257bcb2d177dc48e2c7a2c59063a9dac4a422b7c574fd266af", "d7b53e2af901b7945570e49d5bf634831dc247d47a41562bd7d55a55d048f8e1", "6fde1af0bf44d61335f7edc36880c7bd5029b6303e13ae227dc2226fd71d9b60", "dfc788544bcae8667969ae744d575028bff4c800e1909b0695f86f6d551d6b1b", "ece96d0219733abf777644500c0c1663e1c4baab2d16b5d7b83eb62a05613c5b", "9fbeaee77f821a59dd9da67e339956595045e30225f8fd864e1ee3c0987bb49e", "7b5c68a74cab10efdfe8bced52ae5a0be079be473bba39f1f46d35409829c2ac", "68410c6cf79871a5fedf416d6314bd2d997974e7d52bc26c59eb050401459ec2", "de856d95f665a16ae25af394eb3f8c7df09126a979da8eb0a19b7744bf7dd3a3", "e8171f9dbfcd621039488fe321088b3cc1f32257154a8325ffcd8c5d001e3f97", "826ca1c4865de847097b3ad35d99f807044246e941ef24bdd4835199ef2fc0be", "b28fc0999669932499df5a4b2116b5225d7edd8b2047f1f7220a963230b60dbf", "2318a82f9ebbbaef1771d8a6c7076b71d537bb1dcbb97e7c97ad448052dfe8d8", "6c937bcb3125881500e12c740b9902cb07de6ee11d51eb726c78357d7e641d08", "b8b7b7d77985aa634f2e34480897a49b661596a67cb0ec32572112bb764b8fbf", "08ea01e3c9d4bf5627ed9b9e81d0e9034dbf974163a0402bd83674fbd0c7a3c7", "d2a049d6eb7d8cb0560268b6aabdc0461962811a92c3d733a5dc2d3127a7a774", "142fe7bf3e52ec881ec13c2495004d2a3a86084fe945663aa712e1cfbc000b8b", "fede1e02c3e0902ed5d74546da6c599d141e5d2348610df68f7d70a8fcaf66d2", "c9848ca040f31b822bd51e906a307acdfc0f720d96d5e1807e13f9dc3df7f22f"]
2023-07-03T15:53:15.610000Z TestFramework (INFO): The batch of 25 transactions has been accepted into the mempool.
2023-07-03T15:53:15.610000Z TestFramework.node0 (DEBUG): TestNode.generate() dispatches `generate` call to `generatetoaddress`
-4676-> generatetoaddress {"nblocks": 1, "address": "rbgl1qqpmtreykaj2jphmyf3358sn3wudm6thfypzzut", "maxtries": 1000000}
<-4676- [0.014817] ["46e1e2e652518ae03ce38471982047647369ba79534b86f209fa0b7350b5e891"]
-4677-> getbestblockhash {}
<-4677- [0.000486] "46e1e2e652518ae03ce38471982047647369ba79534b86f209fa0b7350b5e891"
-4678-> getrawmempool {}
<-4678- [0.000579] ["fede1e02c3e0902ed5d74546da6c599d141e5d2348610df68f7d70a8fcaf66d2", "c9848ca040f31b822bd51e906a307acdfc0f720d96d5e1807e13f9dc3df7f22f"] <--- this list should be empty

I need some more time to find a root cause and fix this.

Thanks for the update. I will also check it out.

janus commented 1 year ago

The error we are witnessing may not have much to do with the branch, bitcoinsync2022. Bitgesell has less block weight than Bitcoin.

Block Weight [10 times smaller than Bitcoin]

<= 400,000

However, the below passed confirming the above statement

self.transaction_graph_test(size=40, n_tx_to_mine=[10, 20, 30])

I am going to do thorough checks later.

gitcoindev commented 1 year ago

Hi @janus ah this makes sense! I tried to go back in time and use bisection to get a commit that works but struggled with build errors on most commits, the ones I found still had an error. But I also made the test case to pass by asking generate to mine more blocks with this patch:

diff --git a/test/functional/mempool_updatefromblock.py b/test/functional/mempool_updatefromblock.py
index 6bae162539..0504e63939 100755
--- a/test/functional/mempool_updatefromblock.py
+++ b/test/functional/mempool_updatefromblock.py
@@ -18,6 +18,9 @@ from test_framework.key import ECKey

 class MempoolUpdateFromBlockTest(BGLTestFramework):
+    def add_options(self, parser):
+        self.add_wallet_options(parser)
+
     def set_test_params(self):
         self.num_nodes = 1
         self.extra_args = [['-limitdescendantsize=1000', '-limitancestorsize=1000', '-limitancestorcount=100']]
@@ -103,7 +106,7 @@ class MempoolUpdateFromBlockTest(BGLTestFramework):
             if tx_count in n_tx_to_mine:
                 # The created transactions are mined into blocks by batches.
                 self.log.info('The batch of {} transactions has been accepted into the mempool.'.format(len(self.nodes[0].getrawmempool())))
-                block_hash = self.generate(self.nodes[0], 1)[0]
+                block_hash = self.generate(self.nodes[0], 3)[0]
                 if not first_block_hash:
                     first_block_hash = block_hash
                 assert_equal(len(self.nodes[0].getrawmempool()), 0)

with the result

$ test/functional/mempool_updatefromblock.py 
2023-07-05T15:01:55.693000Z TestFramework (INFO): Initializing test directory /tmp/BGL_func_test_gjjve9sl
2023-07-05T15:01:56.023000Z TestFramework (INFO): Creating 100 transactions...
2023-07-05T15:02:01.995000Z TestFramework (INFO): The batch of 25 transactions has been accepted into the mempool.
2023-07-05T15:02:02.014000Z TestFramework (INFO): All of the transactions from the current batch have been mined into a block.
2023-07-05T15:02:09.493000Z TestFramework (INFO): The batch of 25 transactions has been accepted into the mempool.
2023-07-05T15:02:09.506000Z TestFramework (INFO): All of the transactions from the current batch have been mined into a block.
2023-07-05T15:02:18.747000Z TestFramework (INFO): The batch of 25 transactions has been accepted into the mempool.
2023-07-05T15:02:18.767000Z TestFramework (INFO): All of the transactions from the current batch have been mined into a block.
2023-07-05T15:02:27.661000Z TestFramework (INFO): The last batch of 25 transactions has been accepted into the mempool.
2023-07-05T15:02:27.888000Z TestFramework (INFO): All of the recently mined transactions have been re-added into the mempool in 0.22525739669799805 seconds.
2023-07-05T15:02:27.888000Z TestFramework (INFO): Checking descendants/ancestors properties of all of the in-mempool transactions...
2023-07-05T15:02:28.057000Z TestFramework (INFO): Stopping nodes
2023-07-05T15:02:28.160000Z TestFramework (INFO): Cleaning up /tmp/BGL_func_test_gjjve9sl on exit
2023-07-05T15:02:28.160000Z TestFramework (INFO): Tests successful

perhaps we could use this one or your approach after you finish thorough checks.

gitcoindev commented 1 year ago

Hi @janus you were absolutely right about 400 000 block limit for BGL, I added a new list in the test case which calculated transaction weight and logged the size:

@@ -59,6 +62,7 @@ class MempoolUpdateFromBlockTest(BGLTestFramework):
         first_block_hash = ''
         tx_id = []
         tx_size = []
+        tx_weight = []
         self.log.info('Creating {} transactions...'.format(size))
         for i in range(0, size):
             self.log.debug('Preparing transaction #{}...'.format(i))
@@ -99,7 +103,10 @@ class MempoolUpdateFromBlockTest(BGLTestFramework):
             signed_raw_tx = self.nodes[0].signrawtransactionwithkey(unsigned_raw_tx, self.priv_keys)
             tx_id.append(self.nodes[0].sendrawtransaction(signed_raw_tx['hex']))
             tx_size.append(self.nodes[0].getmempoolentry(tx_id[-1])['vsize'])
-
+            tx_weight.append(self.nodes[0].getmempoolentry(tx_id[-1])['weight'])
+            self.log.info(sum(tx_weight))

which gave:

$ test/functional/mempool_updatefromblock.py 
2023-07-05T18:09:20.480000Z TestFramework (INFO): Initializing test directory /tmp/BGL_func_test_9rjttozh
2023-07-05T18:09:20.841000Z TestFramework (INFO): Creating 100 transactions...
2023-07-05T18:09:21.181000Z TestFramework (INFO): 13777
2023-07-05T18:09:21.528000Z TestFramework (INFO): 27733
2023-07-05T18:09:21.892000Z TestFramework (INFO): 42141
2023-07-05T18:09:22.240000Z TestFramework (INFO): 57001
2023-07-05T18:09:22.591000Z TestFramework (INFO): 72313
2023-07-05T18:09:22.951000Z TestFramework (INFO): 88077
2023-07-05T18:09:23.311000Z TestFramework (INFO): 104293
2023-07-05T18:09:23.670000Z TestFramework (INFO): 120961
2023-07-05T18:09:24.042000Z TestFramework (INFO): 138081
2023-07-05T18:09:24.411000Z TestFramework (INFO): 155653
2023-07-05T18:09:24.784000Z TestFramework (INFO): 173677
2023-07-05T18:09:25.161000Z TestFramework (INFO): 192153
2023-07-05T18:09:25.545000Z TestFramework (INFO): 211081
2023-07-05T18:09:25.945000Z TestFramework (INFO): 230461
2023-07-05T18:09:26.323000Z TestFramework (INFO): 250293
2023-07-05T18:09:26.707000Z TestFramework (INFO): 270577
2023-07-05T18:09:27.101000Z TestFramework (INFO): 291313
2023-07-05T18:09:27.489000Z TestFramework (INFO): 312501
2023-07-05T18:09:27.887000Z TestFramework (INFO): 334141
2023-07-05T18:09:28.248000Z TestFramework (INFO): 356233
2023-07-05T18:09:28.567000Z TestFramework (INFO): 378777
2023-07-05T18:09:28.866000Z TestFramework (INFO): 401773
2023-07-05T18:09:29.139000Z TestFramework (INFO): 425221
2023-07-05T18:09:29.424000Z TestFramework (INFO): 449121
2023-07-05T18:09:29.704000Z TestFramework (INFO): 473469
2023-07-05T18:09:29.706000Z TestFramework (INFO): The batch of 25 transactions has been accepted into the mempool.
2023-07-05T18:09:29.726000Z TestFramework (ERROR): Assertion failed

...

  File "/tests/bitgesell-2022/test/functional/test_framework/util.py", line 56, in assert_equal
    raise AssertionError("not(%s)" % " == ".join(str(arg) for arg in (thing1, thing2) + args))
AssertionError: not(4 == 0)

In this case 4 transactions were over 400 000 limit, and were not mined. I will provide a fix for this test and push to this branch now.

gitcoindev commented 1 year ago

I pushed a new commit, all functional mempool test cases are passing now

TEST                             | STATUS    | DURATION

mempool_accept.py                | ✓ Passed  | 1 s
mempool_accept_wtxid.py          | ✓ Passed  | 7 s
mempool_datacarrier.py           | ✓ Passed  | 1 s
mempool_expiry.py                | ✓ Passed  | 1 s
mempool_limit.py                 | ✓ Passed  | 4 s
mempool_package_limits.py        | ✓ Passed  | 2 s
mempool_package_onemore.py       | ✓ Passed  | 1 s
mempool_packages.py              | ✓ Passed  | 8 s
mempool_persist.py --descriptors | ✓ Passed  | 27 s
mempool_reorg.py                 | ✓ Passed  | 2 s
mempool_resurrect.py             | ✓ Passed  | 1 s
mempool_spend_coinbase.py        | ✓ Passed  | 1 s
mempool_unbroadcast.py           | ✓ Passed  | 9 s
mempool_updatefromblock.py       | ✓ Passed  | 42 s
mempool_compatibility.py         | ○ Skipped | 0 s

ALL                              | ✓ Passed  | 107 s (accumulated) 
Runtime: 51 s
janus commented 1 year ago

I pushed a new commit, all functional mempool test cases are passing now

TEST                             | STATUS    | DURATION

mempool_accept.py                | ✓ Passed  | 1 s
mempool_accept_wtxid.py          | ✓ Passed  | 7 s
mempool_datacarrier.py           | ✓ Passed  | 1 s
mempool_expiry.py                | ✓ Passed  | 1 s
mempool_limit.py                 | ✓ Passed  | 4 s
mempool_package_limits.py        | ✓ Passed  | 2 s
mempool_package_onemore.py       | ✓ Passed  | 1 s
mempool_packages.py              | ✓ Passed  | 8 s
mempool_persist.py --descriptors | ✓ Passed  | 27 s
mempool_reorg.py                 | ✓ Passed  | 2 s
mempool_resurrect.py             | ✓ Passed  | 1 s
mempool_spend_coinbase.py        | ✓ Passed  | 1 s
mempool_unbroadcast.py           | ✓ Passed  | 9 s
mempool_updatefromblock.py       | ✓ Passed  | 42 s
mempool_compatibility.py         | ○ Skipped | 0 s

ALL                              | ✓ Passed  | 107 s (accumulated) 
Runtime: 51 s

Alright.