protobuf 3.3.6 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rubocop.yml +48 -0
- data/.rubocop_todo.yml +79 -0
- data/.travis.yml +12 -4
- data/Rakefile +14 -11
- data/bin/protoc-gen-ruby +0 -1
- data/bin/rpc_server +1 -0
- data/install-protobuf.sh +8 -0
- data/lib/protobuf.rb +30 -24
- data/lib/protobuf/cli.rb +35 -35
- data/lib/protobuf/code_generator.rb +11 -8
- data/lib/protobuf/decoder.rb +4 -5
- data/lib/protobuf/deprecation.rb +20 -0
- data/lib/protobuf/descriptors/google/protobuf/compiler/plugin.pb.rb +2 -0
- data/lib/protobuf/descriptors/google/protobuf/descriptor.pb.rb +2 -0
- data/lib/protobuf/encoder.rb +9 -4
- data/lib/protobuf/enum.rb +38 -54
- data/lib/protobuf/field.rb +2 -2
- data/lib/protobuf/field/base_field.rb +28 -32
- data/lib/protobuf/field/bool_field.rb +4 -4
- data/lib/protobuf/field/bytes_field.rb +5 -4
- data/lib/protobuf/field/double_field.rb +0 -1
- data/lib/protobuf/field/enum_field.rb +4 -7
- data/lib/protobuf/field/field_array.rb +3 -4
- data/lib/protobuf/field/fixed32_field.rb +1 -1
- data/lib/protobuf/field/fixed64_field.rb +0 -1
- data/lib/protobuf/field/float_field.rb +0 -1
- data/lib/protobuf/field/int32_field.rb +0 -1
- data/lib/protobuf/field/int64_field.rb +0 -1
- data/lib/protobuf/field/integer_field.rb +0 -1
- data/lib/protobuf/field/message_field.rb +2 -3
- data/lib/protobuf/field/sfixed32_field.rb +0 -1
- data/lib/protobuf/field/sfixed64_field.rb +0 -1
- data/lib/protobuf/field/signed_integer_field.rb +0 -1
- data/lib/protobuf/field/sint32_field.rb +0 -1
- data/lib/protobuf/field/sint64_field.rb +0 -1
- data/lib/protobuf/field/string_field.rb +0 -1
- data/lib/protobuf/field/uint32_field.rb +0 -1
- data/lib/protobuf/field/uint64_field.rb +0 -1
- data/lib/protobuf/field/varint_field.rb +0 -1
- data/lib/protobuf/generators/base.rb +1 -2
- data/lib/protobuf/generators/enum_generator.rb +1 -2
- data/lib/protobuf/generators/extension_generator.rb +1 -2
- data/lib/protobuf/generators/field_generator.rb +4 -5
- data/lib/protobuf/generators/file_generator.rb +22 -27
- data/lib/protobuf/generators/group_generator.rb +15 -16
- data/lib/protobuf/generators/message_generator.rb +13 -14
- data/lib/protobuf/generators/printable.rb +9 -10
- data/lib/protobuf/generators/service_generator.rb +1 -2
- data/lib/protobuf/lifecycle.rb +20 -33
- data/lib/protobuf/logging.rb +4 -6
- data/lib/protobuf/message.rb +22 -16
- data/lib/protobuf/message/fields.rb +14 -17
- data/lib/protobuf/message/serialization.rb +6 -5
- data/lib/protobuf/rpc/buffer.rb +10 -12
- data/lib/protobuf/rpc/client.rb +12 -12
- data/lib/protobuf/rpc/connectors/base.rb +4 -3
- data/lib/protobuf/rpc/connectors/common.rb +15 -17
- data/lib/protobuf/rpc/connectors/socket.rb +2 -2
- data/lib/protobuf/rpc/connectors/zmq.rb +118 -108
- data/lib/protobuf/rpc/dynamic_discovery.pb.rb +2 -0
- data/lib/protobuf/rpc/env.rb +12 -12
- data/lib/protobuf/rpc/error.rb +1 -1
- data/lib/protobuf/rpc/error/client_error.rb +4 -4
- data/lib/protobuf/rpc/error/server_error.rb +6 -6
- data/lib/protobuf/rpc/middleware/exception_handler.rb +1 -1
- data/lib/protobuf/rpc/middleware/logger.rb +3 -3
- data/lib/protobuf/rpc/middleware/request_decoder.rb +5 -5
- data/lib/protobuf/rpc/middleware/response_encoder.rb +3 -3
- data/lib/protobuf/rpc/rpc.pb.rb +2 -0
- data/lib/protobuf/rpc/servers/socket/server.rb +75 -65
- data/lib/protobuf/rpc/servers/socket/worker.rb +2 -2
- data/lib/protobuf/rpc/servers/socket_runner.rb +12 -6
- data/lib/protobuf/rpc/servers/zmq/broker.rb +10 -6
- data/lib/protobuf/rpc/servers/zmq/server.rb +20 -26
- data/lib/protobuf/rpc/servers/zmq/util.rb +7 -7
- data/lib/protobuf/rpc/servers/zmq/worker.rb +5 -7
- data/lib/protobuf/rpc/servers/zmq_runner.rb +14 -3
- data/lib/protobuf/rpc/service.rb +15 -15
- data/lib/protobuf/rpc/service_directory.rb +7 -11
- data/lib/protobuf/rpc/service_dispatcher.rb +3 -3
- data/lib/protobuf/rpc/service_filters.rb +27 -28
- data/lib/protobuf/rpc/stat.rb +4 -7
- data/lib/protobuf/socket.rb +0 -1
- data/lib/protobuf/tasks/compile.rake +2 -2
- data/lib/protobuf/version.rb +1 -1
- data/protobuf.gemspec +20 -4
- data/spec/benchmark/tasks.rb +49 -23
- data/spec/bin/protoc-gen-ruby_spec.rb +11 -6
- data/spec/encoding/all_types_spec.rb +91 -77
- data/spec/encoding/extreme_values_spec.rb +0 -0
- data/spec/functional/socket_server_spec.rb +9 -10
- data/spec/functional/zmq_server_spec.rb +21 -19
- data/spec/lib/protobuf/cli_spec.rb +20 -20
- data/spec/lib/protobuf/code_generator_spec.rb +6 -6
- data/spec/lib/protobuf/enum_spec.rb +57 -31
- data/spec/lib/protobuf/field/float_field_spec.rb +2 -2
- data/spec/lib/protobuf/field/int32_field_spec.rb +1 -1
- data/spec/lib/protobuf/field/string_field_spec.rb +7 -8
- data/spec/lib/protobuf/field_spec.rb +3 -6
- data/spec/lib/protobuf/generators/base_spec.rb +6 -6
- data/spec/lib/protobuf/generators/enum_generator_spec.rb +22 -17
- data/spec/lib/protobuf/generators/extension_generator_spec.rb +8 -9
- data/spec/lib/protobuf/generators/field_generator_spec.rb +14 -11
- data/spec/lib/protobuf/generators/file_generator_spec.rb +7 -4
- data/spec/lib/protobuf/generators/service_generator_spec.rb +14 -11
- data/spec/lib/protobuf/lifecycle_spec.rb +9 -4
- data/spec/lib/protobuf/message_spec.rb +63 -35
- data/spec/lib/protobuf/optionable_spec.rb +3 -3
- data/spec/lib/protobuf/rpc/client_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/connector_spec.rb +1 -1
- data/spec/lib/protobuf/rpc/connectors/base_spec.rb +6 -6
- data/spec/lib/protobuf/rpc/connectors/common_spec.rb +26 -18
- data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +11 -9
- data/spec/lib/protobuf/rpc/middleware/exception_handler_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/middleware/logger_spec.rb +7 -7
- data/spec/lib/protobuf/rpc/middleware/request_decoder_spec.rb +14 -14
- data/spec/lib/protobuf/rpc/middleware/response_encoder_spec.rb +5 -5
- data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +1 -1
- data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +9 -7
- data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +9 -9
- data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +2 -2
- data/spec/lib/protobuf/rpc/service_directory_spec.rb +24 -23
- data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +4 -4
- data/spec/lib/protobuf/rpc/service_filters_spec.rb +84 -51
- data/spec/lib/protobuf/rpc/service_spec.rb +15 -14
- data/spec/lib/protobuf/rpc/stat_spec.rb +1 -1
- data/spec/lib/protobuf_spec.rb +9 -9
- data/spec/spec_helper.rb +7 -19
- data/spec/support/server.rb +29 -59
- data/spec/support/test/defaults.pb.rb +2 -0
- data/spec/support/test/enum.pb.rb +2 -0
- data/spec/support/test/extended.pb.rb +2 -0
- data/spec/support/test/google_unittest_import.pb.rb +2 -0
- data/spec/support/test/google_unittest_import_public.pb.rb +2 -0
- data/spec/support/test/multi_field_extensions.pb.rb +2 -0
- data/spec/support/test/resource.pb.rb +2 -0
- data/spec/support/test/resource_service.rb +17 -20
- metadata +153 -112
- data/lib/protobuf/deprecator.rb +0 -42
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Protobuf::Field::FloatField do
|
3
|
+
RSpec.describe Protobuf::Field::FloatField do
|
4
4
|
|
5
5
|
class SomeFloatMessage < ::Protobuf::Message
|
6
6
|
optional :float, :some_float, 1
|
@@ -44,7 +44,7 @@ describe Protobuf::Field::FloatField do
|
|
44
44
|
end
|
45
45
|
|
46
46
|
context 'when set with something that is not a float' do
|
47
|
-
let(:value) { [
|
47
|
+
let(:value) { [1, 2, 3] }
|
48
48
|
|
49
49
|
it 'throws an error' do
|
50
50
|
expect { subject }.to raise_error(TypeError)
|
@@ -2,24 +2,24 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe ::Protobuf::Field::StringField do
|
5
|
+
RSpec.describe ::Protobuf::Field::StringField do
|
6
6
|
|
7
7
|
describe '#encode' do
|
8
8
|
context 'when a repeated string field contains frozen strings' do
|
9
9
|
it 'does not raise an encoding error' do
|
10
|
-
expect
|
11
|
-
frozen_strings = [
|
10
|
+
expect do
|
11
|
+
frozen_strings = ["foo".freeze, "bar".freeze, "baz".freeze]
|
12
12
|
::Test::ResourceFindRequest.encode(:name => 'resource', :widgets => frozen_strings)
|
13
|
-
|
13
|
+
end.not_to raise_error
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'when a repeated bytes field contains frozen strings' do
|
18
18
|
it 'does not raise an encoding error' do
|
19
|
-
expect
|
20
|
-
frozen_strings = [
|
19
|
+
expect do
|
20
|
+
frozen_strings = ["foo".freeze, "bar".freeze, "baz".freeze]
|
21
21
|
::Test::ResourceFindRequest.encode(:name => 'resource', :widget_bytes => frozen_strings)
|
22
|
-
|
22
|
+
end.not_to raise_error
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -42,5 +42,4 @@ describe ::Protobuf::Field::StringField do
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
45
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'protobuf/field'
|
3
3
|
|
4
|
-
describe ::Protobuf::Field do
|
4
|
+
RSpec.describe ::Protobuf::Field do
|
5
5
|
|
6
6
|
describe '.build' do
|
7
7
|
pending
|
@@ -148,7 +148,6 @@ describe ::Protobuf::Field do
|
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
|
-
|
152
151
|
context 'when type is a string field class or symbol' do
|
153
152
|
it 'returns that class' do
|
154
153
|
expected_field = ::Protobuf::Field::StringField
|
@@ -159,7 +158,6 @@ describe ::Protobuf::Field do
|
|
159
158
|
end
|
160
159
|
end
|
161
160
|
|
162
|
-
|
163
161
|
context 'when type is a bytes field class or symbol' do
|
164
162
|
it 'returns that class' do
|
165
163
|
expected_field = ::Protobuf::Field::BytesField
|
@@ -170,7 +168,6 @@ describe ::Protobuf::Field do
|
|
170
168
|
end
|
171
169
|
end
|
172
170
|
|
173
|
-
|
174
171
|
context 'when type is a bool field class or symbol' do
|
175
172
|
it 'returns that class' do
|
176
173
|
expected_field = ::Protobuf::Field::BoolField
|
@@ -183,9 +180,9 @@ describe ::Protobuf::Field do
|
|
183
180
|
|
184
181
|
context 'when type is not mapped' do
|
185
182
|
it 'raises an ArgumentError' do
|
186
|
-
expect
|
183
|
+
expect do
|
187
184
|
subject.field_class("boom")
|
188
|
-
|
185
|
+
end.to raise_error
|
189
186
|
end
|
190
187
|
end
|
191
188
|
|
@@ -3,14 +3,14 @@ require 'spec_helper'
|
|
3
3
|
require 'protobuf/code_generator'
|
4
4
|
require 'protobuf/generators/base'
|
5
5
|
|
6
|
-
describe ::Protobuf::Generators::Base do
|
6
|
+
RSpec.describe ::Protobuf::Generators::Base do
|
7
7
|
|
8
8
|
subject { described_class.new(double) }
|
9
9
|
|
10
10
|
context 'namespaces' do
|
11
11
|
let(:descriptor) { double(:name => 'Baz') }
|
12
|
-
subject { described_class.new(descriptor, 0, :namespace => [
|
13
|
-
specify { expect(subject.type_namespace).to eq([
|
12
|
+
subject { described_class.new(descriptor, 0, :namespace => [:foo, :bar]) }
|
13
|
+
specify { expect(subject.type_namespace).to eq([:foo, :bar, 'Baz']) }
|
14
14
|
specify { expect(subject.fully_qualified_type_namespace).to eq('.foo.bar.Baz') }
|
15
15
|
end
|
16
16
|
|
@@ -68,17 +68,17 @@ describe ::Protobuf::Generators::Base do
|
|
68
68
|
context 'when tags are duplicated' do
|
69
69
|
it 'fails with a GeneratorFatalError' do
|
70
70
|
expect(::Protobuf::CodeGenerator).to receive(:fatal).with(/FooBar object has duplicate tags\. Expected 3 tags, but got 4/)
|
71
|
-
described_class.validate_tags("FooBar", [1,2,2,3])
|
71
|
+
described_class.validate_tags("FooBar", [1, 2, 2, 3])
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
75
75
|
context 'when tags are missing in the range' do
|
76
76
|
it 'prints a warning' do
|
77
|
+
expect(::Protobuf::CodeGenerator).to receive(:print_tag_warning_suppress)
|
77
78
|
expect(::Protobuf::CodeGenerator).to receive(:warn).with(/FooBar object should have 5 tags \(1\.\.5\), but found 4 tags/)
|
78
|
-
described_class.validate_tags("FooBar", [1,2,4,5])
|
79
|
+
described_class.validate_tags("FooBar", [1, 2, 4, 5])
|
79
80
|
end
|
80
81
|
end
|
81
82
|
end
|
82
83
|
|
83
84
|
end
|
84
|
-
|
@@ -2,43 +2,49 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
require 'protobuf/generators/enum_generator'
|
4
4
|
|
5
|
-
describe ::Protobuf::Generators::EnumGenerator do
|
5
|
+
RSpec.describe ::Protobuf::Generators::EnumGenerator do
|
6
6
|
|
7
|
-
let(:values)
|
7
|
+
let(:values) do
|
8
8
|
[
|
9
9
|
{ :name => 'FOO', :number => 1 },
|
10
10
|
{ :name => 'BAR', :number => 2 },
|
11
|
-
{ :name => 'BAZ', :number => 3 }
|
11
|
+
{ :name => 'BAZ', :number => 3 },
|
12
12
|
]
|
13
|
-
|
13
|
+
end
|
14
14
|
let(:options) { nil }
|
15
|
-
let(:enum_fields)
|
16
|
-
|
17
|
-
|
15
|
+
let(:enum_fields) do
|
16
|
+
{
|
17
|
+
:name => 'TestEnum',
|
18
|
+
:value => values,
|
19
|
+
:options => options,
|
20
|
+
}
|
21
|
+
end
|
18
22
|
|
19
23
|
let(:enum) { ::Google::Protobuf::EnumDescriptorProto.new(enum_fields) }
|
20
24
|
|
21
25
|
subject { described_class.new(enum) }
|
22
26
|
|
23
27
|
describe '#compile' do
|
24
|
-
let(:compiled)
|
25
|
-
|
28
|
+
let(:compiled) do
|
29
|
+
<<-RUBY
|
30
|
+
class TestEnum < ::Protobuf::Enum
|
26
31
|
define :FOO, 1
|
27
32
|
define :BAR, 2
|
28
33
|
define :BAZ, 3
|
29
34
|
end
|
30
35
|
|
31
|
-
|
32
|
-
|
36
|
+
RUBY
|
37
|
+
end
|
33
38
|
|
34
|
-
it 'compiles the enum and
|
39
|
+
it 'compiles the enum and its field values' do
|
35
40
|
subject.compile
|
36
41
|
expect(subject.to_s).to eq(compiled)
|
37
42
|
end
|
38
43
|
|
39
44
|
context 'when allow_alias option is set' do
|
40
|
-
let(:compiled)
|
41
|
-
|
45
|
+
let(:compiled) do
|
46
|
+
<<-RUBY
|
47
|
+
class TestEnum < ::Protobuf::Enum
|
42
48
|
set_option :allow_alias
|
43
49
|
|
44
50
|
define :FOO, 1
|
@@ -46,8 +52,8 @@ end
|
|
46
52
|
define :BAZ, 3
|
47
53
|
end
|
48
54
|
|
49
|
-
|
50
|
-
|
55
|
+
RUBY
|
56
|
+
end
|
51
57
|
|
52
58
|
let(:options) { { :allow_alias => true } }
|
53
59
|
|
@@ -65,4 +71,3 @@ end
|
|
65
71
|
end
|
66
72
|
|
67
73
|
end
|
68
|
-
|
@@ -3,15 +3,15 @@ require 'spec_helper'
|
|
3
3
|
require 'protobuf/code_generator'
|
4
4
|
require 'protobuf/generators/extension_generator'
|
5
5
|
|
6
|
-
describe ::Protobuf::Generators::ExtensionGenerator do
|
6
|
+
RSpec.describe ::Protobuf::Generators::ExtensionGenerator do
|
7
7
|
|
8
|
-
let(:field_descriptors)
|
8
|
+
let(:field_descriptors) do
|
9
9
|
[
|
10
10
|
double('field descriptor 1', :to_s => " field 1\n"),
|
11
11
|
double('field descriptor 2', :to_s => " field 2\n"),
|
12
|
-
double('field descriptor 3', :to_s => " field 3\n")
|
12
|
+
double('field descriptor 3', :to_s => " field 3\n"),
|
13
13
|
]
|
14
|
-
|
14
|
+
end
|
15
15
|
let(:message_type) { 'FooBar' }
|
16
16
|
|
17
17
|
before do
|
@@ -23,15 +23,15 @@ describe ::Protobuf::Generators::ExtensionGenerator do
|
|
23
23
|
subject { described_class.new(message_type, field_descriptors, 0) }
|
24
24
|
|
25
25
|
describe '#compile' do
|
26
|
-
let(:compiled)
|
27
|
-
|
26
|
+
let(:compiled) do
|
27
|
+
'class FooBar < ::Protobuf::Message
|
28
28
|
field 1
|
29
29
|
field 2
|
30
30
|
field 3
|
31
31
|
end
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
'
|
34
|
+
end
|
35
35
|
|
36
36
|
it 'compiles the a class with the extension fields' do
|
37
37
|
subject.compile
|
@@ -40,4 +40,3 @@ end
|
|
40
40
|
end
|
41
41
|
|
42
42
|
end
|
43
|
-
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
require 'protobuf/generators/field_generator'
|
4
4
|
|
5
|
-
describe ::Protobuf::Generators::FieldGenerator do
|
5
|
+
RSpec.describe ::Protobuf::Generators::FieldGenerator do
|
6
6
|
|
7
7
|
let(:label_enum) { :LABEL_OPTIONAL }
|
8
8
|
let(:name) { 'foo_bar' }
|
@@ -13,14 +13,18 @@ describe ::Protobuf::Generators::FieldGenerator do
|
|
13
13
|
let(:extendee) { nil }
|
14
14
|
let(:field_options) { {} }
|
15
15
|
|
16
|
-
let(:field_fields)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
16
|
+
let(:field_fields) do
|
17
|
+
{
|
18
|
+
:label => label_enum,
|
19
|
+
:name => name,
|
20
|
+
:number => number,
|
21
|
+
:type => type_enum,
|
22
|
+
:type_name => type_name,
|
23
|
+
:default_value => default_value,
|
24
|
+
:extendee => extendee,
|
25
|
+
:options => field_options,
|
26
|
+
}
|
27
|
+
end
|
24
28
|
|
25
29
|
let(:field) { ::Google::Protobuf::FieldDescriptorProto.new(field_fields) }
|
26
30
|
|
@@ -53,7 +57,7 @@ describe ::Protobuf::Generators::FieldGenerator do
|
|
53
57
|
let(:type_enum) { :TYPE_STRING }
|
54
58
|
let(:default_value) { "a default \"string\"" }
|
55
59
|
|
56
|
-
specify { expect(subject).to eq
|
60
|
+
specify { expect(subject).to eq "optional :string, :foo_bar, 3, :default => \"a default \"string\"\"\n" }
|
57
61
|
end
|
58
62
|
|
59
63
|
context 'when float or double field type' do
|
@@ -96,4 +100,3 @@ describe ::Protobuf::Generators::FieldGenerator do
|
|
96
100
|
end
|
97
101
|
|
98
102
|
end
|
99
|
-
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
require 'protobuf/generators/file_generator'
|
4
4
|
|
5
|
-
describe ::Protobuf::Generators::FileGenerator do
|
5
|
+
RSpec.describe ::Protobuf::Generators::FileGenerator do
|
6
6
|
|
7
7
|
let(:base_descriptor_fields) { { :name => 'test/foo.proto' } }
|
8
8
|
let(:descriptor_fields) { base_descriptor_fields }
|
@@ -13,8 +13,12 @@ describe ::Protobuf::Generators::FileGenerator do
|
|
13
13
|
|
14
14
|
describe '#print_import_requires' do
|
15
15
|
let(:descriptor_fields) do
|
16
|
-
base_descriptor_fields.merge
|
17
|
-
|
16
|
+
base_descriptor_fields.merge(
|
17
|
+
:dependency => [
|
18
|
+
'test/bar.proto',
|
19
|
+
'test/baz.proto',
|
20
|
+
],
|
21
|
+
)
|
18
22
|
end
|
19
23
|
|
20
24
|
it 'prints a ruby require for each dependency' do
|
@@ -26,4 +30,3 @@ describe ::Protobuf::Generators::FileGenerator do
|
|
26
30
|
end
|
27
31
|
|
28
32
|
end
|
29
|
-
|
@@ -2,30 +2,34 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
require 'protobuf/generators/service_generator'
|
4
4
|
|
5
|
-
describe ::Protobuf::Generators::ServiceGenerator do
|
5
|
+
RSpec.describe ::Protobuf::Generators::ServiceGenerator do
|
6
6
|
|
7
|
-
let(:methods)
|
7
|
+
let(:methods) do
|
8
8
|
[
|
9
9
|
{ :name => 'Search', :input_type => 'FooRequest', :output_type => 'FooResponse' },
|
10
|
-
{ :name => 'FooBar', :input_type => '.foo.Request', :output_type => '.bar.Response' }
|
10
|
+
{ :name => 'FooBar', :input_type => '.foo.Request', :output_type => '.bar.Response' },
|
11
11
|
]
|
12
|
-
|
13
|
-
let(:service_fields)
|
14
|
-
|
12
|
+
end
|
13
|
+
let(:service_fields) do
|
14
|
+
{
|
15
|
+
:name => 'TestService',
|
16
|
+
:method => methods,
|
17
|
+
}
|
18
|
+
end
|
15
19
|
|
16
20
|
let(:service) { ::Google::Protobuf::ServiceDescriptorProto.new(service_fields) }
|
17
21
|
|
18
22
|
subject { described_class.new(service) }
|
19
23
|
|
20
24
|
describe '#compile' do
|
21
|
-
let(:compiled)
|
22
|
-
|
25
|
+
let(:compiled) do
|
26
|
+
'class TestService < ::Protobuf::Rpc::Service
|
23
27
|
rpc :search, FooRequest, FooResponse
|
24
28
|
rpc :foo_bar, ::Foo::Request, ::Bar::Response
|
25
29
|
end
|
26
30
|
|
27
|
-
|
28
|
-
|
31
|
+
'
|
32
|
+
end
|
29
33
|
|
30
34
|
it 'compiles the service and it\'s rpc methods' do
|
31
35
|
subject.compile
|
@@ -40,4 +44,3 @@ end
|
|
40
44
|
end
|
41
45
|
|
42
46
|
end
|
43
|
-
|
@@ -1,10 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'protobuf/lifecycle'
|
3
3
|
|
4
|
-
describe ::Protobuf::Lifecycle do
|
4
|
+
RSpec.describe ::Protobuf::Lifecycle do
|
5
5
|
subject { described_class }
|
6
6
|
|
7
|
-
|
7
|
+
around do |example|
|
8
|
+
# this entire class is deprecated
|
9
|
+
::Protobuf.deprecator.silence(&example)
|
10
|
+
end
|
11
|
+
|
12
|
+
before do
|
8
13
|
::ActiveSupport::Notifications.notifier = ::ActiveSupport::Notifications::Fanout.new
|
9
14
|
end
|
10
15
|
|
@@ -14,9 +19,9 @@ describe ::Protobuf::Lifecycle do
|
|
14
19
|
end
|
15
20
|
|
16
21
|
it "only registers blocks for event callbacks" do
|
17
|
-
expect
|
22
|
+
expect do
|
18
23
|
subject.register("something")
|
19
|
-
|
24
|
+
end.to raise_error(/block/)
|
20
25
|
end
|
21
26
|
|
22
27
|
it "calls the registered block when triggered" do
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
describe Protobuf::Message do
|
5
|
+
RSpec.describe Protobuf::Message do
|
6
6
|
|
7
7
|
describe '.decode' do
|
8
8
|
let(:message) { ::Test::Resource.new(:name => "Jim") }
|
@@ -54,18 +54,18 @@ describe Protobuf::Message do
|
|
54
54
|
|
55
55
|
context 'with a repeated field' do
|
56
56
|
it 'treats the field as if it was unset when decoding' do
|
57
|
-
newer = newer_message.new(:enum_list => [
|
57
|
+
newer = newer_message.new(:enum_list => [:HOORAY]).serialize
|
58
58
|
|
59
59
|
expect(older_message.decode(newer).enum_list).to eq([])
|
60
60
|
end
|
61
61
|
|
62
62
|
it 'rejects an unknown value when using the constructor' do
|
63
|
-
expect { older_message.new(:enum_list => [
|
63
|
+
expect { older_message.new(:enum_list => [:HOORAY]) }.to raise_error
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'rejects an unknown value when the setter' do
|
67
67
|
older = older_message.new
|
68
|
-
expect { older.enum_field = [
|
68
|
+
expect { older.enum_field = [:HOORAY] }.to raise_error
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -74,47 +74,47 @@ describe Protobuf::Message do
|
|
74
74
|
describe 'defining a new field' do
|
75
75
|
context 'when defining a field with a tag that has already been used' do
|
76
76
|
it 'raises a TagCollisionError' do
|
77
|
-
expect
|
77
|
+
expect do
|
78
78
|
Class.new(Protobuf::Message) do
|
79
79
|
optional ::Protobuf::Field::Int32Field, :foo, 1
|
80
80
|
optional ::Protobuf::Field::Int32Field, :bar, 1
|
81
81
|
end
|
82
|
-
|
82
|
+
end.to raise_error(Protobuf::TagCollisionError, /Field number 1 has already been used/)
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
context 'when defining an extension field with a tag that has already been used' do
|
87
87
|
it 'raises a TagCollisionError' do
|
88
|
-
expect
|
88
|
+
expect do
|
89
89
|
Class.new(Protobuf::Message) do
|
90
90
|
extensions 100...110
|
91
91
|
optional ::Protobuf::Field::Int32Field, :foo, 100
|
92
92
|
optional ::Protobuf::Field::Int32Field, :bar, 100, :extension => true
|
93
93
|
end
|
94
|
-
|
94
|
+
end.to raise_error(Protobuf::TagCollisionError, /Field number 100 has already been used/)
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
98
|
context 'when defining a field with a name that has already been used' do
|
99
99
|
it 'raises a DuplicateFieldNameError' do
|
100
|
-
expect
|
100
|
+
expect do
|
101
101
|
Class.new(Protobuf::Message) do
|
102
102
|
optional ::Protobuf::Field::Int32Field, :foo, 1
|
103
103
|
optional ::Protobuf::Field::Int32Field, :foo, 2
|
104
104
|
end
|
105
|
-
|
105
|
+
end.to raise_error(Protobuf::DuplicateFieldNameError, /Field name foo has already been used/)
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
109
|
context 'when defining an extension field with a name that has already been used' do
|
110
110
|
it 'raises a DuplicateFieldNameError' do
|
111
|
-
expect
|
111
|
+
expect do
|
112
112
|
Class.new(Protobuf::Message) do
|
113
113
|
extensions 100...110
|
114
114
|
optional ::Protobuf::Field::Int32Field, :foo, 1
|
115
115
|
optional ::Protobuf::Field::Int32Field, :foo, 100, :extension => true
|
116
116
|
end
|
117
|
-
|
117
|
+
end.to raise_error(Protobuf::DuplicateFieldNameError, /Field name foo has already been used/)
|
118
118
|
end
|
119
119
|
end
|
120
120
|
end
|
@@ -246,9 +246,9 @@ describe Protobuf::Message do
|
|
246
246
|
let(:message) { ::Test::ResourceWithRequiredField.new }
|
247
247
|
|
248
248
|
it "raises a 'message not initialized' error" do
|
249
|
-
expect
|
249
|
+
expect do
|
250
250
|
message.encode
|
251
|
-
|
251
|
+
end.to raise_error(Protobuf::SerializationError, /required/i)
|
252
252
|
end
|
253
253
|
end
|
254
254
|
|
@@ -256,10 +256,10 @@ describe Protobuf::Message do
|
|
256
256
|
let(:message) { ::Test::Resource.new(:name => "something") }
|
257
257
|
|
258
258
|
it "does not raise an error when repeated fields are []" do
|
259
|
-
expect
|
259
|
+
expect do
|
260
260
|
message.repeated_enum = []
|
261
261
|
message.encode
|
262
|
-
|
262
|
+
end.to_not raise_error
|
263
263
|
end
|
264
264
|
|
265
265
|
it "sets the value to nil when empty array is passed" do
|
@@ -280,9 +280,9 @@ describe Protobuf::Message do
|
|
280
280
|
end
|
281
281
|
|
282
282
|
it "raises TypeError when a non-array replaces it" do
|
283
|
-
expect
|
283
|
+
expect do
|
284
284
|
message.repeated_enum = 2
|
285
|
-
|
285
|
+
end.to raise_error(/value of type/)
|
286
286
|
end
|
287
287
|
end
|
288
288
|
end
|
@@ -359,11 +359,34 @@ describe Protobuf::Message do
|
|
359
359
|
|
360
360
|
end
|
361
361
|
|
362
|
+
describe '#inspect' do
|
363
|
+
let(:klass) do
|
364
|
+
Class.new(Protobuf::Message) do |klass|
|
365
|
+
enum_class = Class.new(Protobuf::Enum) do
|
366
|
+
define :YAY, 1
|
367
|
+
end
|
368
|
+
|
369
|
+
klass.const_set(:EnumKlass, enum_class)
|
370
|
+
|
371
|
+
optional :string, :name, 1
|
372
|
+
repeated :int32, :counts, 2
|
373
|
+
optional enum_class, :enum, 3
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
before { stub_const('MyMessage', klass) }
|
378
|
+
|
379
|
+
it 'lists the fields' do
|
380
|
+
proto = klass.new(:name => 'wooo', :counts => [1, 2, 3], :enum => klass::EnumKlass::YAY)
|
381
|
+
expect(proto.inspect).to eq('#<MyMessage name="wooo" counts=[1, 2, 3] enum=#<Protobuf::Enum(MyMessage::EnumKlass)::YAY=1>>')
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
362
385
|
describe '#to_hash' do
|
363
386
|
context 'generating values for an ENUM field' do
|
364
387
|
it 'converts the enum to its tag representation' do
|
365
388
|
hash = Test::EnumTestMessage.new(:non_default_enum => :TWO).to_hash
|
366
|
-
expect(hash).to eq(
|
389
|
+
expect(hash).to eq(:non_default_enum => 2)
|
367
390
|
end
|
368
391
|
|
369
392
|
it 'does not populate default values' do
|
@@ -372,33 +395,38 @@ describe Protobuf::Message do
|
|
372
395
|
end
|
373
396
|
|
374
397
|
it 'converts repeated enum fields to an array of the tags' do
|
375
|
-
hash = Test::EnumTestMessage.new(:repeated_enums => [
|
376
|
-
expect(hash).to eq(
|
398
|
+
hash = Test::EnumTestMessage.new(:repeated_enums => [:ONE, :TWO, :TWO, :ONE]).to_hash
|
399
|
+
expect(hash).to eq(:repeated_enums => [1, 2, 2, 1])
|
377
400
|
end
|
378
401
|
end
|
379
402
|
|
380
403
|
context 'generating values for a Message field' do
|
381
404
|
it 'recursively hashes field messages' do
|
382
|
-
hash = Test::Nested.new(
|
383
|
-
expect(hash).to eq(
|
405
|
+
hash = Test::Nested.new(:resource => { :name => 'Nested' }).to_hash
|
406
|
+
expect(hash).to eq(:resource => { :name => 'Nested' })
|
384
407
|
end
|
385
408
|
|
386
409
|
it 'recursively hashes a repeated set of messages' do
|
387
|
-
proto = Test::Nested.new(
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
410
|
+
proto = Test::Nested.new(
|
411
|
+
:multiple_resources => [
|
412
|
+
Test::Resource.new(:name => 'Resource 1'),
|
413
|
+
Test::Resource.new(:name => 'Resource 2'),
|
414
|
+
],
|
415
|
+
)
|
416
|
+
|
417
|
+
expect(proto.to_hash).to eq(
|
418
|
+
:multiple_resources => [
|
419
|
+
{ :name => 'Resource 1' },
|
420
|
+
{ :name => 'Resource 2' },
|
421
|
+
],
|
422
|
+
)
|
395
423
|
end
|
396
424
|
end
|
397
425
|
end
|
398
426
|
|
399
427
|
describe '#to_json' do
|
400
428
|
subject do
|
401
|
-
::Test::ResourceFindRequest.new(
|
429
|
+
::Test::ResourceFindRequest.new(:name => 'Test Name', :active => false)
|
402
430
|
end
|
403
431
|
|
404
432
|
specify { expect(subject.to_json).to eq '{"name":"Test Name","active":false}' }
|
@@ -406,11 +434,11 @@ describe Protobuf::Message do
|
|
406
434
|
|
407
435
|
describe '.to_json' do
|
408
436
|
it 'returns the class name of the message for use in json encoding' do
|
409
|
-
expect
|
437
|
+
expect do
|
410
438
|
::Timeout.timeout(0.1) do
|
411
439
|
expect(::Test::Resource.to_json).to eq("Test::Resource")
|
412
440
|
end
|
413
|
-
|
441
|
+
end.not_to raise_error
|
414
442
|
end
|
415
443
|
end
|
416
444
|
|
@@ -422,7 +450,7 @@ describe Protobuf::Message do
|
|
422
450
|
end
|
423
451
|
|
424
452
|
it "does not allow string fields to be set to Numeric" do
|
425
|
-
expect { subject.name = 1}.to raise_error(/name/)
|
453
|
+
expect { subject.name = 1 }.to raise_error(/name/)
|
426
454
|
end
|
427
455
|
end
|
428
456
|
|