Files
tasks/common/persistence/transitionhistory/transition_history_test.go
Yichao YangandGitHub 89a4eb7855 CHASM: Engine Update/ReadComponent implementation (#7696)
## What changed?
- Implement chasm engine Update/Read Component method

## Why?
- CHASM work stream

## How did you test it?
- [x] built
- [ ] run locally and tested manually
- [ ] covered by existing tests
- [x] added new unit test(s)
- [ ] added new functional test(s)
2025-05-08 19:21:27 -07:00

117 lines
3.1 KiB
Go

package transitionhistory
import (
"testing"
"github.com/stretchr/testify/require"
persistencespb "go.temporal.io/server/api/persistence/v1"
"go.temporal.io/server/service/history/consts"
)
func TestCompareVersionedTransition(t *testing.T) {
b := &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 2,
TransitionCount: 2,
}
testCases := []struct {
name string
a *persistencespb.VersionedTransition
expectedResult int
}{
{
name: "equal",
a: &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 2,
TransitionCount: 2,
},
expectedResult: 0,
},
{
name: "same version, smaller transition count",
a: &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 2,
TransitionCount: 1,
},
expectedResult: -1,
},
{
name: "same version, larger transition count",
a: &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 2,
TransitionCount: 3,
},
expectedResult: 1,
},
{
name: "lower version",
a: &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 1,
TransitionCount: 10,
},
expectedResult: -1,
},
{
name: "higher version",
a: &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 3,
TransitionCount: 1,
},
expectedResult: 1,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
require.Equal(t, tc.expectedResult, Compare(tc.a, b))
})
}
}
func TestTransitionHistoryStalenessCheck(t *testing.T) {
var hist []*persistencespb.VersionedTransition
hist = []*persistencespb.VersionedTransition{
{NamespaceFailoverVersion: 1, TransitionCount: 3},
{NamespaceFailoverVersion: 3, TransitionCount: 6},
}
// sv == tv, range(sc) < tc
require.ErrorIs(t, StalenessCheck(hist, &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 3,
TransitionCount: 7,
}), consts.ErrStaleState)
// sv == tv, range(sc) contains tc
require.NoError(t, StalenessCheck(hist, &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 3,
TransitionCount: 4,
}))
// sv == tv, range(sc) > tc
require.ErrorIs(t, StalenessCheck(hist, &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 3,
TransitionCount: 3,
}), consts.ErrStaleReference)
// sv < tv
require.ErrorIs(t, StalenessCheck(hist, &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 4,
TransitionCount: 4,
}), consts.ErrStaleState)
// sv does not contain tv
require.ErrorIs(t, StalenessCheck(hist, &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 2,
TransitionCount: 4,
}), consts.ErrStaleReference)
// sv > tv, range(sc) does not contain tc
require.ErrorIs(t, StalenessCheck(hist, &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 1,
TransitionCount: 4,
}), consts.ErrStaleReference)
// sv > tv, range(sc) contains tc
require.NoError(t, StalenessCheck(hist, &persistencespb.VersionedTransition{
NamespaceFailoverVersion: 1,
TransitionCount: 3,
}))
}