Fix existing integration tests (#1173)
* Fix servicebusqueues_integration_test.go compile errors * Fix postgresql_integration_test.go deleteItemThatDoesNotExist expectations * Fix mysql_integration_test.go deleteItemThatDoesNotExist expectations * Fix mysql_integration_test.go for bindings * Increase TTL in ServiceBusQueues tests for stability
This commit is contained in:
		
							parent
							
								
									e41acc494c
								
							
						
					
					
						commit
						9a075cb43a
					
				| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
//go:build integration_test
 | 
			
		||||
// +build integration_test
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------
 | 
			
		||||
| 
						 | 
				
			
			@ -25,6 +26,7 @@ import (
 | 
			
		|||
const (
 | 
			
		||||
	// Environment variable containing the connection string to Azure Service Bus
 | 
			
		||||
	testServiceBusEnvKey = "DAPR_TEST_AZURE_SERVICEBUS"
 | 
			
		||||
	ttlInSeconds         = 5
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func getTestServiceBusConnectionString() string {
 | 
			
		||||
| 
						 | 
				
			
			@ -60,12 +62,12 @@ func getMessageWithRetries(queue *servicebus.Queue, maxDuration time.Duration) (
 | 
			
		|||
 | 
			
		||||
func TestQueueWithTTL(t *testing.T) {
 | 
			
		||||
	serviceBusConnectionString := getTestServiceBusConnectionString()
 | 
			
		||||
	assert.NotEmpty(serviceBusConnectionString, fmt.Sprintf("Azure ServiceBus connection string must set in environment variable '%s'", testServiceBusEnvKey))
 | 
			
		||||
	assert.NotEmpty(t, serviceBusConnectionString, fmt.Sprintf("Azure ServiceBus connection string must set in environment variable '%s'", testServiceBusEnvKey))
 | 
			
		||||
 | 
			
		||||
	queueName := uuid.New().String()
 | 
			
		||||
	a := NewAzureServiceBusQueues(logger.NewLogger("test"))
 | 
			
		||||
	m := bindings.Metadata{}
 | 
			
		||||
	m.Properties = map[string]string{"connectionString": serviceBusConnectionString, "queueName": queueName, metadata.TTLMetadataKey: "1"}
 | 
			
		||||
	m.Properties = map[string]string{"connectionString": serviceBusConnectionString, "queueName": queueName, metadata.TTLMetadataKey: fmt.Sprintf("%d", ttlInSeconds)}
 | 
			
		||||
	err := a.Init(m)
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -80,16 +82,15 @@ func TestQueueWithTTL(t *testing.T) {
 | 
			
		|||
 | 
			
		||||
	queueEntity, err := qmr.Get(context.Background(), queueName)
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
	assert.Equal(t, "PT1S", *queueEntity.DefaultMessageTimeToLive)
 | 
			
		||||
	assert.Equal(t, fmt.Sprintf("PT%dS", ttlInSeconds), *queueEntity.DefaultMessageTimeToLive)
 | 
			
		||||
 | 
			
		||||
	// Assert that if waited too long, we won't see any message
 | 
			
		||||
	const tooLateMsgContent = "too_late_msg"
 | 
			
		||||
	err = a.Write(&bindings.InvokeRequest{Data: []byte(tooLateMsgContent)})
 | 
			
		||||
	_, err = a.Invoke(&bindings.InvokeRequest{Data: []byte(tooLateMsgContent)})
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
 | 
			
		||||
	time.Sleep(time.Second * 2)
 | 
			
		||||
	time.Sleep(time.Second * (ttlInSeconds + 2))
 | 
			
		||||
 | 
			
		||||
	const ttlInSeconds = 1
 | 
			
		||||
	const maxGetDuration = ttlInSeconds * time.Second
 | 
			
		||||
 | 
			
		||||
	_, ok, err := getMessageWithRetries(queue, maxGetDuration)
 | 
			
		||||
| 
						 | 
				
			
			@ -98,7 +99,7 @@ func TestQueueWithTTL(t *testing.T) {
 | 
			
		|||
 | 
			
		||||
	// Getting before it is expired, should return it
 | 
			
		||||
	const testMsgContent = "test_msg"
 | 
			
		||||
	err = a.Write(&bindings.InvokeRequest{Data: []byte(testMsgContent)})
 | 
			
		||||
	_, err = a.Invoke(&bindings.InvokeRequest{Data: []byte(testMsgContent)})
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
 | 
			
		||||
	msg, ok, err := getMessageWithRetries(queue, maxGetDuration)
 | 
			
		||||
| 
						 | 
				
			
			@ -107,12 +108,12 @@ func TestQueueWithTTL(t *testing.T) {
 | 
			
		|||
	msgBody := string(msg.Data)
 | 
			
		||||
	assert.Equal(t, testMsgContent, msgBody)
 | 
			
		||||
	assert.NotNil(t, msg.TTL)
 | 
			
		||||
	assert.Equal(t, time.Second, *msg.TTL)
 | 
			
		||||
	assert.Equal(t, ttlInSeconds*time.Second, *msg.TTL)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPublishingWithTTL(t *testing.T) {
 | 
			
		||||
	serviceBusConnectionString := getTestServiceBusConnectionString()
 | 
			
		||||
	assert.NotEmpty(serviceBusConnectionString, fmt.Sprintf("Azure ServiceBus connection string must set in environment variable '%s'", testServiceBusEnvKey))
 | 
			
		||||
	assert.NotEmpty(t, serviceBusConnectionString, fmt.Sprintf("Azure ServiceBus connection string must set in environment variable '%s'", testServiceBusEnvKey))
 | 
			
		||||
 | 
			
		||||
	queueName := uuid.New().String()
 | 
			
		||||
	queueBinding1 := NewAzureServiceBusQueues(logger.NewLogger("test"))
 | 
			
		||||
| 
						 | 
				
			
			@ -140,15 +141,14 @@ func TestPublishingWithTTL(t *testing.T) {
 | 
			
		|||
	writeRequest := bindings.InvokeRequest{
 | 
			
		||||
		Data: []byte(tooLateMsgContent),
 | 
			
		||||
		Metadata: map[string]string{
 | 
			
		||||
			metadata.TTLMetadataKey: "1",
 | 
			
		||||
			metadata.TTLMetadataKey: fmt.Sprintf("%d", ttlInSeconds),
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	err = queueBinding1.Write(&writeRequest)
 | 
			
		||||
	_, err = queueBinding1.Invoke(&writeRequest)
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
 | 
			
		||||
	time.Sleep(time.Second * 5)
 | 
			
		||||
	time.Sleep(time.Second * (ttlInSeconds + 2))
 | 
			
		||||
 | 
			
		||||
	const ttlInSeconds = 1
 | 
			
		||||
	const maxGetDuration = ttlInSeconds * time.Second
 | 
			
		||||
 | 
			
		||||
	_, ok, err := getMessageWithRetries(queue, maxGetDuration)
 | 
			
		||||
| 
						 | 
				
			
			@ -164,10 +164,10 @@ func TestPublishingWithTTL(t *testing.T) {
 | 
			
		|||
	writeRequest = bindings.InvokeRequest{
 | 
			
		||||
		Data: []byte(testMsgContent),
 | 
			
		||||
		Metadata: map[string]string{
 | 
			
		||||
			metadata.TTLMetadataKey: "1",
 | 
			
		||||
			metadata.TTLMetadataKey: fmt.Sprintf("%d", ttlInSeconds),
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	err = queueBinding2.Write(&writeRequest)
 | 
			
		||||
	_, err = queueBinding2.Invoke(&writeRequest)
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
 | 
			
		||||
	msg, ok, err := getMessageWithRetries(queue, maxGetDuration)
 | 
			
		||||
| 
						 | 
				
			
			@ -177,5 +177,5 @@ func TestPublishingWithTTL(t *testing.T) {
 | 
			
		|||
	assert.Equal(t, testMsgContent, msgBody)
 | 
			
		||||
	assert.NotNil(t, msg.TTL)
 | 
			
		||||
 | 
			
		||||
	assert.Equal(t, time.Second, *msg.TTL)
 | 
			
		||||
	assert.Equal(t, ttlInSeconds*time.Second, *msg.TTL)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,9 @@ import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	// MySQL doesn't accept RFC3339 formatted time, rejects trailing 'Z' for UTC indicator.
 | 
			
		||||
	mySQLDateTimeFormat = "2006-01-02 15:04:05"
 | 
			
		||||
 | 
			
		||||
	testCreateTable = `CREATE TABLE IF NOT EXISTS foo (
 | 
			
		||||
		id bigint NOT NULL,
 | 
			
		||||
		v1 character varying(50) NOT NULL,
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +88,7 @@ func TestMysqlIntegration(t *testing.T) {
 | 
			
		|||
	t.Run("Invoke insert", func(t *testing.T) {
 | 
			
		||||
		req.Operation = execOperation
 | 
			
		||||
		for i := 0; i < 10; i++ {
 | 
			
		||||
			req.Metadata[commandSQLKey] = fmt.Sprintf(testInsert, i, i, true, time.Now().Format(time.RFC3339))
 | 
			
		||||
			req.Metadata[commandSQLKey] = fmt.Sprintf(testInsert, i, i, true, time.Now().Format(mySQLDateTimeFormat))
 | 
			
		||||
			res, err := b.Invoke(req)
 | 
			
		||||
			assertResponse(t, res, err)
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +97,7 @@ func TestMysqlIntegration(t *testing.T) {
 | 
			
		|||
	t.Run("Invoke update", func(t *testing.T) {
 | 
			
		||||
		req.Operation = execOperation
 | 
			
		||||
		for i := 0; i < 10; i++ {
 | 
			
		||||
			req.Metadata[commandSQLKey] = fmt.Sprintf(testUpdate, time.Now().Format(time.RFC3339), i)
 | 
			
		||||
			req.Metadata[commandSQLKey] = fmt.Sprintf(testUpdate, time.Now().Format(mySQLDateTimeFormat), i)
 | 
			
		||||
			res, err := b.Invoke(req)
 | 
			
		||||
			assertResponse(t, res, err)
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -154,5 +157,7 @@ func TestMysqlIntegration(t *testing.T) {
 | 
			
		|||
func assertResponse(t *testing.T, res *bindings.InvokeResponse, err error) {
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
	assert.NotNil(t, res)
 | 
			
		||||
	assert.NotNil(t, res.Metadata)
 | 
			
		||||
	if res != nil {
 | 
			
		||||
		assert.NotNil(t, res.Metadata)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -255,13 +255,13 @@ func multiWithDeleteAndSet(t *testing.T, mys *MySQL) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func deleteItemThatDoesNotExist(t *testing.T, mys *MySQL) {
 | 
			
		||||
	// Delete the item with a fake eTag
 | 
			
		||||
	// Delete the item with a key not in the store
 | 
			
		||||
	deleteReq := &state.DeleteRequest{
 | 
			
		||||
		Key: randomKey(),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := mys.Delete(deleteReq)
 | 
			
		||||
	assert.NotNil(t, err)
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func deleteWithNoKeyFails(t *testing.T, mys *MySQL) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -177,12 +177,12 @@ func dropTable(t *testing.T, db *sql.DB, tableName string) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func deleteItemThatDoesNotExist(t *testing.T, pgs *PostgreSQL) {
 | 
			
		||||
	// Delete the item with a fake etag
 | 
			
		||||
	// Delete the item with a key not in the store
 | 
			
		||||
	deleteReq := &state.DeleteRequest{
 | 
			
		||||
		Key: randomKey(),
 | 
			
		||||
	}
 | 
			
		||||
	err := pgs.Delete(deleteReq)
 | 
			
		||||
	assert.NotNil(t, err)
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func multiWithSetOnly(t *testing.T, pgs *PostgreSQL) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue