| 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) | |
| } |