MCPcopy Create free account
hub / github.com/ElementsProject/elements / DoCheck

Function DoCheck

src/test/descriptor_tests.cpp:129–343  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

127}
128
129void DoCheck(const std::string& prv, const std::string& pub, const std::string& norm_prv, const std::string& norm_pub, int flags, const std::vector<std::vector<std::string>>& scripts, const std::optional<OutputType>& type, const std::set<std::vector<uint32_t>>& paths = ONLY_EMPTY,
130 bool replace_apostrophe_with_h_in_prv=false, bool replace_apostrophe_with_h_in_pub=false)
131{
132 FlatSigningProvider keys_priv, keys_pub;
133 std::set<std::vector<uint32_t>> left_paths = paths;
134 std::string error;
135
136 std::unique_ptr<Descriptor> parse_priv;
137 std::unique_ptr<Descriptor> parse_pub;
138 // Check that parsing succeeds.
139 if (replace_apostrophe_with_h_in_prv) {
140 parse_priv = Parse(UseHInsteadOfApostrophe(prv), keys_priv, error);
141 } else {
142 parse_priv = Parse(prv, keys_priv, error);
143 }
144 if (replace_apostrophe_with_h_in_pub) {
145 parse_pub = Parse(UseHInsteadOfApostrophe(pub), keys_pub, error);
146 } else {
147 parse_pub = Parse(pub, keys_pub, error);
148 }
149
150 BOOST_CHECK(parse_priv);
151 BOOST_CHECK(parse_pub);
152
153 // Check that the correct OutputType is inferred
154 BOOST_CHECK(parse_priv->GetOutputType() == type);
155 BOOST_CHECK(parse_pub->GetOutputType() == type);
156
157 // Check private keys are extracted from the private version but not the public one.
158 BOOST_CHECK(keys_priv.keys.size());
159 BOOST_CHECK(!keys_pub.keys.size());
160
161 // Check that both versions serialize back to the public version.
162 std::string pub1 = parse_priv->ToString();
163 std::string pub2 = parse_pub->ToString();
164 BOOST_CHECK(EqualDescriptor(pub, pub1));
165 BOOST_CHECK(EqualDescriptor(pub, pub2));
166
167 // Check that both can be serialized with private key back to the private version, but not without private key.
168 if (!(flags & MISSING_PRIVKEYS)) {
169 std::string prv1;
170 BOOST_CHECK(parse_priv->ToPrivateString(keys_priv, prv1));
171 BOOST_CHECK(EqualDescriptor(prv, prv1));
172 BOOST_CHECK(!parse_priv->ToPrivateString(keys_pub, prv1));
173 BOOST_CHECK(parse_pub->ToPrivateString(keys_priv, prv1));
174 BOOST_CHECK(EqualDescriptor(prv, prv1));
175 BOOST_CHECK(!parse_pub->ToPrivateString(keys_pub, prv1));
176 }
177
178 // Check that private can produce the normalized descriptors
179 std::string norm1;
180 BOOST_CHECK(parse_priv->ToNormalizedString(keys_priv, norm1));
181 BOOST_CHECK(EqualDescriptor(norm1, norm_pub));
182 BOOST_CHECK(parse_pub->ToNormalizedString(keys_priv, norm1));
183 BOOST_CHECK(EqualDescriptor(norm1, norm_pub));
184
185 // Check whether IsRange on both returns the expected result
186 BOOST_CHECK_EQUAL(parse_pub->IsRange(), (flags & RANGE) != 0);

Callers 1

CheckFunction · 0.85

Calls 15

ParseFunction · 0.85
UseHInsteadOfApostropheFunction · 0.85
EqualDescriptorFunction · 0.85
GetKeyDataFunction · 0.85
GetKeyOriginDataFunction · 0.85
CountXpubsFunction · 0.85
IsSolvableFunction · 0.85
MergeFunction · 0.85
ProduceSignatureFunction · 0.85
InferDescriptorFunction · 0.85
ExpandMethod · 0.80
ExpandFromCacheMethod · 0.80

Tested by

no test coverage detected