From 4c50c21f6bfc1d88846be571055b481ab14b086f Mon Sep 17 00:00:00 2001 From: Ava Chow Date: Wed, 1 Jan 2025 23:52:33 -0500 Subject: [PATCH] tests: Check ExpandPrivate matches for both parsed descriptors --- src/script/signingprovider.h | 2 ++ src/test/descriptor_tests.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/script/signingprovider.h b/src/script/signingprovider.h index efdfd9ee566..5b1da681f83 100644 --- a/src/script/signingprovider.h +++ b/src/script/signingprovider.h @@ -136,6 +136,8 @@ public: std::vector>> GetTreeTuples() const; /** Returns true if there are any tapscripts */ bool HasScripts() const { return !m_branch.empty(); } + + bool operator==(const TaprootBuilder& other) const { return GetTreeTuples() == other.GetTreeTuples(); } }; /** Given a TaprootSpendData and the output key, reconstruct its script tree. diff --git a/src/test/descriptor_tests.cpp b/src/test/descriptor_tests.cpp index 288ffc66eb6..5d4bb2ef113 100644 --- a/src/test/descriptor_tests.cpp +++ b/src/test/descriptor_tests.cpp @@ -62,6 +62,15 @@ bool EqualDescriptor(std::string a, std::string b) return a == b; } +bool EqualSigningProviders(const FlatSigningProvider& a, const FlatSigningProvider& b) +{ + return a.scripts == b.scripts + && a.pubkeys == b.pubkeys + && a.origins == b.origins + && a.keys == b.keys + && a.tr_trees == b.tr_trees; +} + std::string UseHInsteadOfApostrophe(const std::string& desc) { std::string ret = desc; @@ -214,6 +223,15 @@ void DoCheck(std::string prv, std::string pub, const std::string& norm_pub, int BOOST_CHECK_MESSAGE(EqualDescriptor(prv, prv1), "Private ser: " + prv1 + " Private desc: " + prv); } BOOST_CHECK(!parse_pub->ToPrivateString(keys_pub, prv1)); + + // Check that both can ExpandPrivate and get the same SigningProviders + FlatSigningProvider priv_prov; + parse_priv->ExpandPrivate(0, keys_priv, priv_prov); + + FlatSigningProvider pub_prov; + parse_pub->ExpandPrivate(0, keys_priv, pub_prov); + + BOOST_CHECK_MESSAGE(EqualSigningProviders(priv_prov, pub_prov), "Private desc: " + prv + " Pub desc: " + pub); } // Check that private can produce the normalized descriptors