blob: 18b4f2375d5550920d4993b7ac5a4de51f866785 [file] [log] [blame] [edit]
package dkms
import (
"context"
"path"
"testing"
"cos.googlesource.com/cos/tools.git/src/pkg/fakes"
"cos.googlesource.com/cos/tools.git/src/pkg/fs"
"cos.googlesource.com/cos/tools.git/src/pkg/gcs"
)
func TestInstall(t *testing.T) {
options := &Options{
Force: false,
MakeVariables: "",
InstallBuildDependencies: false,
}
trees := &Trees{
Dkms: t.TempDir(),
Source: "testdata/source-tree",
Kernel: "testdata/kernel-source/lib/modules/6.1.100/build",
Install: t.TempDir(),
}
pkg := &Package{
Name: "mymodule",
Version: "1.0",
KernelVersion: "6.1.100",
Arch: "x86_64",
BuildId: "18244.151.14",
Trees: trees,
}
err := Install(pkg, options)
if err != nil {
t.Fatalf("%v", err)
}
makefilePath := path.Join(trees.Dkms, "mymodule", "1.0", "6.1.100", "x86_64", "18244.151.14", "source", "Makefile")
if !fs.IsFile(makefilePath) {
t.Fatalf("expected to find file %s after adding sources", makefilePath)
}
buildMakefilePath := path.Join(trees.Dkms, "mymodule", "1.0", "6.1.100", "x86_64", "18244.151.14", "build", "Makefile")
if !fs.IsFile(buildMakefilePath) {
t.Fatalf("expected to find file %s after building", makefilePath)
}
builtModulePath := path.Join(trees.Dkms, "mymodule", "1.0", "6.1.100", "x86_64", "18244.151.14", "build", "mymodule.ko")
if !fs.IsFile(builtModulePath) {
t.Fatalf("expected to find file %s after building", makefilePath)
}
installPath := path.Join(trees.Install, "kernel", "updates", "mymodule.ko")
if !fs.IsFile(installPath) {
t.Fatalf("expected to find file %s after installing", installPath)
}
}
func TestCachedInstall(t *testing.T) {
options := &Options{
Force: false,
MakeVariables: "",
InstallBuildDependencies: false,
Upload: true,
}
trees := &Trees{
Dkms: t.TempDir(),
Source: "testdata/source-tree",
Kernel: "testdata/kernel-source/lib/modules/6.1.100/build",
Install: t.TempDir(),
}
pkg := &Package{
Name: "mymodule",
Version: "1.0",
KernelVersion: "6.1.100",
Arch: "x86_64",
BuildId: "18244.151.14",
Trees: trees,
}
ctx := context.Background()
fakeGCS := fakes.GCSForTest(t)
fakeGCS.LogMissing = false
bucket := gcs.NewGCSBucket(fakeGCS.Client, "test", "dkms")
err := CachedInstall(ctx, pkg, bucket, options)
if err != nil {
t.Fatalf("%v", err)
}
cacheMakefilePath := path.Join("mymodule", "1.0", "6.1.100", "x86_64", "18244.151.14", "source", "Makefile")
makefilePath := path.Join(trees.Dkms, cacheMakefilePath)
if !fs.IsFile(makefilePath) {
t.Fatalf("expected to find file %s after adding sources", makefilePath)
}
buildMakefilePath := path.Join(trees.Dkms, "mymodule", "1.0", "6.1.100", "x86_64", "18244.151.14", "build", "Makefile")
if !fs.IsFile(buildMakefilePath) {
t.Fatalf("expected to find file %s after building", makefilePath)
}
cacheBuiltModulePath := path.Join("mymodule", "1.0", "6.1.100", "x86_64", "18244.151.14", "build", "mymodule.ko")
builtModulePath := path.Join(trees.Dkms, cacheBuiltModulePath)
if !fs.IsFile(builtModulePath) {
t.Fatalf("expected to find file %s after building", makefilePath)
}
cachedMakefileExists, err := bucket.Exists(ctx, cacheMakefilePath)
if err != nil {
t.Fatalf("failed to check if %s exists", cacheMakefilePath)
}
if !cachedMakefileExists {
t.Fatalf("expected to find file %s in cache after adding sources", cacheMakefilePath)
}
cachedModuleExists, err := bucket.Exists(ctx, cacheBuiltModulePath)
if err != nil {
t.Fatalf("failed to check if %s exists", cacheBuiltModulePath)
}
if !cachedModuleExists {
t.Fatalf("expected to find file %s in cache after building modules", cacheBuiltModulePath)
}
installPath := path.Join(trees.Install, "kernel", "updates", "mymodule.ko")
if !fs.IsFile(installPath) {
t.Fatalf("expected to find file %s after installing", installPath)
}
}