package gpuconfig

import (
	"context"
	"testing"

	"cos.googlesource.com/cos/tools.git/src/pkg/fakes"
	"cos.googlesource.com/cos/tools.git/src/pkg/gpuconfig/pb"
	"github.com/google/go-cmp/cmp"
	"google.golang.org/protobuf/testing/protocmp"
)

const toolchainTarballPath = "gs://chromiumos-sdk/2021/06/x86_64-cros-linux-gnu-2021.06.26.094653.tar.xz"

var testGCSObjects = map[string][]byte{
	"/cos-kernel-artifacts/builds/5.15.55-34.m101/toolchain_url.x86_64": []byte(toolchainTarballPath),
}

func TestGenerateKernelCIConfigs(t *testing.T) {
	gcs := fakes.GCSForTest(t)
	defer gcs.Close()
	gcs.Objects = testGCSObjects
	client := gcs.Client
	for _, tc := range []struct {
		kernelVersion  string
		driverVersions []string
		expected       []GPUPrecompilationConfig
	}{
		{
			"5.15.55-34.m101",
			[]string{"470.82.01"},
			[]GPUPrecompilationConfig{
				GPUPrecompilationConfig{
					ProtoConfig: &pb.COSGPUBuildRequest{
						KernelSrcTarballGcs:     stringPtr("gs://cos-kernel-artifacts/builds/5.15.55-34.m101/cos-kernel-src-5.15.55-34.m101.tgz"),
						KernelHeadersTarballGcs: stringPtr("gs://cos-kernel-artifacts/builds/5.15.55-34.m101/cos-kernel-headers-5.15.55-34.m101-x86_64.tgz"),
						NvidiaRunfileAddress:    stringPtr("https://us.download.nvidia.com/tesla/470.82.01/NVIDIA-Linux-x86_64-470.82.01.run"),
						ToolchainTarballGcs:     stringPtr("gs://chromiumos-sdk/2021/06/x86_64-cros-linux-gnu-2021.06.26.094653.tar.xz"),
						ToolchainEnvGcs:         stringPtr("gs://cos-kernel-artifacts/builds/5.15.55-34.m101/toolchain_env.x86_64"),
						DriverOutputGcsDir:      stringPtr("gs://nvidia-drivers-us-public/nvidia-cos-project/5.15.55-34.m101/"),
					},
					DriverVersion: "470.82.01",
					Milestone:     "101",
					Version:       "5.15.55-34.m101",
					VersionType:   "Kernel",
				},
			},
		},
	} {
		ctx := context.Background()
		got, err := GenerateKernelCIConfigs(ctx, client, tc.kernelVersion, tc.driverVersions)
		if err != nil {
			t.Fatalf("GenerateKernelCIConfig() failed: %s", err)
		}
		if diff := cmp.Diff(got, tc.expected, protocmp.Transform()); diff != "" {
			t.Errorf("GenerateKernelCIConfig() returned unexpected difference (-want +got):\n%s", diff)
		}
	}
}

func TestFetchToolchainTarballPath(t *testing.T) {
	gcs := fakes.GCSForTest(t)
	defer gcs.Close()
	gcs.Objects = testGCSObjects
	client := gcs.Client
	kernelVersion := "5.15.55-34.m101"
	got, err := fetchToolchainTarballPath(context.Background(), client, kernelVersion)
	if err != nil {
		t.Fatalf("fetchToolchainTarballPath() failed: %s", err)
	}
	if got != toolchainTarballPath {
		t.Errorf("fetchToolchainTarballPath() = %+v, want %+v", got, toolchainTarballPath)
	}
}
