bssl_shim: Make a general SetValueFlag helper in test_config.cc

This captures any parameterless flag whose behavior is to set some field
to some value.

Change-Id: Ib49c4cd738ae8cd85009031d5720aa4f7bed2649
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/89367
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Lily Chen <chlily@google.com>
diff --git a/ssl/test/test_config.cc b/ssl/test/test_config.cc
index abd89db..90ffee1 100644
--- a/ssl/test/test_config.cc
+++ b/ssl/test/test_config.cc
@@ -70,36 +70,20 @@
   std::function<bool(Config *config, const char *param)> set_param;
 };
 
+template <typename Config, typename T, typename U>
+Flag<Config> SetValueFlag(const char *name, T Config::*field, U value,
+                          bool skip_handshaker = false) {
+  return Flag<Config>{name, /*has_param=*/false, skip_handshaker,
+                      [=](Config *config, const char *param) -> bool {
+                        config->*field = value;
+                        return true;
+                      }};
+}
+
 template <typename Config>
 Flag<Config> BoolFlag(const char *name, bool Config::*field,
                       bool skip_handshaker = false) {
-  return Flag<Config>{name, false, skip_handshaker,
-                      [=](Config *config, const char *) -> bool {
-                        config->*field = true;
-                        return true;
-                      }};
-}
-
-template <typename Config>
-Flag<Config> OptionalBoolTrueFlag(const char *name,
-                                  std::optional<bool> Config::*field,
-                                  bool skip_handshaker = false) {
-  return Flag<Config>{name, false, skip_handshaker,
-                      [=](Config *config, const char *) -> bool {
-                        config->*field = true;
-                        return true;
-                      }};
-}
-
-template <typename Config>
-Flag<Config> OptionalBoolFalseFlag(const char *name,
-                                   std::optional<bool> Config::*field,
-                                   bool skip_handshaker = false) {
-  return Flag<Config>{name, false, skip_handshaker,
-                      [=](Config *config, const char *) -> bool {
-                        config->*field = false;
-                        return true;
-                      }};
+  return SetValueFlag(name, field, true, skip_handshaker);
 }
 
 template <typename T>
@@ -196,19 +180,6 @@
                       }};
 }
 
-// Defines a flag which resets a std::optional field to its default constructed
-// value.
-template <typename Config, typename T>
-Flag<Config> OptionalDefaultInitFlag(const char *name,
-                                     std::optional<T> Config::*field,
-                                     bool skip_handshaker = false) {
-  return Flag<Config>{name, false, skip_handshaker,
-                      [=](Config *config, const char *) -> bool {
-                        (config->*field).emplace();
-                        return true;
-                      }};
-}
-
 template <typename Config>
 Flag<Config> StringFlag(const char *name, std::string Config::*field,
                         bool skip_handshaker = false) {
@@ -370,7 +341,8 @@
         IntVectorFlag("-curves", &TestConfig::curves),
         IntVectorFlag("-curves-flags", &TestConfig::curves_flags),
         OptionalIntVectorFlag("-key-shares", &TestConfig::key_shares),
-        OptionalDefaultInitFlag("-no-key-shares", &TestConfig::key_shares),
+        SetValueFlag("-no-key-shares", &TestConfig::key_shares,
+                     std::vector<uint16_t>{}),
         IntVectorFlag("-server-supported-groups-hint",
                       &TestConfig::server_supported_groups_hint),
         StringFlag("-trust-cert", &TestConfig::trust_cert),
@@ -583,10 +555,10 @@
         BoolFlag("-fips-202205", &TestConfig::fips_202205),
         BoolFlag("-wpa-202304", &TestConfig::wpa_202304),
         BoolFlag("-cnsa-202407", &TestConfig::cnsa_202407),
-        OptionalBoolTrueFlag("-expect-peer-match-trust-anchor",
-                             &TestConfig::expect_peer_match_trust_anchor),
-        OptionalBoolFalseFlag("-expect-no-peer-match-trust-anchor",
-                              &TestConfig::expect_peer_match_trust_anchor),
+        SetValueFlag("-expect-peer-match-trust-anchor",
+                     &TestConfig::expect_peer_match_trust_anchor, true),
+        SetValueFlag("-expect-no-peer-match-trust-anchor",
+                     &TestConfig::expect_peer_match_trust_anchor, false),
         OptionalBase64Flag("-expect-peer-available-trust-anchors",
                            &TestConfig::expect_peer_available_trust_anchors),
         OptionalBase64Flag("-requested-trust-anchors",
@@ -638,10 +610,10 @@
         IntFlag("-private-key-delay-ms", &TestConfig::private_key_delay_ms),
         BoolFlag("-resumption-across-names-enabled",
                  &TestConfig::resumption_across_names_enabled),
-        OptionalBoolTrueFlag("-expect-resumable-across-names",
-                             &TestConfig::expect_resumable_across_names),
-        OptionalBoolFalseFlag("-expect-not-resumable-across-names",
-                              &TestConfig::expect_resumable_across_names),
+        SetValueFlag("-expect-resumable-across-names",
+                     &TestConfig::expect_resumable_across_names, true),
+        SetValueFlag("-expect-not-resumable-across-names",
+                     &TestConfig::expect_resumable_across_names, false),
         BoolFlag("-no-server-name-ack", &TestConfig::no_server_name_ack),
     };
     std::sort(ret.begin(), ret.end(), FlagNameComparator{});