synapse-core 0.4.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (163) hide show
  1. data/lib/synapse/command/async_command_bus.rb +41 -0
  2. data/lib/synapse/command/command_callback.rb +49 -2
  3. data/lib/synapse/command/command_handler.rb +2 -0
  4. data/lib/synapse/command/filters/validation.rb +2 -2
  5. data/lib/synapse/command/gateway/interval_retry_scheduler.rb +75 -0
  6. data/lib/synapse/command/gateway/retry_scheduler.rb +26 -0
  7. data/lib/synapse/command/gateway/retrying_callback.rb +46 -0
  8. data/lib/synapse/command/gateway.rb +56 -11
  9. data/lib/synapse/command/interceptor_chain.rb +2 -2
  10. data/lib/synapse/command/interceptors/serialization.rb +2 -2
  11. data/lib/synapse/command/message.rb +16 -0
  12. data/lib/synapse/command/simple_command_bus.rb +6 -2
  13. data/lib/synapse/command/wiring.rb +3 -3
  14. data/lib/synapse/command.rb +7 -1
  15. data/lib/synapse/common/concurrency/identifier_lock.rb +2 -17
  16. data/lib/synapse/common/concurrency/public_lock.rb +8 -9
  17. data/lib/synapse/common/errors.rb +1 -1
  18. data/lib/synapse/common/message.rb +2 -6
  19. data/lib/synapse/common.rb +9 -0
  20. data/lib/synapse/configuration/component/command_bus/async_command_bus.rb +41 -0
  21. data/lib/synapse/configuration/component/command_bus/gateway.rb +38 -0
  22. data/lib/synapse/configuration/component/command_bus/simple_command_bus.rb +81 -0
  23. data/lib/synapse/configuration/component/command_bus.rb +35 -0
  24. data/lib/synapse/configuration/component/event_bus/simple_event_bus.rb +41 -0
  25. data/lib/synapse/configuration/component/event_bus.rb +15 -0
  26. data/lib/synapse/configuration/component/event_sourcing/repository.rb +62 -0
  27. data/lib/synapse/configuration/component/event_sourcing.rb +15 -0
  28. data/lib/synapse/configuration/component/repository/locking_repository.rb +85 -0
  29. data/lib/synapse/configuration/component/repository/simple_repository.rb +31 -0
  30. data/lib/synapse/configuration/component/repository.rb +15 -0
  31. data/lib/synapse/configuration/component/serialization/converter_factory.rb +50 -0
  32. data/lib/synapse/configuration/component/serialization/serializer.rb +90 -0
  33. data/lib/synapse/configuration/component/serialization.rb +25 -0
  34. data/lib/synapse/configuration/component/uow/unit_factory.rb +51 -0
  35. data/lib/synapse/configuration/component/uow.rb +22 -0
  36. data/lib/synapse/configuration/component/upcasting/upcaster_chain.rb +61 -0
  37. data/lib/synapse/configuration/component/upcasting.rb +15 -0
  38. data/lib/synapse/configuration/container.rb +80 -0
  39. data/lib/synapse/configuration/container_builder.rb +108 -0
  40. data/lib/synapse/configuration/definition.rb +31 -0
  41. data/lib/synapse/configuration/definition_builder.rb +138 -0
  42. data/lib/synapse/configuration/dependent.rb +31 -0
  43. data/lib/synapse/configuration/ext.rb +35 -0
  44. data/lib/synapse/configuration.rb +32 -0
  45. data/lib/synapse/domain/aggregate_root.rb +25 -26
  46. data/lib/synapse/domain/event_container.rb +5 -5
  47. data/lib/synapse/domain/message.rb +16 -0
  48. data/lib/synapse/event_bus/event_listener.rb +2 -0
  49. data/lib/synapse/event_bus/event_publisher.rb +19 -0
  50. data/lib/synapse/event_bus/simple_event_bus.rb +21 -30
  51. data/lib/synapse/event_bus/wiring.rb +5 -4
  52. data/lib/synapse/event_bus.rb +1 -1
  53. data/lib/synapse/event_sourcing/aggregate_root.rb +6 -4
  54. data/lib/synapse/process_manager/container_resource_injector.rb +18 -0
  55. data/lib/synapse/process_manager/pessimistic_lock_manager.rb +1 -1
  56. data/lib/synapse/process_manager/process.rb +4 -0
  57. data/lib/synapse/process_manager/process_factory.rb +3 -3
  58. data/lib/synapse/process_manager/repository/in_memory.rb +1 -1
  59. data/lib/synapse/process_manager/wiring/process.rb +6 -6
  60. data/lib/synapse/process_manager/wiring/process_manager.rb +8 -8
  61. data/lib/synapse/process_manager.rb +2 -0
  62. data/lib/synapse/repository/locking.rb +5 -3
  63. data/lib/synapse/repository/optimistic_lock_manager.rb +2 -7
  64. data/lib/synapse/repository/pessimistic_lock_manager.rb +3 -3
  65. data/lib/synapse/repository/repository.rb +2 -2
  66. data/lib/synapse/repository/simple_repository.rb +69 -0
  67. data/lib/synapse/repository.rb +1 -0
  68. data/lib/synapse/serialization/converter/chain.rb +2 -2
  69. data/lib/synapse/serialization/converter_factory.rb +2 -2
  70. data/lib/synapse/serialization/lazy_object.rb +2 -2
  71. data/lib/synapse/serialization/message/serialization_aware_message.rb +3 -3
  72. data/lib/synapse/serialization/message/serialized_message.rb +6 -10
  73. data/lib/synapse/serialization/message/serialized_message_builder.rb +4 -4
  74. data/lib/synapse/serialization/message/serialized_object_cache.rb +2 -2
  75. data/lib/synapse/serialization/message/serializer.rb +2 -2
  76. data/lib/synapse/serialization/revision_resolver.rb +3 -3
  77. data/lib/synapse/serialization/serialized_object.rb +2 -2
  78. data/lib/synapse/serialization/serialized_type.rb +2 -2
  79. data/lib/synapse/serialization/serializer/attribute.rb +2 -2
  80. data/lib/synapse/serialization/serializer/marshal.rb +2 -2
  81. data/lib/synapse/serialization/serializer/oj.rb +2 -2
  82. data/lib/synapse/serialization/serializer/ox.rb +2 -2
  83. data/lib/synapse/serialization/serializer.rb +2 -2
  84. data/lib/synapse/uow/factory.rb +2 -2
  85. data/lib/synapse/uow/listener_collection.rb +2 -2
  86. data/lib/synapse/uow/nesting.rb +9 -2
  87. data/lib/synapse/uow/provider.rb +2 -2
  88. data/lib/synapse/uow/uow.rb +8 -2
  89. data/lib/synapse/upcasting/{chain.rb → upcaster_chain.rb} +0 -0
  90. data/lib/synapse/upcasting.rb +1 -1
  91. data/lib/synapse/version.rb +1 -1
  92. data/lib/synapse/wiring/message_wiring.rb +31 -0
  93. data/lib/synapse.rb +2 -14
  94. data/test/auditing/data_provider_test.rb +2 -2
  95. data/test/auditing/dispatch_interceptor_test.rb +1 -1
  96. data/test/auditing/unit_listener_test.rb +3 -3
  97. data/test/command/async_command_bus_test.rb +49 -0
  98. data/test/command/duplication_test.rb +2 -2
  99. data/test/command/gateway/interval_retry_scheduler_test.rb +42 -0
  100. data/test/command/gateway/retrying_callback_test.rb +57 -0
  101. data/test/command/gateway_test.rb +41 -7
  102. data/test/command/interceptor_chain_test.rb +1 -1
  103. data/test/command/message_test.rb +17 -0
  104. data/test/command/serialization_test.rb +2 -2
  105. data/test/command/simple_command_bus_test.rb +7 -7
  106. data/test/command/validation_test.rb +3 -3
  107. data/test/command/wiring_test.rb +3 -3
  108. data/test/common/concurrency/identifier_lock_test.rb +2 -13
  109. data/test/common/concurrency/public_lock_test.rb +6 -6
  110. data/test/{duplication_test.rb → common/duplication_test.rb} +3 -3
  111. data/test/configuration/component/command_bus/async_command_bus_test.rb +36 -0
  112. data/test/configuration/component/command_bus/simple_command_bus_test.rb +57 -0
  113. data/test/configuration/component/event_bus/simple_event_bus_test.rb +58 -0
  114. data/test/configuration/component/serialization/converter_factory_test.rb +48 -0
  115. data/test/configuration/component/serialization/serializer_test.rb +78 -0
  116. data/test/configuration/component/uow/unit_factory_test.rb +46 -0
  117. data/test/configuration/container_builder_test.rb +47 -0
  118. data/test/configuration/container_test.rb +88 -0
  119. data/test/configuration/definition_builder_test.rb +126 -0
  120. data/test/configuration/definition_test.rb +41 -0
  121. data/test/configuration/dependent_test.rb +30 -0
  122. data/test/configuration/ext_test.rb +19 -0
  123. data/test/configuration/fixtures/dependent.rb +10 -0
  124. data/test/domain/aggregate_root_test.rb +5 -5
  125. data/test/domain/message_test.rb +15 -3
  126. data/test/domain/stream_test.rb +2 -2
  127. data/test/event_bus/publisher_test.rb +29 -0
  128. data/test/event_bus/wiring_test.rb +1 -1
  129. data/test/event_sourcing/aggregate_factory_test.rb +12 -6
  130. data/test/event_sourcing/aggregate_root_test.rb +4 -4
  131. data/test/event_sourcing/entity_test.rb +10 -9
  132. data/test/event_sourcing/repository_test.rb +6 -6
  133. data/test/event_sourcing/storage_listener_test.rb +8 -4
  134. data/test/event_store/in_memory_test.rb +3 -3
  135. data/test/process_manager/container_resource_injector_test.rb +19 -0
  136. data/test/process_manager/correlation_set_test.rb +2 -2
  137. data/test/process_manager/correlation_test.rb +2 -2
  138. data/test/process_manager/in_memory_test.rb +3 -3
  139. data/test/process_manager/process_factory_test.rb +2 -2
  140. data/test/process_manager/process_test.rb +3 -3
  141. data/test/process_manager/simple_process_manager_test.rb +5 -5
  142. data/test/process_manager/wiring/process_manager_test.rb +4 -4
  143. data/test/process_manager/wiring/process_test.rb +2 -2
  144. data/test/repository/locking_test.rb +4 -4
  145. data/test/repository/optimistic_test.rb +2 -2
  146. data/test/repository/pessimistic_test.rb +1 -1
  147. data/test/repository/simple_repository_test.rb +79 -0
  148. data/test/support/countdown_latch.rb +18 -0
  149. data/test/test_helper.rb +6 -3
  150. data/test/upcasting/data_test.rb +31 -0
  151. metadata +84 -25
  152. data/lib/synapse/event_bus/event_listener_proxy.rb +0 -12
  153. data/lib/synapse/partitioning/memory_queue_reader.rb +0 -31
  154. data/lib/synapse/partitioning/memory_queue_writer.rb +0 -19
  155. data/lib/synapse/partitioning/message_receipt.rb +0 -25
  156. data/lib/synapse/partitioning/packing/json_packer.rb +0 -93
  157. data/lib/synapse/partitioning/packing/json_unpacker.rb +0 -83
  158. data/lib/synapse/partitioning/packing.rb +0 -27
  159. data/lib/synapse/partitioning/queue_reader.rb +0 -32
  160. data/lib/synapse/partitioning/queue_writer.rb +0 -17
  161. data/lib/synapse/partitioning.rb +0 -18
  162. data/test/partitioning/memory_test.rb +0 -34
  163. data/test/partitioning/packing/json_test.rb +0 -62
