# Path: gslib/utils/user_agent_helper.py
# def GetUserAgent(args, metrics_off=True):
#   """Using the command arguments return a suffix for the UserAgent string.
# 
#   Args:
#     args: str[], parsed set of arguments entered in the CLI.
#     metrics_off: boolean, whether the MetricsCollector is disabled.
# 
#   Returns:
#     str, A string value that can be appended to an existing UserAgent.
#   """
#   user_agent = ' gsutil/%s' % gslib.VERSION
#   user_agent += ' (%s)' % sys.platform
#   user_agent += ' analytics/%s' % ('disabled' if metrics_off else 'enabled')
#   user_agent += ' interactive/%s' % system_util.IsRunningInteractively()
# 
#   if len(args) > 0:
#     user_agent += ' command/%s' % args[0]
# 
#     if len(args) > 2:
#       if args[0] in ['cp', 'mv', 'rsync']:
#         # Any cp, mv or rsync commands that use daisy chain mode should be noted
#         # as that represents a unique use case that may be better served by the
#         # storage transfer service.
#         try:
#           src = StorageUrlFromString(six.ensure_text(args[-2]))
#           dst = StorageUrlFromString(six.ensure_text(args[-1]))
#           if src.IsCloudUrl() and dst.IsCloudUrl() and src.scheme != dst.scheme:
#             user_agent += '-DaisyChain'
#         except InvalidUrlError:
#           pass
#       elif args[0] == 'rewrite':
#         if '-k' in args:
#           # Rewrite encryption key.
#           user_agent += '-k'
#         if '-s' in args:
#           # Rewrite storage class.
#           user_agent += '-s'
# 
#   if system_util.InvokedViaCloudSdk():
#     user_agent += ' google-cloud-sdk'
#     if system_util.CloudSdkVersion():
#       user_agent += '/%s' % system_util.CloudSdkVersion()
# 
#   return user_agent


from gslib.utils import system_util
from gslib.utils.user_agent_helper import GetUserAgent
from six import add_move, MovedModule
from six.moves import mock
import gslib.tests.testcase as testcase
import six
        GetUserAgent(['cp', '-r', '-Z', '1.txt', 'gs://dst']), r"command/cp$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testCpNotEnoughArgs(self, mock_invoked):
    mock_invoked.return_value = False
    self.assertRegexpMatches(GetUserAgent(['cp']), r"command/cp$")
    self.assertRegexpMatches(GetUserAgent(['cp', '1.txt']), r"command/cp$")
    self.assertRegexpMatches(GetUserAgent(['cp', '-r', '1.ts']), r"command/cp$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testCpEncoding(self, mock_invoked):
    mock_invoked.return_value = False
    self.assertRegexpMatches(GetUserAgent(['cp', 'öne', 'twö']), r"command/cp$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testRsync(self, mock_invoked):
    mock_invoked.return_value = False
    self.assertRegexpMatches(GetUserAgent(['rsync', '1.txt', 'gs://dst']),
                             r"command/rsync$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testMv(self, mock_invoked):
    mock_invoked.return_value = False
    self.assertRegexpMatches(
        GetUserAgent(['mv', 'gs://src/1.txt', 'gs://dst/1.txt']),
        r"command/mv$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testCpCloudToCloud(self, mock_invoked):
    mock_invoked.return_value = False

# Path: gslib/utils/user_agent_helper.py
# def GetUserAgent(args, metrics_off=True):
#   """Using the command arguments return a suffix for the UserAgent string.
# 
#   Args:
#     args: str[], parsed set of arguments entered in the CLI.
#     metrics_off: boolean, whether the MetricsCollector is disabled.
# 
#   Returns:
#     str, A string value that can be appended to an existing UserAgent.
#   """
#   user_agent = ' gsutil/%s' % gslib.VERSION
#   user_agent += ' (%s)' % sys.platform
#   user_agent += ' analytics/%s' % ('disabled' if metrics_off else 'enabled')
#   user_agent += ' interactive/%s' % system_util.IsRunningInteractively()
# 
#   if len(args) > 0:
#     user_agent += ' command/%s' % args[0]
# 
#     if len(args) > 2:
#       if args[0] in ['cp', 'mv', 'rsync']:
#         # Any cp, mv or rsync commands that use daisy chain mode should be noted
#         # as that represents a unique use case that may be better served by the
#         # storage transfer service.
#         try:
#           src = StorageUrlFromString(six.ensure_text(args[-2]))
#           dst = StorageUrlFromString(six.ensure_text(args[-1]))
#           if src.IsCloudUrl() and dst.IsCloudUrl() and src.scheme != dst.scheme:
#             user_agent += '-DaisyChain'
#         except InvalidUrlError:
#           pass
#       elif args[0] == 'rewrite':
#         if '-k' in args:
#           # Rewrite encryption key.
#           user_agent += '-k'
#         if '-s' in args:
#           # Rewrite storage class.
#           user_agent += '-s'
# 
#   if system_util.InvokedViaCloudSdk():
#     user_agent += ' google-cloud-sdk'
#     if system_util.CloudSdkVersion():
#       user_agent += '/%s' % system_util.CloudSdkVersion()
# 
#   return user_agent


# Path: gslib/tests/test_user_agent_helper.py
from gslib.utils import system_util
from gslib.utils.user_agent_helper import GetUserAgent
from six import add_move, MovedModule
from six.moves import mock
import gslib.tests.testcase as testcase
import six

        GetUserAgent(['cp', '-r', '-Z', '1.txt', 'gs://dst']), r"command/cp$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testCpNotEnoughArgs(self, mock_invoked):
    mock_invoked.return_value = False
    self.assertRegexpMatches(GetUserAgent(['cp']), r"command/cp$")
    self.assertRegexpMatches(GetUserAgent(['cp', '1.txt']), r"command/cp$")
    self.assertRegexpMatches(GetUserAgent(['cp', '-r', '1.ts']), r"command/cp$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testCpEncoding(self, mock_invoked):
    mock_invoked.return_value = False
    self.assertRegexpMatches(GetUserAgent(['cp', 'öne', 'twö']), r"command/cp$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testRsync(self, mock_invoked):
    mock_invoked.return_value = False
    self.assertRegexpMatches(GetUserAgent(['rsync', '1.txt', 'gs://dst']),
                             r"command/rsync$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testMv(self, mock_invoked):
    mock_invoked.return_value = False
    self.assertRegexpMatches(
        GetUserAgent(['mv', 'gs://src/1.txt', 'gs://dst/1.txt']),
        r"command/mv$")

  @mock.patch.object(system_util, 'InvokedViaCloudSdk')
  def testCpCloudToCloud(self, mock_invoked):
    mock_invoked.return_value = False

    self.assertRegexpMatches(GetUserAgent(['cp', '-r', 'gs://src', 'gs://dst']),