# Copyright 2013 The Chromium Authors
# 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


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),
  )
