Files
tasks/common/persistence/operation_mode_validator_test.go
Alex ShtinandGitHub 8e8f1b0f7c Remove license header from every file (#7689)
## What changed?
<!-- Describe what has changed in this PR -->
Remove license header from every file. Because it is really hard to
follow in this PR here is the summary:
1. License header is removed from all `.go` and `.proto` files
:fireworks::fireworks:🎆.
2. `LICENSE` file in the root directory has only Temporal and Uber
copyrights.
3. 5 other `LICENSE` files added to the packages which have copyrights
different from Temporal and Uber: Datadog, Xargin, "Mat Ryer, Tyler
Bunnell and contributors".
4. `license_file` flag is removed from all code generation tools.
5. `copyright_file` flag is removed from `go:generate mockgen`
directive.
6. All copyright related targets are removed from `Makefile`.
7. Updated Temporal copyright year to 2025 everywhere.

## Why?
<!-- Tell your future self why have you made these changes -->
I double checked with legal department that it is not needed to have
license header in every file. One file per repo is enough. I put all
copyrights to the root `LICENSE` file and removed header from all other
files. Also updated tools and `Makefile`.
2025-05-01 18:50:21 -07:00

396 lines
12 KiB
Go

package persistence
import (
"fmt"
"testing"
"github.com/stretchr/testify/suite"
enumsspb "go.temporal.io/server/api/enums/v1"
persistencespb "go.temporal.io/server/api/persistence/v1"
)
type (
validateOperationWorkflowModeStateSuite struct {
suite.Suite
}
)
func TestValidateOperationWorkflowModeStateSuite(t *testing.T) {
s := new(validateOperationWorkflowModeStateSuite)
suite.Run(t, s)
}
func (s *validateOperationWorkflowModeStateSuite) SetupSuite() {
}
func (s *validateOperationWorkflowModeStateSuite) TearDownSuite() {
}
func (s *validateOperationWorkflowModeStateSuite) SetupTest() {
}
func (s *validateOperationWorkflowModeStateSuite) TearDownTest() {
}
func (s *validateOperationWorkflowModeStateSuite) TestCreateMode_UpdateCurrent() {
stateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: false,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
creatModes := []CreateWorkflowMode{
CreateWorkflowModeBrandNew,
CreateWorkflowModeUpdateCurrent,
}
for state, expectError := range stateToError {
testSnapshot := s.newTestWorkflowSnapshot(state)
for _, createMode := range creatModes {
err := ValidateCreateWorkflowModeState(createMode, testSnapshot)
if !expectError {
s.NoError(err, err)
} else {
s.Error(err, err)
}
}
}
}
func (s *validateOperationWorkflowModeStateSuite) TestCreateMode_BypassCurrent() {
stateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
for state, expectError := range stateToError {
testSnapshot := s.newTestWorkflowSnapshot(state)
err := ValidateCreateWorkflowModeState(CreateWorkflowModeBypassCurrent, testSnapshot)
if !expectError {
s.NoError(err, err)
} else {
s.Error(err, err)
}
}
}
func (s *validateOperationWorkflowModeStateSuite) TestUpdateMode_UpdateCurrent() {
// only current workflow
stateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: false,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
for state, expectError := range stateToError {
testCurrentMutation := s.newTestWorkflowMutation(state)
err := ValidateUpdateWorkflowModeState(
UpdateWorkflowModeUpdateCurrent,
testCurrentMutation,
nil,
)
if !expectError {
s.NoError(err, err)
} else {
s.Error(err, err)
}
}
// current workflow & new workflow
currentStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
newStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: false,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
for currentState, currentExpectError := range currentStateToError {
for newState, newExpectError := range newStateToError {
testCurrentMutation := s.newTestWorkflowMutation(currentState)
testNewSnapshot := s.newTestWorkflowSnapshot(newState)
err := ValidateUpdateWorkflowModeState(
UpdateWorkflowModeUpdateCurrent,
testCurrentMutation,
&testNewSnapshot,
)
if currentExpectError || newExpectError {
s.Error(err, err)
} else {
s.NoError(err, err)
}
}
}
}
func (s *validateOperationWorkflowModeStateSuite) TestUpdateMode_BypassCurrent() {
// only current workflow
stateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
for state, expectError := range stateToError {
testMutation := s.newTestWorkflowMutation(state)
err := ValidateUpdateWorkflowModeState(
UpdateWorkflowModeBypassCurrent,
testMutation,
nil,
)
if !expectError {
s.NoError(err, err)
} else {
s.Error(err, err)
}
}
// current workflow & new workflow
currentStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
newStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
for currentState, currentExpectError := range currentStateToError {
for newState, newExpectError := range newStateToError {
testCurrentMutation := s.newTestWorkflowMutation(currentState)
testNewSnapshot := s.newTestWorkflowSnapshot(newState)
err := ValidateUpdateWorkflowModeState(
UpdateWorkflowModeBypassCurrent,
testCurrentMutation,
&testNewSnapshot,
)
if currentExpectError || newExpectError {
s.Error(err, err)
} else {
s.NoError(err, err)
}
}
}
}
func (s *validateOperationWorkflowModeStateSuite) TestConflictResolveMode_UpdateCurrent() {
// only reset workflow
stateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: false,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
for state, expectError := range stateToError {
testSnapshot := s.newTestWorkflowSnapshot(state)
err := ValidateConflictResolveWorkflowModeState(
ConflictResolveWorkflowModeUpdateCurrent,
testSnapshot,
nil,
nil,
)
if !expectError {
s.NoError(err, err)
} else {
s.Error(err, err)
}
}
// reset workflow & new workflow
resetStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
newStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: false,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
for resetState, resetExpectError := range resetStateToError {
for newState, newExpectError := range newStateToError {
testResetSnapshot := s.newTestWorkflowSnapshot(resetState)
testNewSnapshot := s.newTestWorkflowSnapshot(newState)
err := ValidateConflictResolveWorkflowModeState(
ConflictResolveWorkflowModeUpdateCurrent,
testResetSnapshot,
&testNewSnapshot,
nil,
)
if resetExpectError || newExpectError {
s.Error(err, err)
} else {
s.NoError(err, err)
}
}
}
// reset workflow & current workflow
resetStateToError = map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: false,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
currentStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
for resetState, resetExpectError := range resetStateToError {
for currentState, currentExpectError := range currentStateToError {
testResetSnapshot := s.newTestWorkflowSnapshot(resetState)
testCurrentSnapshot := s.newTestWorkflowMutation(currentState)
err := ValidateConflictResolveWorkflowModeState(
ConflictResolveWorkflowModeUpdateCurrent,
testResetSnapshot,
nil,
&testCurrentSnapshot,
)
if resetExpectError || currentExpectError {
s.Error(err, err)
} else {
s.NoError(err, err)
}
}
}
// reset workflow & new workflow & current workflow
resetStateToError = map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
newStateToError = map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: false,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
currentStateToError = map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
for resetState, resetExpectError := range resetStateToError {
for newState, newExpectError := range newStateToError {
for currentState, currentExpectError := range currentStateToError {
testResetSnapshot := s.newTestWorkflowSnapshot(resetState)
testNewSnapshot := s.newTestWorkflowSnapshot(newState)
testCurrentSnapshot := s.newTestWorkflowMutation(currentState)
err := ValidateConflictResolveWorkflowModeState(
ConflictResolveWorkflowModeUpdateCurrent,
testResetSnapshot,
&testNewSnapshot,
&testCurrentSnapshot,
)
if resetExpectError || newExpectError || currentExpectError {
s.Error(err, err)
} else {
s.NoError(err, err)
}
}
}
}
}
func (s *validateOperationWorkflowModeStateSuite) TestConflictResolveMode_BypassCurrent() {
// only reset workflow
stateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
for state, expectError := range stateToError {
testSnapshot := s.newTestWorkflowSnapshot(state)
err := ValidateConflictResolveWorkflowModeState(
ConflictResolveWorkflowModeBypassCurrent,
testSnapshot,
nil,
nil,
)
if !expectError {
s.NoError(err, err)
} else {
s.Error(err, err)
}
}
// reset workflow & new workflow
resetStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: false,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: true,
}
newStateToError := map[enumsspb.WorkflowExecutionState]bool{
enumsspb.WORKFLOW_EXECUTION_STATE_CREATED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_RUNNING: true,
enumsspb.WORKFLOW_EXECUTION_STATE_COMPLETED: true,
enumsspb.WORKFLOW_EXECUTION_STATE_ZOMBIE: false,
}
for resetState, resetExpectError := range resetStateToError {
for newState, newExpectError := range newStateToError {
testResetSnapshot := s.newTestWorkflowSnapshot(resetState)
testNewSnapshot := s.newTestWorkflowSnapshot(newState)
err := ValidateConflictResolveWorkflowModeState(
ConflictResolveWorkflowModeBypassCurrent,
testResetSnapshot,
&testNewSnapshot,
nil,
)
if resetExpectError || newExpectError {
if err == nil {
fmt.Print("##")
}
s.Error(err, err)
} else {
s.NoError(err, err)
}
}
}
}
func (s *validateOperationWorkflowModeStateSuite) newTestWorkflowSnapshot(
state enumsspb.WorkflowExecutionState,
) WorkflowSnapshot {
return WorkflowSnapshot{
ExecutionInfo: &persistencespb.WorkflowExecutionInfo{},
ExecutionState: &persistencespb.WorkflowExecutionState{State: state},
}
}
func (s *validateOperationWorkflowModeStateSuite) newTestWorkflowMutation(
state enumsspb.WorkflowExecutionState,
) WorkflowMutation {
return WorkflowMutation{
ExecutionInfo: &persistencespb.WorkflowExecutionInfo{},
ExecutionState: &persistencespb.WorkflowExecutionState{State: state},
}
}