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  }