Merge branch 'master' into fix-mongodb-canonical
This commit is contained in:
commit
9545d8204d
|
@ -0,0 +1,46 @@
|
|||
#
|
||||
# Copyright 2021 The Dapr Authors
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
name: fossa
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- release-*
|
||||
tags:
|
||||
- v*
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- release-*
|
||||
workflow_dispatch: {}
|
||||
jobs:
|
||||
fossa-scan:
|
||||
if: github.repository_owner == 'dapr' # FOSSA is not intended to run on forks.
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
FOSSA_API_KEY: b88e1f4287c3108c8751bf106fb46db6 # This is a push-only token that is safe to be exposed.
|
||||
steps:
|
||||
- name: "Checkout code"
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: "Run FOSSA Scan"
|
||||
uses: fossas/fossa-action@main # Use a specific version if locking is preferred
|
||||
with:
|
||||
api-key: ${{ env.FOSSA_API_KEY }}
|
||||
|
||||
- name: "Run FOSSA Test"
|
||||
uses: fossas/fossa-action@main # Use a specific version if locking is preferred
|
||||
with:
|
||||
api-key: ${{ env.FOSSA_API_KEY }}
|
||||
run-tests: true
|
|
@ -3,6 +3,7 @@
|
|||
[](https://github.com/dapr/components-contrib/actions?workflow=components-contrib)
|
||||
[](https://discord.com/channels/778680217417809931/781589820128493598)
|
||||
[](https://github.com/dapr/components-contrib/blob/master/LICENSE)
|
||||
[](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fdapr%2Fcomponents-contrib?ref=badge_shield)
|
||||
|
||||
The purpose of Components Contrib is to provide open, community driven reusable components for building distributed applications.
|
||||
These components are being used by the [Dapr](https://github.com/dapr/dapr) project, but are separate and decoupled from it.
|
||||
|
|
|
@ -462,6 +462,100 @@ func ConformanceTests(t *testing.T, props map[string]string, statestore state.St
|
|||
}
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("transaction-order", func(t *testing.T) {
|
||||
// Arrange
|
||||
firstKey := "key1"
|
||||
firstValue := "value1"
|
||||
secondKey := "key2"
|
||||
secondValue := "value2"
|
||||
thirdKey := "key3"
|
||||
thirdValue := "value3"
|
||||
|
||||
// for CosmosDB
|
||||
partitionMetadata := map[string]string{
|
||||
"partitionKey": "myPartition",
|
||||
}
|
||||
|
||||
// prerequisite: key1 should be present
|
||||
err := statestore.Set(&state.SetRequest{
|
||||
Key: firstKey,
|
||||
Value: firstValue,
|
||||
Metadata: partitionMetadata,
|
||||
})
|
||||
assert.NoError(t, err, "set request should be successful")
|
||||
|
||||
// prerequisite: key2 should not be present
|
||||
err = statestore.Delete(&state.DeleteRequest{
|
||||
Key: secondKey,
|
||||
Metadata: partitionMetadata,
|
||||
})
|
||||
assert.NoError(t, err, "delete request should be successful")
|
||||
|
||||
// prerequisite: key3 should not be present
|
||||
err = statestore.Delete(&state.DeleteRequest{
|
||||
Key: thirdKey,
|
||||
Metadata: partitionMetadata,
|
||||
})
|
||||
assert.NoError(t, err, "delete request should be successful")
|
||||
|
||||
operations := []state.TransactionalStateOperation{
|
||||
// delete an item that already exists
|
||||
{
|
||||
Operation: state.Delete,
|
||||
Request: state.DeleteRequest{
|
||||
Key: firstKey,
|
||||
},
|
||||
},
|
||||
// upsert a new item
|
||||
{
|
||||
Operation: state.Upsert,
|
||||
Request: state.SetRequest{
|
||||
Key: secondKey,
|
||||
Value: secondValue,
|
||||
},
|
||||
},
|
||||
// delete the item that was just upserted
|
||||
{
|
||||
Operation: state.Delete,
|
||||
Request: state.DeleteRequest{
|
||||
Key: secondKey,
|
||||
},
|
||||
},
|
||||
// upsert a new item
|
||||
{
|
||||
Operation: state.Upsert,
|
||||
Request: state.SetRequest{
|
||||
Key: thirdKey,
|
||||
Value: thirdValue,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
expected := map[string][]byte{
|
||||
firstKey: []byte(nil),
|
||||
secondKey: []byte(nil),
|
||||
thirdKey: []byte(fmt.Sprintf("\"%s\"", thirdValue)),
|
||||
}
|
||||
|
||||
// Act
|
||||
transactionStore := statestore.(state.TransactionalStore)
|
||||
err = transactionStore.Multi(&state.TransactionalStateRequest{
|
||||
Operations: operations,
|
||||
Metadata: partitionMetadata,
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
|
||||
// Assert
|
||||
for k, v := range expected {
|
||||
res, err := statestore.Get(&state.GetRequest{
|
||||
Key: k,
|
||||
Metadata: partitionMetadata,
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, v, res.Data)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
// Check if transactional feature is NOT listed
|
||||
features := statestore.Features()
|
||||
|
|
Loading…
Reference in New Issue