From ad6eaa5d8329f89cc62bd88a4ea12f3f9420d321 Mon Sep 17 00:00:00 2001
From: "Penn (Dapeng) Zhang" <zdapeng@google.com>
Date: Fri, 14 Aug 2020 10:58:28 -0700
Subject: [PATCH] Add command flag to enable xDS v3 for xDS interop test

---
 tools/run_tests/run_xds_tests.py | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/tools/run_tests/run_xds_tests.py b/tools/run_tests/run_xds_tests.py
index ba8819d7d55..d605d004d6d 100755
--- a/tools/run_tests/run_xds_tests.py
+++ b/tools/run_tests/run_xds_tests.py
@@ -17,6 +17,7 @@
 import argparse
 import googleapiclient.discovery
 import grpc
+import json
 import logging
 import os
 import random
@@ -109,6 +110,10 @@ argp.add_argument(
     default='',
     help='File to reference via GRPC_XDS_BOOTSTRAP. Disables built-in '
     'bootstrap generation')
+argp.add_argument(
+    '--xds_v3_support',
+    default=False,
+    help='Support xDS v3 via GRPC_XDS_EXPERIMENTAL_V3_SUPPORT')
 argp.add_argument(
     '--client_cmd',
     default=None,
@@ -240,7 +245,8 @@ _BOOTSTRAP_TEMPLATE = """
         "type": "google_default",
         "config": {{}}
       }}
-    ]
+    ],
+    "server_features": {server_features}
   }}]
 }}""" % (args.network.split('/')[-1], args.zone, args.xds_server)
 
@@ -1709,20 +1715,25 @@ try:
     wait_for_healthy_backends(gcp, backend_service, instance_group)
 
     if args.test_case:
+        client_env = dict(os.environ)
+        bootstrap_server_features = []
         if gcp.service_port == _DEFAULT_SERVICE_PORT:
             server_uri = service_host_name
         else:
             server_uri = service_host_name + ':' + str(gcp.service_port)
+        if args.xds_v3_support:
+            client_env['GRPC_XDS_EXPERIMENTAL_V3_SUPPORT'] = 'true'
+            bootstrap_server_features.append('xds_v3')
         if args.bootstrap_file:
             bootstrap_path = os.path.abspath(args.bootstrap_file)
         else:
             with tempfile.NamedTemporaryFile(delete=False) as bootstrap_file:
                 bootstrap_file.write(
                     _BOOTSTRAP_TEMPLATE.format(
-                        node_id=socket.gethostname()).encode('utf-8'))
+                        node_id=socket.gethostname()).encode('utf-8'),
+                        server_features=json.dumps(bootstrap_server_features))
                 bootstrap_path = bootstrap_file.name
-        client_env = dict(os.environ, GRPC_XDS_BOOTSTRAP=bootstrap_path)
-
+        client_env['GRPC_XDS_BOOTSTRAP'] = bootstrap_path
         test_results = {}
         failed_tests = []
         for test_case in args.test_case: