package dkms

import (
	"fmt"
	"testing"

	"github.com/google/go-cmp/cmp"
)

func TestParseConfig(t *testing.T) {
	trees := Trees{
		Source:  "testdata/source-tree",
		Kernel:  "testdata/kernel-source",
		Dkms:    t.TempDir(),
		Install: t.TempDir(),
	}

	pkg := Package{
		Name:          "my-package",
		Version:       "1.0",
		Arch:          "x86_64",
		KernelVersion: "6.1.100",
		Trees:         &trees,
	}

	testCases := []struct {
		configString string
		expected     Config
	}{
		{
			configString: "",
			expected: Config{
				PackageName:    pkg.Name,
				PackageVersion: pkg.Version,
				MakeCommand:    fmt.Sprintf("make -C %s M=%s", trees.Kernel, pkg.BuildDir()),
				Patches:        []string{},
				Modules: []Module{
					{
						Package:       &pkg,
						BuiltName:     pkg.Name,
						BuiltLocation: "",
						DestName:      pkg.Name,
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
				},
				Clean:                fmt.Sprintf("make -C %s M=%s clean", trees.Kernel, pkg.BuildDir()),
				BuildDepends:         []string{},
				BuildExclusiveKernel: ".*",
				BuildExclusiveArch:   ".*",
			},
		},
		{
			configString: `
			MAKE=abc
			PACKAGE_VERSION=3.0
			PACKAGE_NAME=my-module
			BUILT_MODULE_NAME=my-built-module
			`,
			expected: Config{
				PackageName:    "my-module",
				PackageVersion: "3.0",
				MakeCommand:    "abc",
				Patches:        []string{},
				Modules: []Module{
					{
						Package:       &pkg,
						BuiltName:     "my-built-module",
						BuiltLocation: "",
						DestName:      "my-built-module",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
				},
				Clean:                fmt.Sprintf("make -C %s M=%s clean", trees.Kernel, pkg.BuildDir()),
				BuildDepends:         []string{},
				BuildExclusiveKernel: ".*",
				BuildExclusiveArch:   ".*",
			},
		},
		{
			configString: `
			MAKE[2]=abc
			PACKAGE_VERSION=3.0
			PACKAGE_NAME=my-module
			BUILT_MODULE_NAME[0]=my-built-module
			BUILT_MODULE_LOCATION=build/location
			BUILT_MODULE_NAME[1]=my-built-module-2
			DEST_MODULE_NAME[1]=my-installed-module-2
			STRIP[0]=no
			DEST_MODULE_LOCATION[1]=/kernel/install/location
			MAKE[1]="make -C ${kernel_source_dir} M=${dkms_tree}/${module}/${module_version}/build/abc"
			MAKE[0]='make 0'
			MAKE_MATCH[0]='6\.6\..*'
			MAKE_MATCH[1]='6\.1\..*'
			CLEAN="make clean"
			BUILD_DEPENDS[0]=module-1
			BUILD_DEPENDS[1]=module-2
			PATCH[0]=abc
			PATCH[2]=ghi
			PATCH[1]=def
			PATCH_MATCH[1]='6\.6\..*'
			`,
			expected: Config{
				PackageName:    "my-module",
				PackageVersion: "3.0",
				MakeCommand:    fmt.Sprintf("make -C %s M=%s/%s/%s/build/abc", trees.Kernel, trees.Dkms, pkg.Name, pkg.Version),
				Patches:        []string{"abc", "ghi"},
				Modules: []Module{
					{
						Package:       &pkg,
						BuiltName:     "my-built-module",
						BuiltLocation: "build/location",
						DestName:      "my-built-module",
						DestLocation:  "/kernel/updates",
						Strip:         false,
					},
					{
						Package:       &pkg,
						BuiltName:     "my-built-module-2",
						BuiltLocation: "",
						DestName:      "my-installed-module-2",
						DestLocation:  "/kernel/install/location",
						Strip:         false,
					},
				},
				Clean:                "make clean",
				BuildDepends:         []string{"module-1", "module-2"},
				BuildExclusiveKernel: ".*",
				BuildExclusiveArch:   ".*",
			},
		},
		{
			configString: `
			BUILT_MODULE_NAME=(
				libcfs    # 0
				lnet      # 1
				ksocklnd  # 2
				obdclass  # 3
				ptlrpc    # 4
				fld       # 5
				osc       # 6
				lov       # 7
				fid       # 8
				mdc       # 9
				lmv       # 10
				lustre    # 11
			)
			BUILT_MODULE_NAME[30]=abc
			`,
			expected: Config{
				PackageName:    pkg.Name,
				PackageVersion: pkg.Version,
				MakeCommand:    fmt.Sprintf("make -C %s M=%s", trees.Kernel, pkg.BuildDir()),
				Patches:        []string{},
				Modules: []Module{
					{
						Package:       &pkg,
						BuiltName:     "libcfs",
						BuiltLocation: "",
						DestName:      "libcfs",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "lnet",
						BuiltLocation: "",
						DestName:      "lnet",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "ksocklnd",
						BuiltLocation: "",
						DestName:      "ksocklnd",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "obdclass",
						BuiltLocation: "",
						DestName:      "obdclass",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "ptlrpc",
						BuiltLocation: "",
						DestName:      "ptlrpc",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "fld",
						BuiltLocation: "",
						DestName:      "fld",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "osc",
						BuiltLocation: "",
						DestName:      "osc",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "lov",
						BuiltLocation: "",
						DestName:      "lov",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "fid",
						BuiltLocation: "",
						DestName:      "fid",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "mdc",
						BuiltLocation: "",
						DestName:      "mdc",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "lmv",
						BuiltLocation: "",
						DestName:      "lmv",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "lustre",
						BuiltLocation: "",
						DestName:      "lustre",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
					{
						Package:       &pkg,
						BuiltName:     "abc",
						BuiltLocation: "",
						DestName:      "abc",
						DestLocation:  "/kernel/updates",
						Strip:         true,
					},
				},
				Clean:                fmt.Sprintf("make -C %s M=%s clean", trees.Kernel, pkg.BuildDir()),
				BuildDepends:         []string{},
				BuildExclusiveKernel: ".*",
				BuildExclusiveArch:   ".*",
			},
		},
	}

	for i, testCase := range testCases {
		config, err := ParseConfig(testCase.configString, &pkg)

		if err != nil {
			t.Fatalf("failed test case %d: %v", i, err)
		}

		diff := cmp.Diff(testCase.expected, *config)
		if len(diff) > 0 {
			t.Fatalf("config for test case %d did not match expected value:\ndiff: %s", i, diff)
		}
	}
}
