Merge branch 'master' into explicitly-add-consumer

This commit is contained in:
Bernd Verst 2022-11-10 12:23:59 -08:00 committed by GitHub
commit 0d3e794986
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 11 deletions

View File

@ -25,7 +25,6 @@ import (
"github.com/dapr/components-contrib/bindings"
azauth "github.com/dapr/components-contrib/internal/authentication/azure"
"github.com/dapr/components-contrib/internal/utils"
contribMetadata "github.com/dapr/components-contrib/metadata"
"github.com/dapr/kit/logger"
)
@ -50,6 +49,7 @@ type AzureQueueHelper struct {
queueURL azqueue.QueueURL
logger logger.Logger
decodeBase64 bool
encodeBase64 bool
}
// Init sets up this helper.
@ -73,6 +73,7 @@ func (d *AzureQueueHelper) Init(metadata bindings.Metadata) (*storageQueuesMetad
p := azqueue.NewPipeline(credential, pipelineOptions)
d.decodeBase64 = m.DecodeBase64
d.encodeBase64 = m.EncodeBase64
if m.QueueEndpoint != "" {
URL, parseErr := url.Parse(fmt.Sprintf("%s/%s/%s", m.QueueEndpoint, m.AccountName, m.QueueName))
@ -103,6 +104,10 @@ func (d *AzureQueueHelper) Write(ctx context.Context, data []byte, ttl *time.Dur
s = string(data)
}
if d.encodeBase64 {
s = base64.StdEncoding.EncodeToString([]byte(s))
}
if ttl == nil {
ttlToUse := defaultTTL
ttl = &ttlToUse
@ -174,6 +179,7 @@ type storageQueuesMetadata struct {
QueueEndpoint string
AccountName string
DecodeBase64 bool
EncodeBase64 bool
ttl *time.Duration
}
@ -192,29 +198,29 @@ func (a *AzureStorageQueues) Init(metadata bindings.Metadata) (err error) {
return nil
}
func parseMetadata(metadata bindings.Metadata) (*storageQueuesMetadata, error) {
func parseMetadata(meta bindings.Metadata) (*storageQueuesMetadata, error) {
var m storageQueuesMetadata
// AccountKey is parsed in azauth
if val, ok := contribMetadata.GetMetadataProperty(metadata.Properties, azauth.StorageAccountNameKeys...); ok && val != "" {
contribMetadata.DecodeMetadata(meta.Properties, &m)
if val, ok := contribMetadata.GetMetadataProperty(meta.Properties, azauth.StorageAccountNameKeys...); ok && val != "" {
m.AccountName = val
} else {
return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageAccountNameKeys[0])
}
if val, ok := contribMetadata.GetMetadataProperty(metadata.Properties, azauth.StorageQueueNameKeys...); ok && val != "" {
if val, ok := contribMetadata.GetMetadataProperty(meta.Properties, azauth.StorageQueueNameKeys...); ok && val != "" {
m.QueueName = val
} else {
return nil, fmt.Errorf("missing or empty %s field from metadata", azauth.StorageQueueNameKeys[0])
}
if val, ok := contribMetadata.GetMetadataProperty(metadata.Properties, azauth.StorageEndpointKeys...); ok && val != "" {
if val, ok := contribMetadata.GetMetadataProperty(meta.Properties, azauth.StorageEndpointKeys...); ok && val != "" {
m.QueueEndpoint = val
}
m.DecodeBase64 = utils.IsTruthy(metadata.Properties["decodeBase64"])
ttl, ok, err := contribMetadata.TryGetTTL(metadata.Properties)
ttl, ok, err := contribMetadata.TryGetTTL(meta.Properties)
if err != nil {
return nil, err
}

View File

@ -17,6 +17,8 @@ spec:
key: AzureBlobStorageAccessKey
- name: decodeBase64
value: true
- name: encodeBase64
value: true
- name: queue
value: "decodequeue"
auth:

View File

@ -16,7 +16,6 @@ package storagequeue_test
import (
"context"
"encoding/base64"
"fmt"
"testing"
"time"
@ -312,7 +311,7 @@ func TestAzureStorageQueueForDecode(t *testing.T) {
// Declare the expected data.
msgs := make([]string, numOfMessages)
for i := 0; i < numOfMessages; i++ {
msgs[i] = fmt.Sprintf("Message %03d", i)
msgs[i] = fmt.Sprintf("Message %03d", i) // the chinese character is part of the test for UTF-8 characters
}
messages.ExpectStrings(msgs...)
@ -323,7 +322,6 @@ func TestAzureStorageQueueForDecode(t *testing.T) {
for _, msg := range msgs {
ctx.Logf("Sending: %q", msg)
dataBytes := []byte(msg)
dataBytes = []byte(base64.StdEncoding.EncodeToString(dataBytes))
req := &daprClient.InvokeBindingRequest{Name: "decode-binding", Operation: "create", Data: dataBytes, Metadata: metadata}
err := client.InvokeOutputBinding(ctx, req)
require.NoError(ctx, err, "error publishing message")