benkay
benkay

Reputation: 599

Test Harness for a Clojure TCP Client

I'm writing a TCP client to connect, send messages to, and read responses from nodes on a busy network. I do not have access to code running on those nodes, so I have to sculpt the TCP messages I send out over the wire very carefully.

I've decided that I'm going to gather a bunch of live TCP data off of the network and use that as the basis for testing my client - given these input parameters, make sure that the transmitted binary renders into the hex I expect to see.

At this point I'm about to either fire up Wireshark and figure out how to filter for the packets that I'm sending or implement a really simple TCP server that waits for connections, spits the transmitted binary to disk (maybe processed to hex) and then test that I'm sending what I expect to send; neither of which feel like robust or professional solutions.

So: how would you recommend setting up a test harness for a TCP client to verify the right hex messages are coming out?

Upvotes: 1

Views: 572

Answers (1)

Shlomi
Shlomi

Reputation: 4748

You should check out aleph for tcp and gloss for protocols. here is a tutorial and an example.

a simple tcp echo-server could be:

(defn echo-handler [ch client-info]
  (siphon ch ch)) ;; a simple echo handler

(defn start-server [] (start-tcp-server
                       echo-handler
                       {:port 9997}))
(start-server) 

gloss will be very useful at spitting the received messages either as hex dump or as values if you encode your protocol in it and use "decode".

Upvotes: 3

Related Questions