Index: remoting/test/chromoting_test_driver.cc |
diff --git a/remoting/test/chromoting_test_driver.cc b/remoting/test/chromoting_test_driver.cc |
index 5641f1c15164b06feebd6c6149659956d4d44298..bae3ca7713427369038505a01edac12f1e4b9ff6 100644 |
--- a/remoting/test/chromoting_test_driver.cc |
+++ b/remoting/test/chromoting_test_driver.cc |
@@ -3,6 +3,7 @@ |
// found in the LICENSE file. |
#include <string> |
+#include <vector> |
#include "base/bind.h" |
#include "base/command_line.h" |
@@ -16,6 +17,8 @@ |
#include "google_apis/google_api_keys.h" |
#include "net/base/escape.h" |
#include "remoting/test/access_token_fetcher.h" |
+#include "remoting/test/host_info.h" |
+#include "remoting/test/host_list_fetcher.h" |
#include "remoting/test/refresh_token_store.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -59,17 +62,23 @@ void PrintUsage() { |
printf("************************************\n"); |
printf("\nUsage:\n"); |
- printf(" chromoting_test_driver --username=<example@gmail.com> [options]\n"); |
+ printf(" chromoting_test_driver --username=<example@gmail.com> [options]" |
+ " --hostname=<example hostname>\n"); |
printf("\nRequired Parameters:\n"); |
printf(" %s: Specifies which account to use when running tests\n", |
switches::kUserNameSwitchName); |
+ printf(" %s: Specifies which host to connect to when running tests\n", |
+ switches::kHostNameSwitchName); |
printf("\nOptional Parameters:\n"); |
printf(" %s: Exchanged for a refresh and access token for authentication\n", |
switches::kAuthCodeSwitchName); |
- printf(" %s: Path to a JSON file containing username/refresh_token KVPs\n", |
- switches::kRefreshTokenPathSwitchName); |
printf(" %s: Displays additional usage information\n", |
switches::kHelpSwitchName); |
+ printf(" %s: Path to a JSON file containing username/refresh_token KVPs\n", |
+ switches::kRefreshTokenPathSwitchName); |
+ printf(" %s: Specifies the optional logging level of the tool (0-3)." |
+ " [default: off]\n", |
+ switches::kLoggingLevelSwitchName); |
} |
void PrintAuthCodeInfo() { |
@@ -88,24 +97,25 @@ void PrintAuthCodeInfo() { |
printf("\n has been revoked or expired.\n"); |
printf(" Passing in the same auth code twice will result in an error\n"); |
- printf( |
- "\nFollow these steps to produce an auth code:\n" |
- " - Open the Authorization URL link shown below in your browser\n" |
- " - Approve the requested permissions for the tool\n" |
- " - Copy the 'code' value in the redirected URL\n" |
- " - Run the tool and pass in copied auth code as a parameter\n"); |
+ printf("\nFollow these steps to produce an auth code:\n" |
+ " - Open the Authorization URL link shown below in your browser\n" |
+ " - Approve the requested permissions for the tool\n" |
+ " - Copy the 'code' value in the redirected URL\n" |
+ " - Run the tool and pass in copied auth code as a parameter\n"); |
printf("\nAuthorization URL:\n"); |
printf("%s\n", GetAuthorizationCodeUri().c_str()); |
printf("\nRedirected URL Example:\n"); |
- printf( |
- "https://chromoting-oauth.talkgadget.google.com/talkgadget/oauth/" |
- "chrome-remote-desktop/dev?code=4/AKtf...\n"); |
+ printf("https://chromoting-oauth.talkgadget.google.com/talkgadget/oauth/" |
+ "chrome-remote-desktop/dev?code=4/AKtf...\n"); |
printf("\nTool usage example with the newly created auth code:\n"); |
- printf("chromoting_test_driver --%s=example@gmail.com --%s=4/AKtf...\n\n", |
- switches::kUserNameSwitchName, switches::kAuthCodeSwitchName); |
+ printf("chromoting_test_driver --%s=example@gmail.com --%s=example_host_name" |
+ " --%s=4/AKtf...\n\n", |
+ switches::kUserNameSwitchName, |
+ switches::kHostNameSwitchName, |
+ switches::kAuthCodeSwitchName); |
} |
void PrintJsonFileInfo() { |
@@ -122,21 +132,40 @@ void PrintJsonFileInfo() { |
printf("}\n\n"); |
printf("\nTool usage example:\n"); |
- printf("chromoting_test_driver --%s=%s --%s=./example_file.json\n\n", |
+ printf("chromoting_test_driver --%s=%s --%s=example_host_name" |
+ " --%s=./example_file.json\n\n", |
switches::kUserNameSwitchName, "username1@fauxdomain.com", |
- switches::kRefreshTokenPathSwitchName); |
+ switches::kHostNameSwitchName, switches::kRefreshTokenPathSwitchName); |
} |
-} // namespace |
+} // namespace |
+ |
+void OnHostlistRetrieved( |
+ base::Closure done_closure, |
+ std::vector<remoting::test::HostInfo>* hostlist, |
+ const std::vector<remoting::test::HostInfo>& retrieved_hostlist) { |
+ |
+ VLOG(1) << "OnHostlistRetrieved() Called"; |
+ |
+ DCHECK(hostlist); |
+ |
+ *hostlist = retrieved_hostlist; |
+ |
+ VLOG(1) << "There are " << hostlist->size() << " hosts in the hostlist"; |
+ |
+ done_closure.Run(); |
+} |
void OnAccessTokenRetrieved( |
base::Closure done_closure, |
- const std::string& access_token, |
- const std::string& refresh_token) { |
+ std::string* access_token, |
+ const std::string& retrieved_access_token, |
+ const std::string& retrieved_refresh_token) { |
- DVLOG(1) << "OnAccessTokenRetrieved() Called"; |
+ VLOG(1) << "OnAccessTokenRetrieved() Called"; |
+ VLOG(1) << "Access Token: " << retrieved_access_token; |
- DVLOG(1) << "Access Token: " << access_token; |
+ *access_token = retrieved_access_token; |
done_closure.Run(); |
} |
@@ -183,7 +212,7 @@ int main(int argc, char* argv[]) { |
LOG(ERROR) << "No username passed in, can't authenticate or run tests!"; |
return -1; |
} |
- DVLOG(1) << "Running chromoting tests as: " << username; |
+ VLOG(1) << "Running chromoting tests as: " << username; |
// Check to see if the user passed in a one time use auth_code for |
// refreshing their credentials. |
@@ -194,7 +223,7 @@ int main(int argc, char* argv[]) { |
command_line->GetSwitchValuePath(switches::kRefreshTokenPathSwitchName); |
// The hostname determines which host to initiate a session with from the list |
- // returned from the Directory service. |
+ // returned from the directory service. |
std::string hostname = |
command_line->GetSwitchValueASCII(switches::kHostNameSwitchName); |
@@ -202,7 +231,7 @@ int main(int argc, char* argv[]) { |
LOG(ERROR) << "No hostname passed in, connect to host requires hostname!"; |
return -1; |
} |
- DVLOG(1) << "Chromoting tests will connect to: " << hostname; |
+ VLOG(1) << "Chromoting tests will connect to: " << hostname; |
// TODO(TonyChun): Move this logic into a shared environment class. |
scoped_ptr<remoting::test::RefreshTokenStore> refresh_token_store = |
@@ -221,10 +250,17 @@ int main(int argc, char* argv[]) { |
// Uses the refresh token to get the access token from GAIA. |
remoting::test::AccessTokenFetcher access_token_fetcher; |
- base::RunLoop run_loop; |
+ // A RunLoop that yields to the thread's MessageLoop. |
+ scoped_ptr<base::RunLoop> run_loop; |
+ // RunLoop to handle callback from GAIA. |
+ run_loop.reset(new base::RunLoop()); |
+ |
+ std::string access_token; |
remoting::test::AccessTokenCallback access_token_callback = |
- base::Bind(&OnAccessTokenRetrieved, run_loop.QuitClosure()); |
+ base::Bind(&OnAccessTokenRetrieved, |
+ run_loop->QuitClosure(), |
+ &access_token); |
if (!auth_code.empty()) { |
access_token_fetcher.GetAccessTokenFromAuthCode(auth_code, |
@@ -235,7 +271,20 @@ int main(int argc, char* argv[]) { |
access_token_callback); |
} |
- run_loop.Run(); |
+ run_loop->Run(); |
+ |
+ // RunLoop to handle callback from directory service. |
+ run_loop.reset(new base::RunLoop()); |
+ |
+ std::vector<remoting::test::HostInfo> hostlist; |
+ remoting::test::HostListFetcher::HostlistCallback hostlist_request_callback = |
+ base::Bind(&OnHostlistRetrieved, run_loop->QuitClosure(), &hostlist); |
+ |
+ // Uses the access token to get the hostlist from the directory service. |
+ remoting::test::HostListFetcher hostlist_fetcher; |
+ hostlist_fetcher.RetrieveHostlist(access_token, hostlist_request_callback); |
+ |
+ run_loop->Run(); |
return 0; |
} |