Add a helper to return all the secure types
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index df9aae7..ce8e4d2 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -1365,25 +1365,42 @@
   EXPECT_EQ("*.test.youtube.com", ToString(auth_ctx->GetPeerIdentity()[2]));
 }
 
-INSTANTIATE_TEST_CASE_P(
-    End2end, End2endTest,
-    ::testing::Values(TestScenario(false, kInsecureCredentialsType),
-                      TestScenario(false, kTlsCredentialsType)));
+std::vector<TestScenario> CreateTestScenarios(bool use_proxy,
+                                              bool test_insecure,
+                                              bool test_secure) {
+  std::vector<TestScenario> scenarios;
+  std::vector<grpc::string> credentials_types;
+  if (test_secure) {
+    credentials_types = GetSecureCredentialsTypeList();
+  }
+  if (test_insecure) {
+    credentials_types.push_back(kInsecureCredentialsType);
+  }
+  for (auto it = credentials_types.begin(); it != credentials_types.end();
+       ++it) {
+    scenarios.push_back(TestScenario(false, *it));
+    if (use_proxy) {
+      scenarios.push_back(TestScenario(true, *it));
+    }
+  }
+  return scenarios;
+}
 
-INSTANTIATE_TEST_CASE_P(
-    End2endServerTryCancel, End2endServerTryCancelTest,
-    ::testing::Values(TestScenario(false, kInsecureCredentialsType)));
+INSTANTIATE_TEST_CASE_P(End2end, End2endTest,
+                        ::testing::ValuesIn(CreateTestScenarios(false, true,
+                                                                true)));
 
-INSTANTIATE_TEST_CASE_P(
-    ProxyEnd2end, ProxyEnd2endTest,
-    ::testing::Values(TestScenario(false, kInsecureCredentialsType),
-                      TestScenario(false, kTlsCredentialsType),
-                      TestScenario(true, kInsecureCredentialsType),
-                      TestScenario(true, kTlsCredentialsType)));
+INSTANTIATE_TEST_CASE_P(End2endServerTryCancel, End2endServerTryCancelTest,
+                        ::testing::ValuesIn(CreateTestScenarios(false, true,
+                                                                false)));
+
+INSTANTIATE_TEST_CASE_P(ProxyEnd2end, ProxyEnd2endTest,
+                        ::testing::ValuesIn(CreateTestScenarios(true, true,
+                                                                true)));
 
 INSTANTIATE_TEST_CASE_P(SecureEnd2end, SecureEnd2endTest,
-                        ::testing::Values(TestScenario(false,
-                                                       kTlsCredentialsType)));
+                        ::testing::ValuesIn(CreateTestScenarios(false, false,
+                                                                true)));
 
 }  // namespace
 }  // namespace testing
diff --git a/test/cpp/util/test_credentials_provider.cc b/test/cpp/util/test_credentials_provider.cc
index f8380cd..6965170 100644
--- a/test/cpp/util/test_credentials_provider.cc
+++ b/test/cpp/util/test_credentials_provider.cc
@@ -70,5 +70,11 @@
   return nullptr;
 }
 
+std::vector<grpc::string> GetSecureCredentialsTypeList() {
+  std::vector<grpc::string> types;
+  types.push_back(kTlsCredentialsType);
+  return types;
+}
+
 }  // namespace testing
 }  // namespace grpc
diff --git a/test/cpp/util/test_credentials_provider.h b/test/cpp/util/test_credentials_provider.h
index 4f25e3b..f4105d9 100644
--- a/test/cpp/util/test_credentials_provider.h
+++ b/test/cpp/util/test_credentials_provider.h
@@ -55,6 +55,9 @@
 std::shared_ptr<ServerCredentials> GetServerCredentials(
     const grpc::string& type);
 
+// Provide a list of secure credentials type.
+std::vector<grpc::string> GetSecureCredentialsTypeList();
+
 }  // namespace testing
 }  // namespace grpc