# 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.

from recipe_engine import post_process
from recipe_engine.recipe_api import Property

PYTHON_VERSION_COMPATIBILITY = 'PY2+3'

DEPS = [
  'gsutil',
  'recipe_engine/platform',
  'recipe_engine/properties',
]

PROPERTIES = {
  'boto_configs': Property(default={}, kind=dict),
}


def RunSteps(api, boto_configs):
  with api.gsutil.configure_gsutil(**boto_configs):
    api.gsutil(['cp', 'gs://some/gs/path', '/some/local/path'])


def GenTests(api):
  yield api.test(
      'no_args',
      api.platform('linux', 64),
      api.post_process(post_process.DropExpectation),
  )

  yield api.test(
      'no_env',
      api.properties(boto_configs={'some_config': 'some_val'}),
      api.post_process(post_process.DropExpectation),
  )

  yield api.test(
      'mac',
      api.platform('mac', 64),
      api.post_process(post_process.DropExpectation),
  )

  yield api.test(
      'with_boto_config',
      api.properties(boto_configs={'some_config': 'some_val'}),
      api.properties.environ(
          BOTO_CONFIG='/some/boto/config'
      ),
      api.post_check(lambda check, steps: \
          check(steps['gsutil cp'].env['BOTO_CONFIG'] is None)),
      api.post_check(lambda check, steps: \
          check('/some/boto/config' in steps['gsutil cp'].env['BOTO_PATH'])),
      api.post_process(post_process.DropExpectation),
  )

  yield api.test(
      'with_boto_path',
      api.properties(boto_configs={'some_config': 'some_val'}),
      api.properties.environ(
          BOTO_PATH='/some/boto/path'
      ),
      api.post_check(lambda check, steps: \
          check(steps['gsutil cp'].env['BOTO_CONFIG'] is None)),
      api.post_check(lambda check, steps: \
          check('/some/boto/path' in steps['gsutil cp'].env['BOTO_PATH'])),
      api.post_process(post_process.DropExpectation),
  )