github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/fs/config/obscure/obscure_test.go (about) 1 package obscure 2 3 import ( 4 "bytes" 5 "crypto/rand" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestObscure(t *testing.T) { 12 for _, test := range []struct { 13 in string 14 want string 15 iv string 16 }{ 17 {"", "YWFhYWFhYWFhYWFhYWFhYQ", "aaaaaaaaaaaaaaaa"}, 18 {"potato", "YWFhYWFhYWFhYWFhYWFhYXMaGgIlEQ", "aaaaaaaaaaaaaaaa"}, 19 {"potato", "YmJiYmJiYmJiYmJiYmJiYp3gcEWbAw", "bbbbbbbbbbbbbbbb"}, 20 } { 21 cryptRand = bytes.NewBufferString(test.iv) 22 got, err := Obscure(test.in) 23 cryptRand = rand.Reader 24 assert.NoError(t, err) 25 assert.Equal(t, test.want, got) 26 recoveredIn, err := Reveal(got) 27 assert.NoError(t, err) 28 assert.Equal(t, test.in, recoveredIn, "not bidirectional") 29 // Now the Must variants 30 cryptRand = bytes.NewBufferString(test.iv) 31 got = MustObscure(test.in) 32 cryptRand = rand.Reader 33 assert.Equal(t, test.want, got) 34 recoveredIn = MustReveal(got) 35 assert.Equal(t, test.in, recoveredIn, "not bidirectional") 36 37 } 38 } 39 40 func TestReveal(t *testing.T) { 41 for _, test := range []struct { 42 in string 43 want string 44 iv string 45 }{ 46 {"YWFhYWFhYWFhYWFhYWFhYQ", "", "aaaaaaaaaaaaaaaa"}, 47 {"YWFhYWFhYWFhYWFhYWFhYXMaGgIlEQ", "potato", "aaaaaaaaaaaaaaaa"}, 48 {"YmJiYmJiYmJiYmJiYmJiYp3gcEWbAw", "potato", "bbbbbbbbbbbbbbbb"}, 49 } { 50 cryptRand = bytes.NewBufferString(test.iv) 51 got, err := Reveal(test.in) 52 assert.NoError(t, err) 53 assert.Equal(t, test.want, got) 54 // Now the Must variants 55 cryptRand = bytes.NewBufferString(test.iv) 56 got = MustReveal(test.in) 57 assert.Equal(t, test.want, got) 58 59 } 60 } 61 62 // Test some error cases 63 func TestRevealErrors(t *testing.T) { 64 for _, test := range []struct { 65 in string 66 wantErr string 67 }{ 68 {"YmJiYmJiYmJiYmJiYmJiYp*gcEWbAw", "base64 decode failed when revealing password - is it obscured?: illegal base64 data at input byte 22"}, 69 {"aGVsbG8", "input too short when revealing password - is it obscured?"}, 70 {"", "input too short when revealing password - is it obscured?"}, 71 } { 72 gotString, gotErr := Reveal(test.in) 73 assert.Equal(t, "", gotString) 74 assert.Equal(t, test.wantErr, gotErr.Error()) 75 } 76 }