grpc 1.66.0-x86-linux → 1.67.0.pre1-x86-linux
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_call_credentials.c +34 -27
- data/src/ruby/ext/grpc/rb_channel.c +22 -16
- data/src/ruby/ext/grpc/rb_event_thread.c +3 -2
- data/src/ruby/ext/grpc/rb_grpc.c +9 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -10
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +9 -15
- data/src/ruby/ext/grpc/rb_server.c +10 -8
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.2/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.3/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/generic/active_call.rb +8 -5
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/call_spec.rb +53 -40
- data/src/ruby/spec/channel_spec.rb +4 -2
- data/src/ruby/spec/client_server_spec.rb +148 -507
- data/src/ruby/spec/generic/active_call_spec.rb +64 -86
- data/src/ruby/spec/support/services.rb +3 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c040aaeb309ab021e5ecb426f1919510236bc698541c9d317f38c64f9ddd74d
|
4
|
+
data.tar.gz: 75154a252118f080634a57750b2d1e30c01a9be1f6bf661a68ec8194513a13c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39bfffc8ea41f092cbc359b6ea7c39bd87ce59eb5c279e5bc4efb74169eb12d2ce01e8e336f995a4a9dc67b53e865aa1db2b66a91c10d315da67fa9f738ddc68
|
7
|
+
data.tar.gz: 88cbcc452395561363da90f92fbdf6af2443e934c3f1f05311b5360d164ee67ef54c2eda995f0f1153951edb8e4b0f88a6df352c9c05be95fe62838c63446cb6
|
data/src/ruby/ext/grpc/rb_call.c
CHANGED
@@ -809,7 +809,7 @@ struct call_run_batch_args {
|
|
809
809
|
};
|
810
810
|
|
811
811
|
static void cancel_call_unblock_func(void* arg) {
|
812
|
-
|
812
|
+
grpc_absl_log(GPR_DEBUG, "GRPC_RUBY: cancel_call_unblock_func");
|
813
813
|
grpc_call* call = (grpc_call*)arg;
|
814
814
|
grpc_call_cancel(call, NULL);
|
815
815
|
}
|
@@ -60,30 +60,32 @@ static VALUE grpc_rb_call_credentials_callback(VALUE args) {
|
|
60
60
|
VALUE callback_func = rb_ary_entry(args, 0);
|
61
61
|
VALUE callback_args = rb_ary_entry(args, 1);
|
62
62
|
VALUE md_ary_obj = rb_ary_entry(args, 2);
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
63
|
+
|
64
|
+
VALUE callback_func_str = rb_funcall(callback_func, rb_intern("to_s"), 0);
|
65
|
+
VALUE callback_args_str = rb_funcall(callback_args, rb_intern("to_s"), 0);
|
66
|
+
VALUE callback_source_info =
|
67
|
+
rb_funcall(callback_func, rb_intern("source_location"), 0);
|
68
|
+
|
69
|
+
grpc_absl_log_str(
|
70
|
+
GPR_DEBUG, "GRPC_RUBY: grpc_rb_call_credentials invoking user callback:",
|
71
|
+
StringValueCStr(callback_func_str));
|
72
|
+
|
73
|
+
if (callback_source_info != Qnil) {
|
74
|
+
VALUE source_filename = rb_ary_entry(callback_source_info, 0);
|
75
|
+
VALUE source_line_number =
|
76
|
+
rb_funcall(rb_ary_entry(callback_source_info, 1), rb_intern("to_s"), 0);
|
77
|
+
grpc_absl_log_str(GPR_DEBUG, "GRPC_RUBY: source_filename: ",
|
78
|
+
StringValueCStr(source_filename));
|
79
|
+
grpc_absl_log_str(GPR_DEBUG, "GRPC_RUBY: source_line_number: ",
|
80
|
+
StringValueCStr(source_line_number));
|
81
|
+
grpc_absl_log_str(GPR_DEBUG, "GRPC_RUBY: Arguments: ",
|
82
|
+
StringValueCStr(callback_args_str));
|
83
|
+
} else {
|
84
|
+
grpc_absl_log_str(
|
85
|
+
GPR_DEBUG, "(failed to get source filename and line) with arguments: ",
|
86
|
+
StringValueCStr(callback_args_str));
|
86
87
|
}
|
88
|
+
|
87
89
|
VALUE metadata =
|
88
90
|
rb_funcall(callback_func, rb_intern("call"), 1, callback_args);
|
89
91
|
grpc_metadata_array* md_ary = NULL;
|
@@ -112,10 +114,15 @@ static VALUE grpc_rb_call_credentials_callback_rescue(VALUE args,
|
|
112
114
|
VALUE rb_exception_info =
|
113
115
|
rb_funcall(exception_object, rb_intern("inspect"), 0);
|
114
116
|
(void)args;
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
117
|
+
|
118
|
+
grpc_absl_log_str(
|
119
|
+
GPR_DEBUG,
|
120
|
+
"GRPC_RUBY call credentials callback failed, exception inspect: ",
|
121
|
+
StringValueCStr(rb_exception_info));
|
122
|
+
grpc_absl_log_str(GPR_DEBUG,
|
123
|
+
"GRPC_RUBY call credentials callback failed, backtrace: ",
|
124
|
+
StringValueCStr(backtrace_str));
|
125
|
+
|
119
126
|
rb_hash_aset(result, rb_str_new2("metadata"), Qnil);
|
120
127
|
rb_hash_aset(result, rb_str_new2("status"),
|
121
128
|
INT2NUM(GRPC_STATUS_UNAUTHENTICATED));
|
@@ -655,7 +655,7 @@ static void* run_poll_channels_loop_no_gil(void* arg) {
|
|
655
655
|
watch_state_op* op = NULL;
|
656
656
|
bg_watched_channel* bg = NULL;
|
657
657
|
(void)arg;
|
658
|
-
|
658
|
+
grpc_absl_log(GPR_DEBUG, "GRPC_RUBY: run_poll_channels_loop_no_gil - begin");
|
659
659
|
|
660
660
|
gpr_mu_lock(&global_connection_polling_mu);
|
661
661
|
gpr_cv_broadcast(&global_connection_polling_cv);
|
@@ -685,9 +685,10 @@ static void* run_poll_channels_loop_no_gil(void* arg) {
|
|
685
685
|
gpr_mu_unlock(&global_connection_polling_mu);
|
686
686
|
}
|
687
687
|
grpc_completion_queue_destroy(g_channel_polling_cq);
|
688
|
-
|
689
|
-
|
690
|
-
|
688
|
+
grpc_absl_log(
|
689
|
+
GPR_DEBUG,
|
690
|
+
"GRPC_RUBY: run_poll_channels_loop_no_gil - exit connection polling "
|
691
|
+
"loop");
|
691
692
|
return NULL;
|
692
693
|
}
|
693
694
|
|
@@ -701,9 +702,10 @@ static void* run_poll_channels_loop_unblocking_func_wrapper(void* arg) {
|
|
701
702
|
(void)arg;
|
702
703
|
|
703
704
|
gpr_mu_lock(&global_connection_polling_mu);
|
704
|
-
|
705
|
-
|
706
|
-
|
705
|
+
grpc_absl_log(
|
706
|
+
GPR_DEBUG,
|
707
|
+
"GRPC_RUBY: run_poll_channels_loop_unblocking_func - begin aborting "
|
708
|
+
"connection polling");
|
707
709
|
// early out after first time through
|
708
710
|
if (g_abort_channel_polling) {
|
709
711
|
gpr_mu_unlock(&global_connection_polling_mu);
|
@@ -721,21 +723,23 @@ static void* run_poll_channels_loop_unblocking_func_wrapper(void* arg) {
|
|
721
723
|
bg = bg->next;
|
722
724
|
}
|
723
725
|
|
724
|
-
|
725
|
-
|
726
|
+
grpc_absl_log_int(
|
727
|
+
GPR_DEBUG,
|
728
|
+
"GRPC_RUBY: cq shutdown on global polling cq. pid: ", getpid());
|
726
729
|
grpc_completion_queue_shutdown(g_channel_polling_cq);
|
727
730
|
gpr_cv_broadcast(&global_connection_polling_cv);
|
728
731
|
gpr_mu_unlock(&global_connection_polling_mu);
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
+
grpc_absl_log(
|
733
|
+
GPR_DEBUG,
|
734
|
+
"GRPC_RUBY: run_poll_channels_loop_unblocking_func - end aborting "
|
735
|
+
"connection polling");
|
732
736
|
return NULL;
|
733
737
|
}
|
734
738
|
|
735
739
|
// Poll channel connectivity states in background thread without the GIL.
|
736
740
|
static VALUE run_poll_channels_loop(void* arg) {
|
737
741
|
(void)arg;
|
738
|
-
|
742
|
+
grpc_absl_log(
|
739
743
|
GPR_DEBUG,
|
740
744
|
"GRPC_RUBY: run_poll_channels_loop - create connection polling thread");
|
741
745
|
rb_thread_call_without_gvl(run_poll_channels_loop_no_gil, NULL,
|
@@ -777,7 +781,8 @@ void grpc_rb_channel_polling_thread_start() {
|
|
777
781
|
g_channel_polling_thread = rb_thread_create(run_poll_channels_loop, NULL);
|
778
782
|
|
779
783
|
if (!RTEST(g_channel_polling_thread)) {
|
780
|
-
|
784
|
+
grpc_absl_log(GPR_ERROR,
|
785
|
+
"GRPC_RUBY: failed to spawn channel polling thread");
|
781
786
|
rb_thread_call_without_gvl(set_abort_channel_polling_without_gil, NULL,
|
782
787
|
NULL, NULL);
|
783
788
|
return;
|
@@ -786,8 +791,9 @@ void grpc_rb_channel_polling_thread_start() {
|
|
786
791
|
|
787
792
|
void grpc_rb_channel_polling_thread_stop() {
|
788
793
|
if (!RTEST(g_channel_polling_thread)) {
|
789
|
-
|
790
|
-
|
794
|
+
grpc_absl_log(
|
795
|
+
GPR_ERROR,
|
796
|
+
"GRPC_RUBY: channel polling thread stop: thread was not started");
|
791
797
|
return;
|
792
798
|
}
|
793
799
|
rb_thread_call_without_gvl(run_poll_channels_loop_unblocking_func_wrapper,
|
@@ -156,8 +156,9 @@ void grpc_rb_event_queue_thread_start() {
|
|
156
156
|
void grpc_rb_event_queue_thread_stop() {
|
157
157
|
GRPC_RUBY_ASSERT(g_one_time_init_done);
|
158
158
|
if (!RTEST(g_event_thread)) {
|
159
|
-
|
160
|
-
|
159
|
+
grpc_absl_log(
|
160
|
+
GPR_ERROR,
|
161
|
+
"GRPC_RUBY: call credentials thread stop: thread not running");
|
161
162
|
return;
|
162
163
|
}
|
163
164
|
rb_thread_call_without_gvl(grpc_rb_event_unblocking_func_wrapper, NULL, NULL,
|
data/src/ruby/ext/grpc/rb_grpc.c
CHANGED
@@ -328,9 +328,9 @@ static void grpc_ruby_init_threads() {
|
|
328
328
|
// in gpr_once_init. In general, it appears to be unsafe to call
|
329
329
|
// into the ruby library while holding a non-ruby mutex, because a gil yield
|
330
330
|
// could end up trying to lock onto that same mutex and deadlocking.
|
331
|
-
|
332
|
-
|
333
|
-
|
331
|
+
grpc_absl_log_int(GPR_DEBUG,
|
332
|
+
"GRPC_RUBY: grpc_ruby_init_threads g_bg_thread_init_done=",
|
333
|
+
g_bg_thread_init_done);
|
334
334
|
rb_mutex_lock(g_bg_thread_init_rb_mu);
|
335
335
|
if (!g_bg_thread_init_done) {
|
336
336
|
grpc_rb_event_queue_thread_start();
|
@@ -347,11 +347,12 @@ void grpc_ruby_init() {
|
|
347
347
|
grpc_ruby_fork_guard();
|
348
348
|
grpc_init();
|
349
349
|
grpc_ruby_init_threads();
|
350
|
-
// (only
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
350
|
+
// (only log after logging has been initialized)
|
351
|
+
grpc_absl_log_int(GPR_DEBUG,
|
352
|
+
"GRPC_RUBY: grpc_ruby_init - g_enable_fork_support=",
|
353
|
+
g_enable_fork_support);
|
354
|
+
grpc_absl_log_int(GPR_DEBUG,
|
355
|
+
"prev g_grpc_ruby_init_count:", g_grpc_ruby_init_count++);
|
355
356
|
}
|
356
357
|
|
357
358
|
// fork APIs, useable on linux with env var: GRPC_ENABLE_FORK_SUPPORT=1
|
@@ -253,12 +253,10 @@ gpr_malloc_aligned_type gpr_malloc_aligned_import;
|
|
253
253
|
gpr_free_aligned_type gpr_free_aligned_import;
|
254
254
|
gpr_cpu_num_cores_type gpr_cpu_num_cores_import;
|
255
255
|
gpr_cpu_current_cpu_type gpr_cpu_current_cpu_import;
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
gpr_set_log_verbosity_type gpr_set_log_verbosity_import;
|
256
|
+
grpc_absl_log_type grpc_absl_log_import;
|
257
|
+
grpc_absl_log_int_type grpc_absl_log_int_import;
|
258
|
+
grpc_absl_log_str_type grpc_absl_log_str_import;
|
260
259
|
gpr_log_verbosity_init_type gpr_log_verbosity_init_import;
|
261
|
-
gpr_set_log_function_type gpr_set_log_function_import;
|
262
260
|
gpr_format_message_type gpr_format_message_import;
|
263
261
|
gpr_strdup_type gpr_strdup_import;
|
264
262
|
gpr_asprintf_type gpr_asprintf_import;
|
@@ -541,12 +539,10 @@ void grpc_rb_load_imports(HMODULE library) {
|
|
541
539
|
gpr_free_aligned_import = (gpr_free_aligned_type) GetProcAddress(library, "gpr_free_aligned");
|
542
540
|
gpr_cpu_num_cores_import = (gpr_cpu_num_cores_type) GetProcAddress(library, "gpr_cpu_num_cores");
|
543
541
|
gpr_cpu_current_cpu_import = (gpr_cpu_current_cpu_type) GetProcAddress(library, "gpr_cpu_current_cpu");
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
gpr_set_log_verbosity_import = (gpr_set_log_verbosity_type) GetProcAddress(library, "gpr_set_log_verbosity");
|
542
|
+
grpc_absl_log_import = (grpc_absl_log_type) GetProcAddress(library, "grpc_absl_log");
|
543
|
+
grpc_absl_log_int_import = (grpc_absl_log_int_type) GetProcAddress(library, "grpc_absl_log_int");
|
544
|
+
grpc_absl_log_str_import = (grpc_absl_log_str_type) GetProcAddress(library, "grpc_absl_log_str");
|
548
545
|
gpr_log_verbosity_init_import = (gpr_log_verbosity_init_type) GetProcAddress(library, "gpr_log_verbosity_init");
|
549
|
-
gpr_set_log_function_import = (gpr_set_log_function_type) GetProcAddress(library, "gpr_set_log_function");
|
550
546
|
gpr_format_message_import = (gpr_format_message_type) GetProcAddress(library, "gpr_format_message");
|
551
547
|
gpr_strdup_import = (gpr_strdup_type) GetProcAddress(library, "gpr_strdup");
|
552
548
|
gpr_asprintf_import = (gpr_asprintf_type) GetProcAddress(library, "gpr_asprintf");
|
@@ -735,24 +735,18 @@ extern gpr_cpu_num_cores_type gpr_cpu_num_cores_import;
|
|
735
735
|
typedef unsigned(*gpr_cpu_current_cpu_type)(void);
|
736
736
|
extern gpr_cpu_current_cpu_type gpr_cpu_current_cpu_import;
|
737
737
|
#define gpr_cpu_current_cpu gpr_cpu_current_cpu_import
|
738
|
-
typedef void(*
|
739
|
-
extern
|
740
|
-
#define
|
741
|
-
typedef
|
742
|
-
extern
|
743
|
-
#define
|
744
|
-
typedef void(*
|
745
|
-
extern
|
746
|
-
#define
|
747
|
-
typedef void(*gpr_set_log_verbosity_type)(gpr_log_severity deprecated_setting);
|
748
|
-
extern gpr_set_log_verbosity_type gpr_set_log_verbosity_import;
|
749
|
-
#define gpr_set_log_verbosity gpr_set_log_verbosity_import
|
738
|
+
typedef void(*grpc_absl_log_type)(const char* file, int line, gpr_log_severity severity, const char* message_str);
|
739
|
+
extern grpc_absl_log_type grpc_absl_log_import;
|
740
|
+
#define grpc_absl_log grpc_absl_log_import
|
741
|
+
typedef void(*grpc_absl_log_int_type)(const char* file, int line, gpr_log_severity severity, const char* message_str, intptr_t num);
|
742
|
+
extern grpc_absl_log_int_type grpc_absl_log_int_import;
|
743
|
+
#define grpc_absl_log_int grpc_absl_log_int_import
|
744
|
+
typedef void(*grpc_absl_log_str_type)(const char* file, int line, gpr_log_severity severity, const char* message_str1, const char* message_str2);
|
745
|
+
extern grpc_absl_log_str_type grpc_absl_log_str_import;
|
746
|
+
#define grpc_absl_log_str grpc_absl_log_str_import
|
750
747
|
typedef void(*gpr_log_verbosity_init_type)(void);
|
751
748
|
extern gpr_log_verbosity_init_type gpr_log_verbosity_init_import;
|
752
749
|
#define gpr_log_verbosity_init gpr_log_verbosity_init_import
|
753
|
-
typedef void(*gpr_set_log_function_type)(gpr_log_func deprecated_setting);
|
754
|
-
extern gpr_set_log_function_type gpr_set_log_function_import;
|
755
|
-
#define gpr_set_log_function gpr_set_log_function_import
|
756
750
|
typedef char*(*gpr_format_message_type)(int messageid);
|
757
751
|
extern gpr_format_message_type gpr_format_message_import;
|
758
752
|
#define gpr_format_message gpr_format_message_import
|
@@ -68,9 +68,9 @@ static void grpc_rb_server_shutdown_and_notify_internal(grpc_rb_server* server,
|
|
68
68
|
server->queue, tag, gpr_inf_future(GPR_CLOCK_REALTIME), NULL, NULL);
|
69
69
|
}
|
70
70
|
if (ev.type != GRPC_OP_COMPLETE) {
|
71
|
-
|
72
|
-
|
73
|
-
|
71
|
+
grpc_absl_log_int(
|
72
|
+
GPR_DEBUG,
|
73
|
+
"GRPC_RUBY: bad grpc_server_shutdown_and_notify result:", ev.type);
|
74
74
|
}
|
75
75
|
}
|
76
76
|
}
|
@@ -192,7 +192,7 @@ struct server_request_call_args {
|
|
192
192
|
|
193
193
|
static void shutdown_server_unblock_func(void* arg) {
|
194
194
|
grpc_rb_server* server = (grpc_rb_server*)arg;
|
195
|
-
|
195
|
+
grpc_absl_log(GPR_DEBUG, "GRPC_RUBY: shutdown_server_unblock_func");
|
196
196
|
GRPC_RUBY_ASSERT(server->wrapped != NULL);
|
197
197
|
grpc_event event;
|
198
198
|
void* tag = &event;
|
@@ -202,10 +202,12 @@ static void shutdown_server_unblock_func(void* arg) {
|
|
202
202
|
// cancelled all calls.
|
203
203
|
event = grpc_completion_queue_pluck(server->queue, tag,
|
204
204
|
gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
205
|
+
grpc_absl_log_int(
|
206
|
+
GPR_DEBUG,
|
207
|
+
"GRPC_RUBY: shutdown_server_unblock_func pluck event.type: ", event.type);
|
208
|
+
grpc_absl_log_int(
|
209
|
+
GPR_DEBUG,
|
210
|
+
"GRPC_RUBY: shutdown_server_unblock_func event.success: ", event.success);
|
209
211
|
}
|
210
212
|
|
211
213
|
static VALUE grpc_rb_server_request_call_try(VALUE value_args) {
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -44,8 +44,8 @@ module GRPC
|
|
44
44
|
include Core::CallOps
|
45
45
|
extend Forwardable
|
46
46
|
attr_reader :deadline, :metadata_sent, :metadata_to_send, :peer, :peer_cert
|
47
|
-
def_delegators :@call, :cancel, :
|
48
|
-
:trailing_metadata, :status
|
47
|
+
def_delegators :@call, :cancel, :cancel_with_status, :metadata,
|
48
|
+
:write_flag, :write_flag=, :trailing_metadata, :status
|
49
49
|
|
50
50
|
# client_invoke begins a client invocation.
|
51
51
|
#
|
@@ -620,6 +620,8 @@ module GRPC
|
|
620
620
|
# @param metadata [Hash] metadata to be sent to the server. If a value is
|
621
621
|
# a list, multiple metadata for its key are sent
|
622
622
|
def start_call(metadata = {})
|
623
|
+
# TODO(apolcyn): we should cancel and clean up the call in case this
|
624
|
+
# send initial MD op fails.
|
623
625
|
merge_metadata_to_send(metadata) && send_initial_metadata
|
624
626
|
end
|
625
627
|
|
@@ -665,9 +667,10 @@ module GRPC
|
|
665
667
|
|
666
668
|
# Operation limits access to an ActiveCall's methods for use as
|
667
669
|
# a Operation on the client.
|
668
|
-
|
669
|
-
|
670
|
-
:
|
670
|
+
# TODO(apolcyn): expose peer getter
|
671
|
+
Operation = view_class(:cancel, :cancel_with_status, :cancelled?, :deadline,
|
672
|
+
:execute, :metadata, :status, :start_call, :wait,
|
673
|
+
:write_flag, :write_flag=, :trailing_metadata)
|
671
674
|
|
672
675
|
# InterceptableView further limits access to an ActiveCall's methods
|
673
676
|
# for use in interceptors on the client, exposing only the deadline
|
data/src/ruby/spec/call_spec.rb
CHANGED
@@ -90,88 +90,101 @@ describe GRPC::Core::Call do
|
|
90
90
|
|
91
91
|
describe '#status' do
|
92
92
|
it 'can save the status and read it back' do
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
93
|
+
make_test_call do |call|
|
94
|
+
sts = Struct::Status.new(OK, 'OK')
|
95
|
+
expect { call.status = sts }.not_to raise_error
|
96
|
+
expect(call.status).to eq(sts)
|
97
|
+
end
|
97
98
|
end
|
98
99
|
|
99
100
|
it 'must be set to a status' do
|
100
|
-
|
101
|
-
|
102
|
-
|
101
|
+
make_test_call do |call|
|
102
|
+
bad_sts = Object.new
|
103
|
+
expect { call.status = bad_sts }.to raise_error(TypeError)
|
104
|
+
end
|
103
105
|
end
|
104
106
|
|
105
107
|
it 'can be set to nil' do
|
106
|
-
|
107
|
-
|
108
|
+
make_test_call do |call|
|
109
|
+
expect { call.status = nil }.not_to raise_error
|
110
|
+
end
|
108
111
|
end
|
109
112
|
end
|
110
113
|
|
111
114
|
describe '#metadata' do
|
112
115
|
it 'can save the metadata hash and read it back' do
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
116
|
+
make_test_call do |call|
|
117
|
+
md = { 'k1' => 'v1', 'k2' => 'v2' }
|
118
|
+
expect { call.metadata = md }.not_to raise_error
|
119
|
+
expect(call.metadata).to be(md)
|
120
|
+
end
|
117
121
|
end
|
118
122
|
|
119
123
|
it 'must be set with a hash' do
|
120
|
-
|
121
|
-
|
122
|
-
|
124
|
+
make_test_call do |call|
|
125
|
+
bad_md = Object.new
|
126
|
+
expect { call.metadata = bad_md }.to raise_error(TypeError)
|
127
|
+
end
|
123
128
|
end
|
124
129
|
|
125
130
|
it 'can be set to nil' do
|
126
|
-
|
127
|
-
|
131
|
+
make_test_call do |call|
|
132
|
+
expect { call.metadata = nil }.not_to raise_error
|
133
|
+
end
|
128
134
|
end
|
129
135
|
end
|
130
136
|
|
131
137
|
describe '#set_credentials!' do
|
132
138
|
it 'can set a valid CallCredentials object' do
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
139
|
+
make_test_call do |call|
|
140
|
+
auth_proc = proc { { 'plugin_key' => 'plugin_value' } }
|
141
|
+
creds = GRPC::Core::CallCredentials.new auth_proc
|
142
|
+
expect { call.set_credentials! creds }.not_to raise_error
|
143
|
+
end
|
137
144
|
end
|
138
145
|
end
|
139
146
|
|
140
147
|
describe '#cancel' do
|
141
148
|
it 'completes ok' do
|
142
|
-
|
143
|
-
|
149
|
+
make_test_call do |call|
|
150
|
+
expect { call.cancel }.not_to raise_error
|
151
|
+
end
|
144
152
|
end
|
145
153
|
|
146
154
|
it 'completes ok when the call is closed' do
|
147
|
-
|
148
|
-
|
149
|
-
|
155
|
+
make_test_call do |call|
|
156
|
+
call.close
|
157
|
+
expect { call.cancel }.not_to raise_error
|
158
|
+
end
|
150
159
|
end
|
151
160
|
end
|
152
161
|
|
153
162
|
describe '#cancel_with_status' do
|
154
163
|
it 'completes ok' do
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
164
|
+
make_test_call do |call|
|
165
|
+
expect do
|
166
|
+
call.cancel_with_status(0, 'test status')
|
167
|
+
end.not_to raise_error
|
168
|
+
expect do
|
169
|
+
call.cancel_with_status(0, nil)
|
170
|
+
end.to raise_error(TypeError)
|
171
|
+
end
|
162
172
|
end
|
163
173
|
|
164
174
|
it 'completes ok when the call is closed' do
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
175
|
+
make_test_call do |call|
|
176
|
+
call.close
|
177
|
+
expect do
|
178
|
+
call.cancel_with_status(0, 'test status')
|
179
|
+
end.not_to raise_error
|
180
|
+
end
|
170
181
|
end
|
171
182
|
end
|
172
183
|
|
173
184
|
def make_test_call
|
174
|
-
@ch.create_call(nil, nil, 'phony_method', nil, deadline)
|
185
|
+
call = @ch.create_call(nil, nil, 'phony_method', nil, deadline)
|
186
|
+
yield call
|
187
|
+
call.close
|
175
188
|
end
|
176
189
|
|
177
190
|
def deadline
|
@@ -118,7 +118,8 @@ describe GRPC::Core::Channel do
|
|
118
118
|
deadline = Time.now + 5
|
119
119
|
|
120
120
|
blk = proc do
|
121
|
-
ch.create_call(nil, nil, 'phony_method', nil, deadline)
|
121
|
+
call = ch.create_call(nil, nil, 'phony_method', nil, deadline)
|
122
|
+
call.close
|
122
123
|
end
|
123
124
|
expect(&blk).to_not raise_error
|
124
125
|
end
|
@@ -132,8 +133,9 @@ describe GRPC::Core::Channel do
|
|
132
133
|
|
133
134
|
deadline = Time.now + 5
|
134
135
|
blk = proc do
|
135
|
-
ch.create_call(nil, nil, 'phony_method', nil, deadline)
|
136
|
+
call = ch.create_call(nil, nil, 'phony_method', nil, deadline)
|
136
137
|
STDERR.puts "#{Time.now}: created call"
|
138
|
+
call.close
|
137
139
|
end
|
138
140
|
expect(&blk).to raise_error(RuntimeError)
|
139
141
|
STDERR.puts "#{Time.now}: finished: raises an error if called on a closed channel"
|