Exemplo n.º 1
0
  void test_io_read_into_buffer() {
    int fds[2];
    TS_ASSERT(!pipe(fds));

    TestChannelObject chan(state);
    event::Read* read = new event::Read(state, &chan, fds[0]);
    
    IOBuffer *buf = IOBuffer::create(state, 12);
    read->into_buffer(buf, 1);
    TS_ASSERT_EQUALS(buf->used(), Fixnum::from(0));
    TS_ASSERT_EQUALS(buf->start(), Fixnum::from(0));

    state->events->start(read);
    TS_ASSERT(!chan.called);
    state->events->poll();
    TS_ASSERT(!chan.called);
    
    /* Write some garbage into the buffer to be sure it's overridden */
    char* str = buf->byte_address();
    str[0] = str[1] = 47;

    TS_ASSERT_EQUALS(write(fds[1], "!", 1),1);
    state->events->poll();
    TS_ASSERT(chan.called);
    TS_ASSERT_EQUALS(chan.value, Fixnum::from(1));
    TS_ASSERT_EQUALS(buf->used(), Fixnum::from(1));
    TS_ASSERT_EQUALS(buf->start(), Fixnum::from(0));

    TS_ASSERT_EQUALS(str[0], '!');
    TS_ASSERT_EQUALS(str[1], 0);
    
    close(fds[0]);
    close(fds[1]);
  }