Adds symbols to access the fields in Status struct

pull/1188/head
Tim Emiola 10 years ago
parent 6de558f9cd
commit 98a32d399a
  1. 7
      src/ruby/ext/grpc/rb_grpc.c
  2. 9
      src/ruby/ext/grpc/rb_grpc.h
  3. 37
      src/ruby/spec/call_spec.rb

@ -195,7 +195,7 @@ static ID id_inspect;
/* id_to_s is the to_s method found on various ruby objects. */
static ID id_to_s;
/* Converts `a wrapped time constant to a standard time. */
/* Converts a wrapped time constant to a standard time. */
VALUE grpc_rb_time_val_to_time(VALUE self) {
gpr_timespec *time_const = NULL;
Data_Get_Struct(self, gpr_timespec, time_const);
@ -257,8 +257,11 @@ void Init_grpc() {
rb_mGRPC = rb_define_module("GRPC");
rb_mGrpcCore = rb_define_module_under(rb_mGRPC, "Core");
rb_sNewServerRpc = rb_struct_define("NewServerRpc", "method", "host",
"deadline", "metadata", NULL);
"deadline", "metadata", "call", NULL);
rb_sStatus = rb_struct_define("Status", "code", "details", "metadata", NULL);
sym_code = ID2SYM(rb_intern("code"));
sym_details = ID2SYM(rb_intern("details"));
sym_metadata = ID2SYM(rb_intern("metadata"));
Init_grpc_byte_buffer();
Init_grpc_event();

@ -50,6 +50,15 @@ extern VALUE rb_sNewServerRpc;
/* rb_sStruct is the struct that holds status details. */
extern VALUE rb_sStatus;
/* sym_code is the symbol for the code attribute of rb_sStatus. */
VALUE sym_code;
/* sym_details is the symbol for the details attribute of rb_sStatus. */
VALUE sym_details;
/* sym_metadata is the symbol for the metadata attribute of rb_sStatus. */
VALUE sym_metadata;
/* GC_NOT_MARKED is used in calls to Data_Wrap_Struct to indicate that the
wrapped struct does not need to participate in ruby gc. */
extern const RUBY_DATA_FUNC GC_NOT_MARKED;

@ -76,7 +76,7 @@ describe GRPC::Core::CallOps do
RECV_INITIAL_METADATA: 4,
RECV_MESSAGE: 5,
RECV_STATUS_ON_CLIENT: 6,
RECV_CLOSE_ON_SERVER: 7,
RECV_CLOSE_ON_SERVER: 7
}
end
@ -88,43 +88,14 @@ describe GRPC::Core::CallOps do
end
describe GRPC::Core::Call do
let (:client_queue) { GRPC::Core::CompletionQueue.new }
let (:test_tag) { Object.new }
let (:fake_host) { 'localhost:10101' }
let(:client_queue) { GRPC::Core::CompletionQueue.new }
let(:test_tag) { Object.new }
let(:fake_host) { 'localhost:10101' }
before(:each) do
@ch = GRPC::Core::Channel.new(fake_host, nil)
end
describe '#start_read' do
xit 'should fail if called immediately' do
blk = proc { make_test_call.start_read(test_tag) }
expect(&blk).to raise_error GRPC::Core::CallError
end
end
describe '#start_write' do
xit 'should fail if called immediately' do
bytes = GRPC::Core::ByteBuffer.new('test string')
blk = proc { make_test_call.start_write(bytes, test_tag) }
expect(&blk).to raise_error GRPC::Core::CallError
end
end
describe '#start_write_status' do
xit 'should fail if called immediately' do
blk = proc { make_test_call.start_write_status(153, 'x', test_tag) }
expect(&blk).to raise_error GRPC::Core::CallError
end
end
describe '#writes_done' do
xit 'should fail if called immediately' do
blk = proc { make_test_call.writes_done(Object.new) }
expect(&blk).to raise_error GRPC::Core::CallError
end
end
describe '#add_metadata' do
it 'adds metadata to a call without fail' do
call = make_test_call

Loading…
Cancel
Save