Skip to content

Commit 610f39f

Browse files
authored
Added the Activity Registration required failure scenario to replayer test suite (#1231)
* Added the Activity Registration required failure scenario to replayer test suite * Renamed files according to go convention * added copyright info to the files * Skipped the test case that panics at incompatible activity returns. This is an expected behaviour and test is included for documentation purposes.
1 parent 8e6d905 commit 610f39f

File tree

3 files changed

+105
-3
lines changed

3 files changed

+105
-3
lines changed

test/replaytests/activity_check.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright (c) 2017 Uber Technologies, Inc.
2+
//
3+
// Permission is hereby granted, free of charge, to any person obtaining a copy
4+
// of this software and associated documentation files (the "Software"), to deal
5+
// in the Software without restriction, including without limitation the rights
6+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7+
// copies of the Software, and to permit persons to whom the Software is
8+
// furnished to do so, subject to the following conditions:
9+
//
10+
// The above copyright notice and this permission notice shall be included in
11+
// all copies or substantial portions of the Software.
12+
//
13+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19+
// THE SOFTWARE.
20+
21+
package replaytests
22+
23+
import (
24+
"go.uber.org/cadence/workflow"
25+
"go.uber.org/zap"
26+
"time"
27+
)
28+
29+
// greetingsWorkflowActivity demonstrates the case in replayer where if an activity name is changed in a workflow or if a new activity is introdced in a workflow then the shdower fails.
30+
// There is also no other way to register the activity except for changing the json file so far.
31+
// CDNC-2267 addresses a fix for this.
32+
func greetingsWorkflowActivity(ctx workflow.Context) error {
33+
// Get Greeting.
34+
ao := workflow.ActivityOptions{
35+
ScheduleToStartTimeout: time.Minute,
36+
StartToCloseTimeout: time.Minute,
37+
HeartbeatTimeout: time.Second * 20,
38+
}
39+
ctx = workflow.WithActivityOptions(ctx, ao)
40+
41+
logger := workflow.GetLogger(ctx)
42+
var greetResult int64
43+
err := workflow.ExecuteActivity(ctx, getGreetingActivitytest).Get(ctx, &greetResult)
44+
if err != nil {
45+
logger.Error("Get greeting failed.", zap.Error(err))
46+
return err
47+
}
48+
49+
// Get Name.
50+
var nameResult string
51+
err = workflow.ExecuteActivity(ctx, getNameActivity).Get(ctx, &nameResult)
52+
if err != nil {
53+
logger.Error("Get name failed.", zap.Error(err))
54+
return err
55+
}
56+
57+
// Say Greeting.
58+
var sayResult string
59+
err = workflow.ExecuteActivity(ctx, sayGreetingActivity, greetResult, nameResult).Get(ctx, &sayResult)
60+
if err != nil {
61+
logger.Error("Marshalling failed with error.", zap.Error(err))
62+
return err
63+
}
64+
65+
logger.Info("Workflow completed.", zap.String("Result", sayResult))
66+
return nil
67+
}
68+
69+
// Get Greeting Activity.
70+
func getGreetingActivitytest() (string, error) {
71+
return "Hello", nil
72+
}

test/replaytests/replay_test.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ func TestReplayChildWorkflowBugBackport(t *testing.T) {
5353
require.NoError(t, err)
5454
}
5555

56+
// Gives a non-deterministic-error because the getGreetingActivitytest was not registered on the replayer.
57+
func TestGreetingsWorkflowforActivity(t *testing.T) {
58+
replayer := worker.NewWorkflowReplayer()
59+
replayer.RegisterWorkflowWithOptions(greetingsWorkflowActivity, workflow.RegisterOptions{Name: "greetings"})
60+
err := replayer.ReplayWorkflowHistoryFromJSONFile(zaptest.NewLogger(t), "greetings.json")
61+
require.Error(t, err)
62+
}
63+
5664
func TestGreetingsWorkflow(t *testing.T) {
5765
replayer := worker.NewWorkflowReplayer()
5866
replayer.RegisterWorkflowWithOptions(greetingsWorkflow, workflow.RegisterOptions{Name: "greetings"})
@@ -75,16 +83,18 @@ func TestGreetingsWorkflow4(t *testing.T) {
7583
activity.RegisterWithOptions(getNameActivity4, activity.RegisterOptions{Name: "main.getNameActivity", DisableAlreadyRegisteredCheck: true})
7684
replayer.RegisterWorkflowWithOptions(greetingsWorkflow4, workflow.RegisterOptions{Name: "greetings"})
7785
err := replayer.ReplayWorkflowHistoryFromJSONFile(zaptest.NewLogger(t), "greetings.json")
78-
require.NoError(t, err)
86+
require.Error(t, err)
7987
}
8088

81-
// Fails with a non deterministic error. This passes in cadence_samples because it's registered in Helper.
89+
// Panic with failed to register activity. This passes in cadence_samples because it's registered in Helper.
8290
// To test it on cadence_samples change the https://github.com/uber-common/cadence-samples/blob/master/cmd/samples/recipes/greetings/greetings_workflow.go
8391
// to include the extra return types in getNameActivity.
8492
func TestGreetingsWorkflow2(t *testing.T) {
93+
94+
t.Skip("Panic with failed to register activity. Here the activity returns incompatible arguments so the test should fail")
8595
replayer := worker.NewWorkflowReplayer()
8696
activity.RegisterWithOptions(getNameActivity2, activity.RegisterOptions{Name: "main.getNameActivity", DisableAlreadyRegisteredCheck: true})
8797
replayer.RegisterWorkflowWithOptions(greetingsWorkflow2, workflow.RegisterOptions{Name: "greetings"})
8898
err := replayer.ReplayWorkflowHistoryFromJSONFile(zaptest.NewLogger(t), "greetings.json")
89-
require.NoError(t, err)
99+
require.Error(t, err)
90100
}

test/replaytests/signatureBugWorkflow.go renamed to test/replaytests/signature_bug.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
// Copyright (c) 2017 Uber Technologies, Inc.
2+
//
3+
// Permission is hereby granted, free of charge, to any person obtaining a copy
4+
// of this software and associated documentation files (the "Software"), to deal
5+
// in the Software without restriction, including without limitation the rights
6+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7+
// copies of the Software, and to permit persons to whom the Software is
8+
// furnished to do so, subject to the following conditions:
9+
//
10+
// The above copyright notice and this permission notice shall be included in
11+
// all copies or substantial portions of the Software.
12+
//
13+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19+
// THE SOFTWARE.
20+
121
package replaytests
222

323
import (

0 commit comments

Comments
 (0)