@@ -2988,8 +2988,16 @@ func TestClientSideEncryptionProse(t *testing.T) {
29882988 mt .Skipf ("Skipping test as KMS_FAILPOINT_SERVERS_RUNNING is not set" )
29892989 }
29902990
2991- tlsCfg := & tls.Config {
2992- InsecureSkipVerify : true ,
2991+ mt .Parallel ()
2992+
2993+ var tlsCfg * tls.Config
2994+ if tlsCAFileKMIP != "" {
2995+ var err error
2996+ clientAndCATlsMap := map [string ]interface {}{
2997+ "tlsCAFile" : tlsCAFileKMIP ,
2998+ }
2999+ tlsCfg , err = options .BuildTLSConfig (clientAndCATlsMap )
3000+ require .Nil (mt , err , "BuildTLSConfig error: %v" , err )
29933001 }
29943002
29953003 setFailPoint := func (failure string , count int ) error {
@@ -3012,39 +3020,69 @@ func TestClientSideEncryptionProse(t *testing.T) {
30123020 return res .Body .Close ()
30133021 }
30143022
3015- keyVaultClient , err := mongo .Connect (options .Client ().ApplyURI (mtest .ClusterURI ()))
3016- require .NoError (mt , err , "error on Connect: %v" , err )
3017-
3018- ceo := options .ClientEncryption ().
3019- SetKeyVaultNamespace ("keyvault.datakeys" ).
3020- SetKmsProviders (fullKmsProvidersMap ).
3021- SetTLSConfig (map [string ]* tls.Config {"aws" : tlsCfg })
3022- clientEncryption , err := mongo .NewClientEncryption (keyVaultClient , ceo )
3023- require .NoError (mt , err , "error on NewClientEncryption: %v" , err )
3024-
3025- err = setFailPoint ("network" , 1 )
3026- require .NoError (mt , err , "mock server error: %v" , err )
3027-
3028- dkOpts := options .DataKey ().SetMasterKey (
3029- bson.D {
3023+ dataKeys := []struct {
3024+ provider string
3025+ masterKey interface {}
3026+ }{
3027+ {"aws" , bson.D {
30303028 {"region" , "foo" },
30313029 {"key" , "bar" },
30323030 {"endpoint" , "127.0.0.1:9003" },
3033- },
3034- )
3035- var keyID bson.Binary
3036- keyID , err = clientEncryption .CreateDataKey (context .Background (), "aws" , dkOpts )
3037- require .NoError (mt , err , "error in CreateDataKey: %v" , err )
3031+ }},
3032+ {"azure" , bson.D {
3033+ {"keyVaultEndpoint" , "127.0.0.1:9003" },
3034+ {"keyName" , "foo" },
3035+ }},
3036+ {"gcp" , bson.D {
3037+ {"projectId" , "foo" },
3038+ {"location" , "bar" },
3039+ {"keyRing" , "baz" },
3040+ {"keyName" , "qux" },
3041+ {"endpoint" , "127.0.0.1:9003" },
3042+ }},
3043+ }
30383044
3039- err = setFailPoint ("network" , 1 )
3040- require .NoError (mt , err , "mock server error: %v" , err )
3045+ testCases := []struct {
3046+ name string
3047+ failure string
3048+ }{
3049+ {"Case 1: createDataKey and encrypt with TCP retry" , "network" },
3050+ {"Case 2: createDataKey and encrypt with HTTP retry" , "http" },
3051+ }
30413052
3042- testVal := bson.RawValue {Type : bson .TypeInt32 , Value : bsoncore .AppendInt32 (nil , 123 )}
3043- eo := options .Encrypt ().
3044- SetKeyID (keyID ).
3045- SetAlgorithm ("AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" )
3046- _ , err = clientEncryption .Encrypt (context .Background (), testVal , eo )
3047- assert .NoError (mt , err , "error in Encrypt: %v" , err )
3053+ for _ , tc := range testCases {
3054+ mt .Run (tc .name , func (mt * mtest.T ) {
3055+ for _ , dataKey := range dataKeys {
3056+ keyVaultClient , err := mongo .Connect (options .Client ().ApplyURI (mtest .ClusterURI ()))
3057+ require .NoError (mt , err , "error on Connect: %v" , err )
3058+
3059+ ceo := options .ClientEncryption ().
3060+ SetKeyVaultNamespace (kvNamespace ).
3061+ SetKmsProviders (fullKmsProvidersMap ).
3062+ SetTLSConfig (map [string ]* tls.Config {dataKey .provider : tlsCfg })
3063+ clientEncryption , err := mongo .NewClientEncryption (keyVaultClient , ceo )
3064+ require .NoError (mt , err , "error on NewClientEncryption: %v" , err )
3065+
3066+ err = setFailPoint (tc .failure , 1 )
3067+ require .NoError (mt , err , "mock server error: %v" , err )
3068+
3069+ dkOpts := options .DataKey ().SetMasterKey (dataKey .masterKey )
3070+ var keyID bson.Binary
3071+ keyID , err = clientEncryption .CreateDataKey (context .Background (), dataKey .provider , dkOpts )
3072+ require .NoError (mt , err , "error in CreateDataKey: %v" , err )
3073+
3074+ err = setFailPoint (tc .failure , 1 )
3075+ require .NoError (mt , err , "mock server error: %v" , err )
3076+
3077+ testVal := bson.RawValue {Type : bson .TypeInt32 , Value : bsoncore .AppendInt32 (nil , 123 )}
3078+ eo := options .Encrypt ().
3079+ SetKeyID (keyID ).
3080+ SetAlgorithm ("AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" )
3081+ _ , err = clientEncryption .Encrypt (context .Background (), testVal , eo )
3082+ assert .NoError (mt , err , "error in Encrypt: %v" , err )
3083+ }
3084+ })
3085+ }
30483086 })
30493087}
30503088
0 commit comments