I’ve written client code that’s supposed to send some data through a socket and read back an answer from the remote server.
I would like to unit-test that code. The function’s signature is something along the lines of:
double call_remote(double[] args, int fd);
where fd is the file descriptor of the socket to the remote server.
Now the call_remote function will, after sending the data, block on reading the answer from the server. How can I stub such a remote server for unit-testing the code?
Ideally I would like something like:
int main() {
int stub = /* initialize stub */
double expected = 42.0;
assert(expected == call_remote(/* args */, stub);
return 0;
}
double stub_behavior(double[] args) {
return 42.0;
}
I would like stub_behavior to be called and send the 42.0 value down the stubbed file descriptor.
Any easy way I can do that?
If this is a POSIX system, you can use
fork()andsocketpair():…of course, you will probably want to add some error checking, and alter the logic that reads the request.
The file descriptor created by
socketpair()is a normal socket, and thus socket calls likesend()andrecv()will work fine on it.