blob: 7458353581415af5bb52d5a90ec41c6b25db95f7 [file] [log] [blame]
package dkms
import (
"context"
"os"
"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 TestAdd(t *testing.T) {
options := &Options{}
trees := &Trees{
Dkms: t.TempDir(),
Source: "testdata/source-tree",
}
pkg := &Package{
Name: "mymodule",
Version: "1.0",
KernelVersion: "6.1.100",
Arch: "x86_64",
Trees: trees,
}
err := Add(pkg, options)
if err != nil {
t.Fatalf("%v", err)
}
makefilePath := path.Join(trees.Dkms, "mymodule", "1.0", "6.1.100", "x86_64", "source", "Makefile")
if !fs.IsFile(makefilePath) {
t.Fatalf("expected to find file %s after adding sources", makefilePath)
}
}
func TestCachedAdd(t *testing.T) {
options := &Options{
Upload: true,
}
trees := &Trees{
Dkms: t.TempDir(),
Source: "testdata/source-tree",
}
pkg := &Package{
Name: "mymodule",
Version: "1.0",
KernelVersion: "6.1.100",
Arch: "x86_64",
Trees: trees,
}
ctx := context.Background()
fakeGCS := fakes.GCSForTest(t)
fakeGCS.LogMissing = false
bucket := gcs.NewGCSBucket(fakeGCS.Client, "test", "dkms")
err := CachedAdd(ctx, pkg, bucket, options)
if err != nil {
t.Fatalf("%v", err)
}
cacheMakefilePath := path.Join("mymodule", "1.0", "6.1.100", "x86_64", "source", "Makefile")
makefilePath := path.Join(trees.Dkms, cacheMakefilePath)
if !fs.IsFile(makefilePath) {
t.Fatalf("expected to find file %s after adding sources", makefilePath)
}
exists, err := bucket.Exists(ctx, cacheMakefilePath)
if err != nil {
t.Fatalf("failed to check if %s exists", cacheMakefilePath)
}
if !exists {
t.Fatalf("expected to find file %s in cache after adding sources", cacheMakefilePath)
}
}
func TestCachedAddNoLocalSources(t *testing.T) {
options := &Options{
Upload: true,
}
trees := &Trees{
Dkms: t.TempDir(),
Source: "testdata/source-tree",
}
pkg := &Package{
Name: "mymodule",
Version: "1.0",
KernelVersion: "6.1.100",
Arch: "x86_64",
Trees: trees,
}
ctx := context.Background()
fakeGCS := fakes.GCSForTest(t)
fakeGCS.LogMissing = false
bucket := gcs.NewGCSBucket(fakeGCS.Client, "test", "dkms")
// Add the module to the cache and the local directory. We'll remove it from
// the local directory later to make sure we can download it and add it from
// the cache.
err := CachedAdd(ctx, pkg, bucket, options)
if err != nil {
t.Fatalf("%v", err)
}
t.Log("resetting trees")
trees = nil // make sure we don't accidentally refer to the old trees in our checks
// Use a different DKMS tree and an empty source tree so that we're forced to load from the cache
pkg.Trees = &Trees{
Dkms: t.TempDir(),
Source: t.TempDir(),
}
err = Add(pkg, options)
if err == nil {
t.Fatalf("expected error when calling Add without local sources")
}
t.Logf("got expected error: %v", err)
err = CachedAdd(ctx, pkg, bucket, options)
if err != nil {
t.Fatalf("%v", err)
}
cacheMakefilePath := path.Join("mymodule", "1.0", "6.1.100", "x86_64", "source", "Makefile")
makefilePath := path.Join(pkg.Trees.Dkms, cacheMakefilePath)
if !fs.IsFile(makefilePath) {
t.Fatalf("expected to find file %s after adding sources", makefilePath)
}
exists, err := bucket.Exists(ctx, cacheMakefilePath)
if err != nil {
t.Fatalf("failed to check if %s exists", cacheMakefilePath)
}
if !exists {
t.Fatalf("expected to find file %s in cache after adding sources", cacheMakefilePath)
}
}
func TestAddWithEmptySourceTreeDir(t *testing.T) {
options := &Options{
Upload: true,
}
trees := &Trees{
Dkms: t.TempDir(),
Source: t.TempDir(),
}
pkg := &Package{
Name: "mymodule",
Version: "1.0",
KernelVersion: "6.1.100",
Arch: "x86_64",
Trees: trees,
}
if err := os.Mkdir(pkg.SourceTreeDir(), 0777); err != nil {
t.Fatalf("could not make source dir for testing")
}
err := Add(pkg, options)
if err == nil {
t.Fatalf("expected error when calling Add empty local source dir")
}
t.Logf("got expected error: %v", err)
}