@@ -1,31 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- # Queue reader that dequeues messages from an in-memory Ruby queue
4
- class MemoryQueueReader < QueueReader
5
- # @param [Queue] queue
6
- # @param [String] name Name of the queue being read from
7
- # @return [undefined]
8
- def initialize(queue, name)
9
- @queue = queue
10
- @name = name
11
- end
12
-
13
- # @yield [MessageReceipt] Receipt of the message taken off the queue
14
- # @return [undefined]
15
- def subscribe(&handler)
16
- loop do
17
- packed = @queue.pop
18
-
19
- receipt = MessageReceipt.new 0, packed, @name
20
- handler.call receipt
21
- end
22
- end
23
-
24
- # @param [MessageReceipt] receipt
25
- # @return [undefined]
26
- def nack_message(receipt)
27
- @queue.push receipt.packed
28
- end
29
- end
30
- end
31
- end
@@ -1,19 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- # Queue writer that pushes message into an in-memory Ruby queue
4
- class MemoryQueueWriter < QueueWriter
5
- # @param [Queue] queue
6
- # @return [undefined]
7
- def initialize(queue)
8
- @queue = queue
9
- end
10
-
11
- # @param [Object] packed
12
- # @param [Message] unpacked
13
- # @return [undefined]
14
- def put_message(packed, unpacked)
15
- @queue.push packed
16
- end
17
- end
18
- end
19
- end
@@ -1,25 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- # Receipt used to track messages taken off of a queue
4
- class MessageReceipt
5
- # @return [Object] The transport mechanism's record of the message
6
- attr_reader :tag
7
-
8
- # @return [Object] The packed message from the transport
9
- attr_reader :packed
10
-
11
- # @return [String] The name of the queue the message was read from
12
- attr_reader :queue_name
13
-
14
- # @param [Object] tag
15
- # @param [Object] packed
16
- # @param [String] queue_name
17
- # @return [undefined]
18
- def initialize(tag, packed, queue_name)
19
- @tag = tag
20
- @packed = packed
21
- @queue_name = queue_name
22
- end
23
- end
24
- end
25
- end
@@ -1,93 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- # Implementation of a message packer that serializes the metadata and payload of any
4
- # message and then serializes the entire message so it can go onto the wire.
5
- class JsonMessagePacker < MessagePacker
6
- # @param [Serializer] serializer
7
- # @return [undefined]
8
- def initialize(serializer)
9
- @serializer = serializer
10
-
11
- @serialization_target = String
12
- # Ideally, we want to serialize the metadata and payload to hashes so that we don't
13
- # duplicate serialization while serializing the message as a whole to a string
14
- if serializer.can_serialize_to? Hash
15
- @serialization_target = Hash
16
- end
17
- end
18
-
19
- # @param [Message] unpacked
20
- # @return [String]
21
- def pack_message(unpacked)
22
- message_type = type_for unpacked
23
-
24
- metadata = @serializer.serialize unpacked.metadata, @serialization_target
25
- payload = @serializer.serialize unpacked.payload, @serialization_target
26
-
27
- packed = {
28
- message_type: message_type,
29
- id: unpacked.id,
30
- metadata: metadata.content,
31
- payload: payload.content,
32
- payload_type: payload.type.name,
33
- payload_revision: payload.type.revision
34
- }
35
-
36
- if [:event, :domain_event].include? message_type
37
- pack_event unpacked, packed
38
- end
39
-
40
- if :domain_event == message_type
41
- pack_domain_event unpacked, packed
42
- end
43
-
44
- JSON.dump packed
45
- end
46
-
47
- private
48
-
49
- # Packs additional attributes specific to event messages
50
- #
51
- # @param [EventMessage] unpacked
52
- # @param [Hash] packed
53
- # @return [undefined]
54
- def pack_event(unpacked, packed)
55
- additional = {
56
- timestamp: unpacked.timestamp.to_i
57
- }
58
- packed.merge! additional
59
- end
60
-
61
- # Packs additional attributes specific to domain event messages
62
- #
63
- # @param [DomainEventMessage] unpacked
64
- # @param [Hash] packed
65
- # @return [undefined]
66
- def pack_domain_event(unpacked, packed)
67
- additional = {
68
- aggregate_id: unpacked.aggregate_id.to_s,
69
- sequence_number: unpacked.sequence_number
70
- }
71
- packed.merge! additional
72
- end
73
-
74
- # Returns the packed type for the given message
75
- #
76
- # @raise [ArgumentError] If the given message isn't supported by this packer
77
- # @param [Message] unpacked
78
- # @return [Symbol]
79
- def type_for(unpacked)
80
- case unpacked
81
- when Command::CommandMessage
82
- :command
83
- when Domain::DomainEventMessage
84
- :domain_event
85
- when Domain::EventMessage
86
- :event
87
- else
88
- raise ArgumentError, 'Unknown message type'
89
- end
90
- end
91
- end # JsonMessagePacker
92
- end # Partitioning
93
- end # Synapse
@@ -1,83 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- # Implementation of a message unpacker that unpacks messages that come off the wire in the
4
- # format described by JsonMessagePacker
5
- class JsonMessageUnpacker < MessageUnpacker
6
- # @param [Serializer] serializer
7
- # @return [undefined]
8
- def initialize(serializer)
9
- @serializer = serializer
10
- end
11
-
12
- # @param [String] packed
13
- # @return [Message]
14
- def unpack_message(message)
15
- packed = JSON.load message
16
- packed.symbolize_keys!
17
-
18
- message_type = packed.fetch(:message_type).to_sym
19
- builder = builder_for(message_type).new
20
-
21
- builder.id = packed.fetch :id
22
- builder.metadata = deserialize_metadata packed
23
- builder.payload = deserialize_payload packed
24
-
25
- if [:event, :domain_event].include? message_type
26
- timestamp = packed.fetch :timestamp
27
- builder.timestamp = Time.at timestamp
28
- end
29
-
30
- if :domain_event == message_type
31
- builder.aggregate_id = packed.fetch :aggregate_id
32
- builder.sequence_number = packed.fetch :sequence_number
33
- end
34
-
35
- builder.build
36
- end
37
-
38
- private
39
-
40
- # Deserializes the metadata of the given packed message
41
- #
42
- # @param [Hash] packed
43
- # @return [Hash]
44
- def deserialize_metadata(packed)
45
- content = packed.fetch :metadata
46
- @serializer.deserialize Serialization::SerializedMetadata.new content, content.class
47
- end
48
-
49
- # Deserializes the payload of the given packed message
50
- #
51
- # @param [Hash] packed
52
- # @return [Object]
53
- def deserialize_payload(packed)
54
- content = packed.fetch :payload
55
- name = packed.fetch :payload_type
56
- revision = packed.fetch :payload_revision
57
-
58
- serialized_type = Serialization::SerializedType.new name, revision
59
- serialized_object = Serialization::SerializedObject.new content, content.class, serialized_type
60
-
61
- @serializer.deserialize serialized_object
62
- end
63
-
64
- # Returns the builder type for the given message type
65
- #
66
- # @raise [ArgumentError] If message type isn't supported by this unpacker
67
- # @param [Symbol] type
68
- # @return [Class]
69
- def builder_for(type)
70
- case type
71
- when :command
72
- Command::CommandMessage.builder
73
- when :domain_event
74
- Domain::DomainEventMessage.builder
75
- when :event
76
- Domain::EventMessage.builder
77
- else
78
- raise ArgumentError, 'Unknown message type'
79
- end
80
- end
81
- end # JsonMessageUnpacker
82
- end # Partitioning
83
- end # Synapse
@@ -1,27 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- # Represents a mechanism for packing a message into a string so that it can be either stored
4
- # in a file or passed over a transport mechanism to be unpacked at the receiver
5
- #
6
- # This implementation simply returns the message as-is
7
- class MessagePacker
8
- # @param [Message] unpacked
9
- # @return [String]
10
- def pack_message(unpacked)
11
- unpacked
12
- end
13
- end
14
-
15
- # Represents a mechanism for unpacking a message that has been packed for storage in a file
16
- # or transport from a producer
17
- #
18
- # This implementation simply returns the message as-is
19
- class MessageUnpacker
20
- # @param [String] packed
21
- # @return [Message]
22
- def unpack_message(packed)
23
- packed
24
- end
25
- end
26
- end
27
- end
@@ -1,32 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- # Represents a mechanism for taking messages off a queue and handling the acknowledgement
4
- # or rejection of each message
5
- #
6
- # @abstract
7
- class QueueReader
8
- # Subscribes the given handler to the queue
9
- #
10
- # Depending on the implementation, this method may or may not return immediately. It should
11
- # be assumed that the method will block until a message is received and then will go back
12
- # to blocking after the given callback is invoked.
13
- #
14
- # @abstract
15
- # @yield [MessageReceipt] Receipt of the message taken off the queue
16
- # @return [undefined]
17
- def subscribe(&handler); end
18
-
19
- # Acknowledges the message, removing it from the original queue
20
- #
21
- # @param [MessageReceipt] receipt
22
- # @return [undefined]
23
- def ack_message(receipt); end
24
-
25
- # Attempts to notify the original queue that the message was not processed
26
- #
27
- # @param [MessageReceipt] receipt
28
- # @return [undefined]
29
- def nack_message(receipt); end
30
- end
31
- end
32
- end
@@ -1,17 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- # Represents a mechanism for writing packed messages to a queue
4
- # @abstract
5
- class QueueWriter
6
- # Enqueues the given message
7
- #
8
- # Depending on the implementation, this method may or may not block until the message has
9
- # been enqueued.
10
- #
11
- # @param [Object] packed
12
- # @param [Message] unpacked
13
- # @return [undefined]
14
- def put_message(packed, unpacked); end
15
- end
16
- end
17
- end
@@ -1,18 +0,0 @@
1
- module Synapse
2
- module Partitioning
3
- extend ActiveSupport::Autoload
4
-
5
- # Optional queues
6
- autoload :MemoryQueueReader
7
- autoload :MemoryQueueWriter
8
-
9
- # Optional message packing
10
- autoload :JsonMessagePacker, 'synapse/partitioning/packing/json_packer'
11
- autoload :JsonMessageUnpacker, 'synapse/partitioning/packing/json_unpacker'
12
- end
13
- end
14
-
15
- require 'synapse/partitioning/message_receipt'
16
- require 'synapse/partitioning/packing'
17
- require 'synapse/partitioning/queue_reader'
18
- require 'synapse/partitioning/queue_writer'
@@ -1,34 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Synapse
4
- module Partitioning
5
-
6
- class MemoryQueueTest < Test::Unit::TestCase
7
- def test_queuing
8
- message = MessageBuilder.build
9
-
10
- queue = Queue.new
11
-
12
- reader = MemoryQueueReader.new queue, :test
13
- writer = MemoryQueueWriter.new queue
14
-
15
- count = 0
16
-
17
- Thread.new do
18
- reader.subscribe do |receipt|
19
- assert_equal message, receipt.packed
20
- assert_equal :test, receipt.queue_name
21
-
22
- count = count.next
23
- end
24
- end
25
-
26
- writer.put_message message, message
27
- writer.put_message message, message
28
-
29
- wait_until { count == 2 }
30
- end
31
- end
32
-
33
- end
34
- end
@@ -1,62 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Synapse
4
- module Partitioning
5
-
6
- class JsonPackingTest < Test::Unit::TestCase
7
- def setup
8
- @converter_factory = Serialization::ConverterFactory.new
9
- @serializer = Serialization::MarshalSerializer.new @converter_factory
10
- @packer = JsonMessagePacker.new @serializer
11
- @unpacker = JsonMessageUnpacker.new @serializer
12
- end
13
-
14
- def test_packing
15
- message = Domain::DomainEventMessage.build do |builder|
16
- builder.metadata = { foo: 0 }
17
- builder.payload = { bar: 1 }
18
- builder.aggregate_id = '123'
19
- builder.sequence_number = 1
20
- end
21
-
22
- packed = @packer.pack_message message
23
- unpacked = @unpacker.unpack_message packed
24
-
25
- assert_equal message.id, unpacked.id
26
- assert_equal message.metadata, unpacked.metadata
27
- assert_equal message.payload, unpacked.payload
28
- assert_equal message.timestamp.to_i, unpacked.timestamp.to_i
29
- assert_equal message.aggregate_id, unpacked.aggregate_id
30
- assert_equal message.sequence_number, unpacked.sequence_number
31
- end
32
-
33
- def test_type_packing
34
- [Command::CommandMessage, Domain::EventMessage, Domain::DomainEventMessage].each do |type|
35
- message = type.build
36
- packed = @packer.pack_message message
37
- unpacked = @unpacker.unpack_message packed
38
-
39
- assert type === unpacked
40
- end
41
- end
42
-
43
- def test_unknown_type
44
- message = Message.build
45
-
46
- assert_raise ArgumentError do
47
- @packer.pack_message message
48
- end
49
-
50
- packed = {
51
- message_type: :message
52
- }
53
- packed = JSON.dump packed
54
-
55
- assert_raise ArgumentError do
56
- @unpacker.unpack_message packed
57
- end
58
- end
59
- end
60
-
61
- end
62
- end