From 2e246632c692ed7d90b1443eebb3d3ae357ac41f Mon Sep 17 00:00:00 2001 From: Anurag Ojha Date: Sat, 22 Nov 2025 07:13:13 +0000 Subject: [PATCH 1/4] improve testlink_target --- pkg/oci/builder_test.go | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/pkg/oci/builder_test.go b/pkg/oci/builder_test.go index 9b0561b2c5..93e6af3e3e 100644 --- a/pkg/oci/builder_test.go +++ b/pkg/oci/builder_test.go @@ -25,6 +25,31 @@ import ( ) var TestPlatforms = []fn.Platform{{OS: "linux", Architecture: runtime.GOARCH}} +func copyDir(src, dst string) error { + return filepath.Walk(src, func(path string, info fs.FileInfo, err error) error { + if err != nil { + return err + } + + rel, err := filepath.Rel(src, path) + if err != nil { + return err + } + + target := filepath.Join(dst, rel) + + if info.IsDir() { + return os.MkdirAll(target, info.Mode()) + } + + data, err := os.ReadFile(path) + if err != nil { + return err + } + + return os.WriteFile(target, data, info.Mode()) + }) +} // TestBuilder_BuildGo ensures that, when given a Go Function, an OCI-compliant // directory structure is created on .Build in the expected path. @@ -504,13 +529,18 @@ func (l *TestLanguageBuilder) Configure(job buildJob, p v1.Platform, c v1.Config return l.ConfigureFn(job, p, c) } -// Test_validatedLinkTaarget ensures that the function disallows +// Test_validatedLinkTarget ensures that the function disallows // links which are absolute or refer to targets outside the given root, in // addition to the basic job of returning the value of reading the link. func Test_validatedLinkTarget(t *testing.T) { - root := filepath.Join("testdata", "test-links") + tmp := t.TempDir() + root := filepath.Join(tmp, "test-links") - err := os.Symlink("/var/example/absolute/link", filepath.Join(root, "absoluteLink")) + err := copyDir(filepath.Join("testdata", "test-links"), root) + if err != nil { + t.Fatalf("failed to copy test data: %v", err) + } + err = os.Symlink("/var/example/absolute/link", filepath.Join(root, "absoluteLink")) if err != nil && !errors.Is(err, os.ErrExist) { t.Fatal(err) } From 429fcc4a81e37a9e7fc7dbf6c2bb502c668d6882 Mon Sep 17 00:00:00 2001 From: Anurag Ojha Date: Sat, 22 Nov 2025 08:24:56 +0000 Subject: [PATCH 2/4] symlink copy error --- pkg/oci/builder_test.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/oci/builder_test.go b/pkg/oci/builder_test.go index 93e6af3e3e..157cbc7e5e 100644 --- a/pkg/oci/builder_test.go +++ b/pkg/oci/builder_test.go @@ -38,6 +38,14 @@ func copyDir(src, dst string) error { target := filepath.Join(dst, rel) + if info.Mode()&os.ModeSymlink != 0 { + linkTarget, err := os.Readlink(path) + if err != nil { + return err + } + return os.Symlink(linkTarget, target) + } + if info.IsDir() { return os.MkdirAll(target, info.Mode()) } @@ -535,8 +543,8 @@ func (l *TestLanguageBuilder) Configure(job buildJob, p v1.Platform, c v1.Config func Test_validatedLinkTarget(t *testing.T) { tmp := t.TempDir() root := filepath.Join(tmp, "test-links") + err := copyDir("testdata/test-links", root) - err := copyDir(filepath.Join("testdata", "test-links"), root) if err != nil { t.Fatalf("failed to copy test data: %v", err) } From e34418c5c6bb9c75ef5f02d5fe568882d070af94 Mon Sep 17 00:00:00 2001 From: Anurag Ojha Date: Sat, 22 Nov 2025 08:36:23 +0000 Subject: [PATCH 3/4] linting issue --- pkg/oci/builder_test.go | 63 +++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/pkg/oci/builder_test.go b/pkg/oci/builder_test.go index 157cbc7e5e..af4cfdf9c9 100644 --- a/pkg/oci/builder_test.go +++ b/pkg/oci/builder_test.go @@ -25,38 +25,39 @@ import ( ) var TestPlatforms = []fn.Platform{{OS: "linux", Architecture: runtime.GOARCH}} + func copyDir(src, dst string) error { - return filepath.Walk(src, func(path string, info fs.FileInfo, err error) error { - if err != nil { - return err - } - - rel, err := filepath.Rel(src, path) - if err != nil { - return err - } - - target := filepath.Join(dst, rel) - - if info.Mode()&os.ModeSymlink != 0 { - linkTarget, err := os.Readlink(path) - if err != nil { - return err - } - return os.Symlink(linkTarget, target) - } - - if info.IsDir() { - return os.MkdirAll(target, info.Mode()) - } - - data, err := os.ReadFile(path) - if err != nil { - return err - } - - return os.WriteFile(target, data, info.Mode()) - }) + return filepath.Walk(src, func(path string, info fs.FileInfo, err error) error { + if err != nil { + return err + } + + rel, err := filepath.Rel(src, path) + if err != nil { + return err + } + + target := filepath.Join(dst, rel) + + if info.Mode()&os.ModeSymlink != 0 { + linkTarget, err := os.Readlink(path) + if err != nil { + return err + } + return os.Symlink(linkTarget, target) + } + + if info.IsDir() { + return os.MkdirAll(target, info.Mode()) + } + + data, err := os.ReadFile(path) + if err != nil { + return err + } + + return os.WriteFile(target, data, info.Mode()) + }) } // TestBuilder_BuildGo ensures that, when given a Go Function, an OCI-compliant From 31ef5269af05d915f190b3de3b2c2612eeb2dac0 Mon Sep 17 00:00:00 2001 From: Anurag Ojha Date: Wed, 26 Nov 2025 12:32:53 +0000 Subject: [PATCH 4/4] remove link --- .gitignore | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.gitignore b/.gitignore index aaeb6adadb..5e642b0506 100644 --- a/.gitignore +++ b/.gitignore @@ -49,11 +49,6 @@ CLAUDE.md # https://github.com/knative/func/issues/3196 /pkg/builders/testdata/go-fn-with-private-deps/.s2i -# TODO: Run this test from a temp directory instead: -# https://github.com/knative/func/issues/3197 -pkg/oci/testdata/test-links/absoluteLink -pkg/oci/testdata/test-links/absoluteLinkWindows - # TODO: update the test which creates this to run in a temp directory: # https://github.com/knative/func/issues/3158 /pkg/creds/auth.json