Remote XBuddy function.

Locate artifacts on GS, given aliases for versions.
BUG=chromium:252942
TEST=Unittests, Manual
xbuddy_unittests.py updated for new functions
Run devserver and query xbuddy using any path with remote aliases.
e.g.
http://{your_ip}:8080/xbuddy/parrot/latest-stable/test
http://{your_ip}:8080/xbuddy/parrot/latest-official/test
http://{your_ip}:8080/xbuddy/parrot/latest-official-paladin/test
http://{your_ip}:8080/xbuddy/parrot/latest-R27/test

Change-Id: I171e23cbfbaa6ce181b09393c2c6e6dfb12baca5
Reviewed-on: https://gerrit.chromium.org/gerrit/61802
Commit-Queue: Joy Chen <joychen@chromium.org>
Reviewed-by: Joy Chen <joychen@chromium.org>
Tested-by: Joy Chen <joychen@chromium.org>
diff --git a/gsutil_util_unittest.py b/gsutil_util_unittest.py
index 8225a75..638c5fe 100755
--- a/gsutil_util_unittest.py
+++ b/gsutil_util_unittest.py
@@ -164,6 +164,31 @@
     self.assertEqual(returned_name, None)
     self.mox.VerifyAll()
 
+  def testGetLatestVersionFromGSDir(self):
+    """Test that we can get the most recent version from gsutil calls."""
+    self.mox.StubOutWithMock(gsutil_util, 'GSUtilRun')
+    mock_data1 = '''gs://chromeos-releases/stable-channel/parrot/3701.96.0/
+    gs://chromeos-releases/stable-channel/parrot/3701.98.0/
+    gs://chromeos-releases/stable-channel/parrot/3912.100.0/
+    gs://chromeos-releases/stable-channel/parrot/3912.101.0/
+    gs://chromeos-releases/stable-channel/parrot/3912.79.0/
+    gs://chromeos-releases/stable-channel/parrot/3912.79.1/'''
+    gsutil_util.GSUtilRun(mox.IgnoreArg(),
+                          mox.IgnoreArg()).AndReturn(mock_data1)
+    mock_data2 = '''gs://chromeos-image-archive/parrot-release/R28-3912.101.0/a
+    gs://chromeos-image-archive/parrot-release/R28-3912.101.0/image.zip
+    gs://chromeos-image-archive/parrot-release/R28-3912.101.0/index.html
+    gs://chromeos-image-archive/parrot-release/R28-3912.101.0/metadata.json
+    gs://chromeos-image-archive/parrot-release/R28-3912.101.0/stateful.tgz'''
+    gsutil_util.GSUtilRun(mox.IgnoreArg(),
+                          mox.IgnoreArg()).AndReturn(mock_data2)
+    self.mox.ReplayAll()
+    url = ''
+    self.assertEqual(gsutil_util.GetLatestVersionFromGSDir(url),
+                     '3912.101.0')
+    self.assertEqual(gsutil_util.GetLatestVersionFromGSDir(url),
+                     'R28-3912.101.0')
+    self.mox.VerifyAll()
 
 if __name__ == '__main__':
   unittest.main()