# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")

go_library(
    name = "fakes",
    testonly = True,
    srcs = [
        "gce.go",
        "gcs.go",
        "time.go",
    ],
    importpath = "github.com/GoogleCloudPlatform/cos-customizer/src/pkg/fakes",
    visibility = ["//visibility:public"],
    deps = [
        "@com_google_cloud_go_storage//:storage",
        "@org_golang_google_api//compute/v1:compute",
        "@org_golang_google_api//googleapi",
        "@org_golang_google_api//option",
    ],
)

go_test(
    name = "fakes_test",
    srcs = [
        "gce_test.go",
        "gcs_test.go",
    ],
    embed = [":fakes"],
    deps = [
        "@com_github_google_go_cmp//cmp",
        "@com_github_google_go_cmp//cmp/cmpopts",
        "@com_google_cloud_go_storage//:storage",
        "@org_golang_google_api//compute/v1:compute",
        "@org_golang_google_api//googleapi",
        "@org_golang_google_api//iterator",
    ],
)
