github.com/viant/toolbox@v0.34.5/kms/gcp/service_test.go (about) 1 package gcp 2 3 import ( 4 "encoding/base64" 5 "github.com/stretchr/testify/assert" 6 "github.com/viant/toolbox" 7 "github.com/viant/toolbox/kms" 8 "github.com/viant/toolbox/url" 9 "golang.org/x/net/context" 10 "strings" 11 "testing" 12 ) 13 14 type MyTestConfig struct { 15 Aaa string `json:",omitempty"` 16 Bbb string `json:",omitempty"` 17 Ccc string `json:",omitempty"` 18 } 19 20 func TestDecoder(t *testing.T) { 21 22 // test decrypt read from non-base64 url 23 { 24 25 decryptRequest := kms.DecryptRequest{} 26 decryptRequest.Resource = &kms.Resource{} 27 decryptRequest.Resource.URL = url.NewResource("test/data/config.txt", "").URL 28 decoderFactory := toolbox.NewJSONDecoderFactory() 29 mytestConfig := MyTestConfig{} 30 service := service{KmsService: &testKmsService{}} 31 service.Decode(context.Background(), &decryptRequest, decoderFactory, &mytestConfig) 32 assert.Equal(t, mytestConfig.Aaa, "Test1") 33 assert.Equal(t, mytestConfig.Bbb, "test2") 34 assert.Equal(t, mytestConfig.Ccc, "test3") 35 36 } 37 38 // test decrypt read from base64 url 39 { 40 41 decryptRequest := kms.DecryptRequest{} 42 decryptRequest.Resource = &kms.Resource{} 43 decryptRequest.Resource.URL = url.NewResource("test/data/config_base_64.txt", "").URL 44 decoderFactory := toolbox.NewJSONDecoderFactory() 45 mytestConfig := MyTestConfig{} 46 service := service{KmsService: &testKmsService{}} 47 service.Decode(context.Background(), &decryptRequest, decoderFactory, &mytestConfig) 48 assert.Equal(t, mytestConfig.Aaa, "Test111") 49 assert.Equal(t, mytestConfig.Bbb, "test222") 50 assert.Equal(t, mytestConfig.Ccc, "test333") 51 52 } 53 54 } 55 56 func TestEncrypt(t *testing.T) { 57 //test base64 as input which from non-url 58 { 59 text := "path with?reserved+characters" 60 61 request := kms.EncryptRequest{} 62 encryptTextAfterBase64 := base64.StdEncoding.EncodeToString([]byte(text)) 63 request.Resource = &kms.Resource{Data: []byte(encryptTextAfterBase64)} 64 service := service{KmsService: &testKmsService{}} 65 response, err := service.Encrypt(context.Background(), &request) 66 assert.Nil(t, err) 67 assert.Equal(t, response.EncryptedText, encryptTextAfterBase64) 68 assert.Equal(t, string(response.EncryptedData), text) 69 70 decryptRequest := kms.DecryptRequest{} 71 decryptTextAfterBase64 := base64.StdEncoding.EncodeToString(response.EncryptedData) 72 decryptRequest.Resource = &kms.Resource{Data: []byte(decryptTextAfterBase64)} 73 decryptResponse, err := service.Decrypt(context.Background(), &decryptRequest) 74 assert.Nil(t, err) 75 assert.Equal(t, decryptResponse.Text, decryptTextAfterBase64) 76 assert.Equal(t, string(decryptResponse.Data), text) 77 } 78 79 //test non-base64 as input which from non-url 80 { 81 text := "path with?reserved+characters2" 82 83 request := kms.EncryptRequest{} 84 85 request.Resource = &kms.Resource{Data: []byte(text)} 86 service := service{KmsService: &testKmsService{}} 87 response, err := service.Encrypt(context.Background(), &request) 88 assert.Nil(t, err) 89 assert.Equal(t, response.EncryptedText, base64.StdEncoding.EncodeToString([]byte(text))) 90 assert.Equal(t, string(response.EncryptedData), text) 91 92 decryptRequest := kms.DecryptRequest{} 93 decryptRequest.Resource = &kms.Resource{Data: response.EncryptedData} 94 decryptResponse, err := service.Decrypt(context.Background(), &decryptRequest) 95 assert.Nil(t, err) 96 assert.Equal(t, decryptResponse.Text, base64.StdEncoding.EncodeToString([]byte(text))) 97 assert.Equal(t, string(decryptResponse.Data), text) 98 } 99 100 //test base64 as input which from url 101 { 102 103 request := kms.EncryptRequest{} 104 request.Resource = &kms.Resource{} 105 request.Resource.URL = url.NewResource("test/data/test1.txt", "").URL 106 request.TargetURL = url.NewResource("test/upload/upload1.txt").URL 107 service := service{KmsService: &testKmsService{}} 108 response, err := service.Encrypt(context.Background(), &request) 109 assert.Nil(t, err) 110 assert.Equal(t, response.EncryptedText, base64.StdEncoding.EncodeToString([]byte("This is a encrypt/decrypt test!!"))) 111 assert.Equal(t, string(response.EncryptedData), "This is a encrypt/decrypt test!!") 112 113 decryptRequest := kms.DecryptRequest{} 114 decryptRequest.Resource = &kms.Resource{} 115 decryptRequest.Resource.URL = url.NewResource("test/data/test1.txt", "").URL 116 decryptResponse, err := service.Decrypt(context.Background(), &decryptRequest) 117 assert.Nil(t, err) 118 assert.Equal(t, decryptResponse.Text, base64.StdEncoding.EncodeToString([]byte("This is a encrypt/decrypt test!!"))) 119 assert.Equal(t, string(decryptResponse.Data), "This is a encrypt/decrypt test!!") 120 } 121 122 //test non-base64 as input which from url 123 { 124 125 request := kms.EncryptRequest{} 126 request.Resource = &kms.Resource{} 127 request.Resource.URL = url.NewResource("test/data/test2.txt", "").URL 128 service := service{KmsService: &testKmsService{}} 129 response, err := service.Encrypt(context.Background(), &request) 130 assert.Nil(t, err) 131 assert.Equal(t, response.EncryptedText, base64.StdEncoding.EncodeToString([]byte("This is a encrypt/decrypt test no2 !!!"))) 132 assert.Equal(t, string(response.EncryptedData), "This is a encrypt/decrypt test no2 !!!") 133 134 decryptRequest := kms.DecryptRequest{} 135 decryptRequest.Resource = &kms.Resource{} 136 decryptRequest.Resource.URL = url.NewResource("test/data/test2.txt", "").URL 137 decryptResponse, err := service.Decrypt(context.Background(), &decryptRequest) 138 assert.Nil(t, err) 139 assert.Equal(t, decryptResponse.Text, base64.StdEncoding.EncodeToString([]byte("This is a encrypt/decrypt test no2 !!!"))) 140 assert.Equal(t, string(decryptResponse.Data), "This is a encrypt/decrypt test no2 !!!") 141 } 142 143 //test non-base64 as input for encrypt, based64 as input for decrypt 144 { 145 146 request := kms.EncryptRequest{} 147 request.Resource = &kms.Resource{} 148 request.Resource.URL = url.NewResource("test/data/test3.txt", "").URL 149 service := service{KmsService: &testKmsService{}} 150 response, err := service.Encrypt(context.Background(), &request) 151 assert.Nil(t, err) 152 assert.Equal(t, response.EncryptedText, base64.StdEncoding.EncodeToString([]byte("This is a encrypt/decrypt test no3 !!!@@@"))) 153 assert.Equal(t, string(response.EncryptedData), "This is a encrypt/decrypt test no3 !!!@@@") 154 155 decryptRequest := kms.DecryptRequest{} 156 decryptRequest.Resource = &kms.Resource{} 157 decryptRequest.Resource.URL = url.NewResource("test/data/test3_3.txt", "").URL 158 decryptResponse, err := service.Decrypt(context.Background(), &decryptRequest) 159 assert.Nil(t, err) 160 assert.Equal(t, decryptResponse.Text, base64.StdEncoding.EncodeToString([]byte("This is a encrypt/decrypt test no3 !!!@@@"))) 161 assert.Equal(t, string(decryptResponse.Data), "This is a encrypt/decrypt test no3 !!!@@@") 162 } 163 164 } 165 166 type testKmsService struct { 167 } 168 169 func getPath(value string) string { 170 processUrl := url.NewResource(value) 171 processedPath := strings.Replace(processUrl.URL, "file:/", "", -1) 172 return processedPath 173 } 174 175 func (testKmsService *testKmsService) Encrypt(ctx context.Context, key string, plainText string) (string, error) { 176 177 return plainText, nil 178 } 179 180 func (testKmsService *testKmsService) Decrypt(ctx context.Context, key string, plainText string) (string, error) { 181 return plainText, nil 182 }