# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

DEPS = [
  'gsutil',
  'recipe_engine/path',
]


def RunSteps(api):
  api.gsutil.ensure_gsutil()

  # Ensuring again should have no effect.
  api.gsutil.ensure_gsutil()

  local_file = api.path['cleanup'].join('file')
  bucket = 'example'
  cloud_file = api.gsutil.join('path/', 'to', 'file/')

  api.gsutil.upload(bucket, local_file, cloud_file,
      metadata={
        'Test-Field': 'value',
        'Remove-Me': None,
        'x-custom-field': 'custom-value',
        'Cache-Control': 'no-cache',
      },
      unauthenticated_url=True)

  # Upload in parallel.
  api.gsutil.upload(bucket, local_file, cloud_file,
      metadata={
        'Test-Field': 'value',
        'Remove-Me': None,
        'x-custom-field': 'custom-value',
        'Cache-Control': 'no-cache',
      },
      unauthenticated_url=True,
      parallel_upload=True,
      multithreaded=True)

  api.gsutil('cp',
      'gs://%s/some/random/path/**' % bucket,
      'gs://%s/staging' % bucket)

  api.gsutil('cp',
      api.gsutil.normalize('https://storage.cloud.google.com/' + bucket + '/' + cloud_file),
      local_file,
      name='gsutil download url')

  # Non-normalized URL.
  try:
    api.gsutil('cp',
        api.gsutil.normalize('https://someotherservice.localhost'),
        local_file,
        name='gsutil download url')
  except AssertionError:
    pass

  new_cloud_file = 'staging/to/file'
  new_local_file = api.path['cleanup'].join('erang')
  api.gsutil('cp', 'gs://%s/%s' % (bucket, new_cloud_file), new_local_file)

  private_key_file = 'path/to/key'
  _signed_url = api.gsutil('signurl', private_key_file, bucket, cloud_file)
  api.gsutil('rm', 'gs://%s/%s' % (bucket, new_cloud_file))

  api.gsutil('ls', 'gs://%s/foo' % bucket)
  api.gsutil.copy(bucket, cloud_file, bucket, new_cloud_file)

  api.gsutil('cat', 'gs://%s/foo' % bucket)


def GenTests(api):
  yield api.test('basic')
