1package s3crypto_test 2 3import ( 4 "bytes" 5 "fmt" 6 "testing" 7 8 "github.com/aws/aws-sdk-go/service/s3/s3crypto" 9) 10 11func padTest(size int, t *testing.T) { 12 padder := s3crypto.NewPKCS7Padder(size) 13 for i := 0; i < size; i++ { 14 input := make([]byte, i) 15 expected := append(input, bytes.Repeat([]byte{byte(size - i)}, size-i)...) 16 b, err := padder.Pad(input, len(input)) 17 if err != nil { 18 t.Fatal("Expected error to be nil but received " + err.Error()) 19 } 20 if len(b) != len(expected) { 21 t.Fatal(fmt.Sprintf("Case %d: data is not of the same length", i)) 22 } 23 if bytes.Compare(b, expected) != 0 { 24 t.Fatal(fmt.Sprintf("Expected %v but got %v", expected, b)) 25 } 26 } 27} 28 29func unpadTest(size int, t *testing.T) { 30 padder := s3crypto.NewPKCS7Padder(size) 31 for i := 0; i < size; i++ { 32 expected := make([]byte, i) 33 input := append(expected, bytes.Repeat([]byte{byte(size - i)}, size-i)...) 34 b, err := padder.Unpad(input) 35 if err != nil { 36 t.Fatal("Error received, was expecting nil: " + err.Error()) 37 } 38 if len(b) != len(expected) { 39 t.Fatal(fmt.Sprintf("Case %d: data is not of the same length", i)) 40 } 41 if bytes.Compare(b, expected) != 0 { 42 t.Fatal(fmt.Sprintf("Expected %v but got %v", expected, b)) 43 } 44 } 45} 46 47func TestPKCS7Padding(t *testing.T) { 48 padTest(10, t) 49 padTest(16, t) 50 padTest(255, t) 51} 52 53func TestPKCS7Unpadding(t *testing.T) { 54 unpadTest(10, t) 55 unpadTest(16, t) 56 unpadTest(255, t) 57} 58