Improve TestConfig flags for initial and resumption connections.

Change-Id: I97a2920a08f995ea70425ad9126f1dced067f2a4
Reviewed-on: https://boringssl-review.googlesource.com/16084
Reviewed-by: Steven Valdez <svaldez@google.com>
Commit-Queue: Steven Valdez <svaldez@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/ssl/test/test_config.cc b/ssl/test/test_config.cc
index 5c5d346..d7c3239 100644
--- a/ssl/test/test_config.cc
+++ b/ssl/test/test_config.cc
@@ -85,7 +85,6 @@
   { "-use-ticket-callback", &TestConfig::use_ticket_callback },
   { "-renew-ticket", &TestConfig::renew_ticket },
   { "-enable-early-data", &TestConfig::enable_early_data },
-  { "-enable-resume-early-data", &TestConfig::enable_resume_early_data },
   { "-enable-client-custom-extension",
     &TestConfig::enable_client_custom_extension },
   { "-enable-server-custom-extension",
@@ -125,8 +124,6 @@
   { "-expect-no-session-id", &TestConfig::expect_no_session_id },
   { "-expect-accept-early-data", &TestConfig::expect_accept_early_data },
   { "-expect-reject-early-data", &TestConfig::expect_reject_early_data },
-  { "-expect-no-alpn", &TestConfig::expect_no_alpn },
-  { "-expect-no-resume-alpn", &TestConfig::expect_no_resume_alpn },
   { "-no-op-extra-handshake", &TestConfig::no_op_extra_handshake },
   { "-handshake-twice", &TestConfig::handshake_twice },
   { "-allow-unknown-alpn-protos", &TestConfig::allow_unknown_alpn_protos },
@@ -145,10 +142,8 @@
   { "-host-name", &TestConfig::host_name },
   { "-advertise-alpn", &TestConfig::advertise_alpn },
   { "-expect-alpn", &TestConfig::expected_alpn },
-  { "-expect-resume-alpn", &TestConfig::expected_resume_alpn },
   { "-expect-advertised-alpn", &TestConfig::expected_advertised_alpn },
   { "-select-alpn", &TestConfig::select_alpn },
-  { "-select-resume-alpn", &TestConfig::select_resume_alpn },
   { "-psk", &TestConfig::psk },
   { "-psk-identity", &TestConfig::psk_identity },
   { "-srtp-profiles", &TestConfig::srtp_profiles },
@@ -182,7 +177,6 @@
   { "-expect-peer-signature-algorithm",
     &TestConfig::expect_peer_signature_algorithm },
   { "-expect-curve-id", &TestConfig::expect_curve_id },
-  { "-expect-resume-curve-id", &TestConfig::expect_resume_curve_id },
   { "-initial-timeout-duration-ms", &TestConfig::initial_timeout_duration_ms },
   { "-max-cert-list", &TestConfig::max_cert_list },
   { "-expect-cipher-aes", &TestConfig::expect_cipher_aes },
@@ -198,28 +192,54 @@
   { "-verify-prefs", &TestConfig::verify_prefs },
 };
 
+const char kInit[] = "-on-initial";
+const char kResume[] = "-on-resume";
+
 }  // namespace
 
-bool ParseConfig(int argc, char **argv, TestConfig *out_config) {
+bool ParseConfig(int argc, char **argv, bool is_resume,
+                 TestConfig *out_config) {
   for (int i = 0; i < argc; i++) {
-    bool *bool_field = FindField(out_config, kBoolFlags, argv[i]);
+    bool skip = false;
+    char *flag = argv[i];
+    const char *prefix = is_resume ? kResume : kInit;
+    const char *opposite = is_resume ? kInit : kResume;
+    if (strncmp(flag, prefix, strlen(prefix)) == 0) {
+      flag = flag + strlen(prefix);
+      for (int j = 0; j < argc; j++) {
+        if (strcmp(argv[j], flag) == 0) {
+          fprintf(stderr, "Can't use default and prefixed arguments: %s\n",
+                  flag);
+          return false;
+        }
+      }
+    } else if (strncmp(flag, opposite, strlen(opposite)) == 0) {
+      flag = flag + strlen(opposite);
+      skip = true;
+    }
+
+    bool *bool_field = FindField(out_config, kBoolFlags, flag);
     if (bool_field != NULL) {
-      *bool_field = true;
+      if (!skip) {
+        *bool_field = true;
+      }
       continue;
     }
 
-    std::string *string_field = FindField(out_config, kStringFlags, argv[i]);
+    std::string *string_field = FindField(out_config, kStringFlags, flag);
     if (string_field != NULL) {
       i++;
       if (i >= argc) {
         fprintf(stderr, "Missing parameter\n");
         return false;
       }
-      string_field->assign(argv[i]);
+      if (!skip) {
+        string_field->assign(argv[i]);
+      }
       continue;
     }
 
-    std::string *base64_field = FindField(out_config, kBase64Flags, argv[i]);
+    std::string *base64_field = FindField(out_config, kBase64Flags, flag);
     if (base64_field != NULL) {
       i++;
       if (i >= argc) {
@@ -238,23 +258,28 @@
         fprintf(stderr, "Invalid base64: %s\n", argv[i]);
         return false;
       }
-      base64_field->assign(reinterpret_cast<const char *>(decoded.get()), len);
+      if (!skip) {
+        base64_field->assign(reinterpret_cast<const char *>(decoded.get()),
+                             len);
+      }
       continue;
     }
 
-    int *int_field = FindField(out_config, kIntFlags, argv[i]);
+    int *int_field = FindField(out_config, kIntFlags, flag);
     if (int_field) {
       i++;
       if (i >= argc) {
         fprintf(stderr, "Missing parameter\n");
         return false;
       }
-      *int_field = atoi(argv[i]);
+      if (!skip) {
+        *int_field = atoi(argv[i]);
+      }
       continue;
     }
 
     std::vector<int> *int_vector_field =
-        FindField(out_config, kIntVectorFlags, argv[i]);
+        FindField(out_config, kIntVectorFlags, flag);
     if (int_vector_field) {
       i++;
       if (i >= argc) {
@@ -263,11 +288,13 @@
       }
 
       // Each instance of the flag adds to the list.
-      int_vector_field->push_back(atoi(argv[i]));
+      if (!skip) {
+        int_vector_field->push_back(atoi(argv[i]));
+      }
       continue;
     }
 
-    fprintf(stderr, "Unknown argument: %s\n", argv[i]);
+    fprintf(stderr, "Unknown argument: %s\n", flag);
     return false;
   }