summaryrefslogtreecommitdiff
path: root/internal/nametransform/longnames_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/nametransform/longnames_test.go')
-rw-r--r--internal/nametransform/longnames_test.go41
1 files changed, 41 insertions, 0 deletions
diff --git a/internal/nametransform/longnames_test.go b/internal/nametransform/longnames_test.go
index 4210492..7a4e915 100644
--- a/internal/nametransform/longnames_test.go
+++ b/internal/nametransform/longnames_test.go
@@ -1,7 +1,11 @@
package nametransform
import (
+ "strings"
"testing"
+
+ "github.com/rfjakob/gocryptfs/v2/internal/contentenc"
+ "github.com/rfjakob/gocryptfs/v2/internal/cryptocore"
)
func TestIsLongName(t *testing.T) {
@@ -28,3 +32,40 @@ func TestRemoveLongNameSuffix(t *testing.T) {
t.Error(".name suffix not removed")
}
}
+
+func newLognamesTestInstance(longNameMax uint8) *NameTransform {
+ key := make([]byte, cryptocore.KeyLen)
+ cCore := cryptocore.New(key, cryptocore.BackendGoGCM, contentenc.DefaultIVBits, true)
+ return New(cCore.EMECipher, true, longNameMax, true, nil, false)
+}
+
+func TestLongNameMax(t *testing.T) {
+ iv := make([]byte, 16)
+ for max := 0; max <= NameMax; max++ {
+ n := newLognamesTestInstance(uint8(max))
+ if max == 0 {
+ // effective value is 255
+ max = NameMax
+ }
+ for l := 0; l <= NameMax+10; l++ {
+ name := strings.Repeat("x", l)
+ out, err := n.EncryptAndHashName(name, iv)
+ if l == 0 || l > NameMax {
+ if err == nil {
+ t.Errorf("should have rejected a name of length %d, but did not", l)
+ }
+ continue
+ }
+ cName, _ := n.EncryptName(name, iv)
+ rawLen := len(cName)
+ want := LongNameNone
+ if rawLen > max {
+ want = LongNameContent
+ }
+ have := NameType(out)
+ if have != want {
+ t.Errorf("l=%d max=%d: wanted %v, got %v\nname=%q\nout=%q", l, max, want, have, name, out)
+ }
+ }
+ }
+}