def test_integration(self): async def fun(context, message): any = Any() any.type_url = 'type.googleapis.com/k8s.demo.SeenCount' context.send("bar.baz/foo", "12345", any) # # build the invocation # builder = InvocationBuilder() builder.with_target("org.foo", "greeter", "0") seen = SeenCount() seen.seen = 100 builder.with_state("seen", seen) arg = LoginEvent() arg.user_name = "user-1" builder.with_invocation(arg, ("org.foo", "greeter-java", "0")) # # invoke # result_json = async_round_trip("org.foo/greeter", fun, builder) # assert outgoing message second_out_message = json_at(result_json, NTH_OUTGOING_MESSAGE(0)) self.assertEqual(second_out_message['target']['namespace'], 'bar.baz') self.assertEqual(second_out_message['target']['type'], 'foo') self.assertEqual(second_out_message['target']['id'], '12345') self.assertEqual(second_out_message['argument']['@type'], 'type.googleapis.com/k8s.demo.SeenCount')
def test_integration(self): async def fun(context, message): # state access seen = context.state('seen').unpack(SeenCount) if seen.seen > 0: raise FunctionInvocationException("test failure") else: seen.seen += 1 context.state('seen').pack(seen) context.pack_and_reply(seen) # # build the invocation # builder = InvocationBuilder() builder.with_target("org.foo", "greeter", "0") seen = SeenCount() seen.seen = 0 builder.with_state("seen", seen) arg = LoginEvent() arg.user_name = "user-1" builder.with_invocation(arg, ("org.foo", "greeter-java", "0")) builder.with_invocation(arg, ("org.foo", "greeter-java", "0")) builder.with_invocation(arg, ("org.foo", "greeter-java", "0")) # # invoke # result_json = async_round_trip("org.foo/greeter", fun, builder) # assert first outgoing message first_out_message = json_at(result_json, NTH_OUTGOING_MESSAGE(0)) self.assertEqual(first_out_message['target']['namespace'], 'org.foo') self.assertEqual(first_out_message['target']['type'], 'greeter-java') self.assertEqual(first_out_message['target']['id'], '0') self.assertEqual(first_out_message['argument']['@type'], 'type.googleapis.com/k8s.demo.SeenCount') # assert state mutations first_mutation = json_at(result_json, NTH_STATE_MUTATION(0)) self.assertEqual(first_mutation['mutation_type'], 'MODIFY') self.assertEqual(first_mutation['state_name'], 'seen') self.assertIsNotNone(first_mutation['state_value']) # assert failed working self.assertEqual(result_json['invocation_result']['failed'][0], False) self.assertEqual(result_json['invocation_result']['failed'][1], True) self.assertEqual(result_json['invocation_result']['failed'][2], True)
def test_integration(self): def fun(context, message): any = Any() any.type_url = 'type.googleapis.com/k8s.demo.SeenCount' context.send_invocation_pair("bar.baz/foo", "12345", any, any) # # build the invocation # builder = InvocationBuilder() builder.with_target("org.foo", "greeter", "0") arg = LoginEvent() arg.user_name = "user-1" builder.with_invocation(arg, ("org.foo", "greeter-java", "0")) # # invoke # result_json = round_trip("org.foo/greeter", fun, builder) self.assertIsNotNone(result_json['sagas_function_invocation_result'])
def test_integration(self): def fun(context, message): # state access seen = context.state('seen').unpack(SeenCount) seen.seen += 1 context.state('seen').pack(seen) # regular state access seenAny = context['seen'] seenAny.Unpack(seen) # sending and replying context.pack_and_reply(seen) any = Any() any.type_url = 'type.googleapis.com/k8s.demo.SeenCount' context.send("bar.baz/foo", "12345", any) # delayed messages context.send_after(timedelta(hours=1), "night/owl", "1", any) # egresses context.send_egress("foo.bar.baz/my-egress", any) context.pack_and_send_egress("foo.bar.baz/my-egress", seen) # kafka egress context.pack_and_send_egress( "sdk/kafka", kafka_egress_record(topic="hello", key=u"hello world", value=seen)) context.pack_and_send_egress( "sdk/kafka", kafka_egress_record(topic="hello", value=seen)) # AWS Kinesis generic egress context.pack_and_send_egress( "sdk/kinesis", kinesis_egress_record(stream="hello", partition_key=u"hello world", value=seen, explicit_hash_key=u"1234")) context.pack_and_send_egress( "sdk/kinesis", kinesis_egress_record(stream="hello", partition_key=u"hello world", value=seen)) # # build the invocation # builder = InvocationBuilder() builder.with_target("org.foo", "greeter", "0") seen = SeenCount() seen.seen = 100 builder.with_state("seen", seen) arg = LoginEvent() arg.user_name = "user-1" builder.with_invocation(arg, ("org.foo", "greeter-java", "0")) # # invoke # result_json = round_trip("org.foo/greeter", fun, builder) # assert first outgoing message first_out_message = json_at(result_json, NTH_OUTGOING_MESSAGE(0)) self.assertEqual(first_out_message['target']['namespace'], 'org.foo') self.assertEqual(first_out_message['target']['type'], 'greeter-java') self.assertEqual(first_out_message['target']['id'], '0') self.assertEqual(first_out_message['argument']['@type'], 'type.googleapis.com/k8s.demo.SeenCount') # assert second outgoing message second_out_message = json_at(result_json, NTH_OUTGOING_MESSAGE(1)) self.assertEqual(second_out_message['target']['namespace'], 'bar.baz') self.assertEqual(second_out_message['target']['type'], 'foo') self.assertEqual(second_out_message['target']['id'], '12345') self.assertEqual(second_out_message['argument']['@type'], 'type.googleapis.com/k8s.demo.SeenCount') # assert state mutations first_mutation = json_at(result_json, NTH_STATE_MUTATION(0)) self.assertEqual(first_mutation['mutation_type'], 'MODIFY') self.assertEqual(first_mutation['state_name'], 'seen') self.assertIsNotNone(first_mutation['state_value']) # assert delayed first_delayed = json_at(result_json, NTH_DELAYED_MESSAGE(0)) self.assertEqual(int(first_delayed['delay_in_ms']), 1000 * 60 * 60) # assert egresses first_egress = json_at(result_json, NTH_EGRESS(0)) self.assertEqual(first_egress['egress_namespace'], 'foo.bar.baz') self.assertEqual(first_egress['egress_type'], 'my-egress') self.assertEqual(first_egress['argument']['@type'], 'type.googleapis.com/k8s.demo.SeenCount')