github.com/antevens/oras@v0.8.1/pkg/oras/push_opts_test.go (about) 1 package oras 2 3 import ( 4 "testing" 5 6 ocispec "github.com/opencontainers/image-spec/specs-go/v1" 7 "github.com/stretchr/testify/suite" 8 ) 9 10 type PushOptsSuite struct { 11 suite.Suite 12 } 13 14 func (suite *PushOptsSuite) TestValidateNameAsPath() { 15 var err error 16 17 // valid path 18 err = ValidateNameAsPath(descFromName("hello.txt")) 19 suite.NoError(err, "valid path") 20 err = ValidateNameAsPath(descFromName("foo/bar")) 21 suite.NoError(err, "valid path with multiple sub-directories") 22 23 // no empty name 24 err = ValidateNameAsPath(descFromName("")) 25 suite.Error(err, "empty path") 26 27 // path should be clean 28 err = ValidateNameAsPath(descFromName("./hello.txt")) 29 suite.Error(err, "dirty path") 30 err = ValidateNameAsPath(descFromName("foo/../bar")) 31 suite.Error(err, "dirty path") 32 33 // path should be slash-separated 34 err = ValidateNameAsPath(descFromName("foo\\bar")) 35 suite.Error(err, "path not slash separated") 36 37 // disallow absolute path 38 err = ValidateNameAsPath(descFromName("/foo/bar")) 39 suite.Error(err, "unix: absolute path disallowed") 40 err = ValidateNameAsPath(descFromName("C:\\foo\\bar")) 41 suite.Error(err, "windows: absolute path disallowed") 42 err = ValidateNameAsPath(descFromName("C:/foo/bar")) 43 suite.Error(err, "windows: absolute path disallowed") 44 45 // disallow path traversal 46 err = ValidateNameAsPath(descFromName("..")) 47 suite.Error(err, "path traversal disallowed") 48 err = ValidateNameAsPath(descFromName("../bar")) 49 suite.Error(err, "path traversal disallowed") 50 err = ValidateNameAsPath(descFromName("foo/../../bar")) 51 suite.Error(err, "path traversal disallowed") 52 } 53 54 func TestPushOptsSuite(t *testing.T) { 55 suite.Run(t, new(PushOptsSuite)) 56 } 57 58 func descFromName(name string) ocispec.Descriptor { 59 return ocispec.Descriptor{ 60 Annotations: map[string]string{ 61 ocispec.AnnotationTitle: name, 62 }, 63 } 64 }