Using Python to test system behavior

July 19, 2006

One of the things I like about the Python interpreter is that it is just about right for doing little system behavior tests, like how various systems handled a TCP port binding issue. This is because Python is low level enough to be relatively close to the actual system, so you can be pretty sure that what you're seeing isn't Python-specific behavior, while at the same time being high level enough that you can do the tests in a couple of lines.

Strictly speaking you don't need an interpreter for this, just a language at the right level, but having an interpreter avoids the whole drag of editing and running and re-editing and re-running and so on.

(And theoretically you can write this stuff directly in C, but I'm certainly not familiar enough with things like the C socket API that I can toss off test programs for this in ten minutes or less. In Python I can bind a socket in three statements, and one of them is 'import socket'.)

So today when I wanted to see how bind() behaved on Solaris 9, I fired up two interpreters in two windows, and in the first I typed:

>>> import socket
>>> s = socket.socket(); s.bind(('', 4000))

and in the other I typed:

>>> import socket
>>> s = socket.socket(); s.bind(('127.0.0.1', 4000))

And the Solaris 9 machine promptly spewed a traceback complaining about 'socket.error: (125, 'Address already in use')', just as I expected. (Yeah, I could have done it all in one Python interpreter; I didn't feel like seeing if Solaris did something funny if the same process was doing both bind()s. (It turns out it doesn't.))

These are my WanderingThoughts
(About the blog)

GettingAround
Full index of entries
Recent comments

This is part of CSpace, and is written by ChrisSiebenmann.
Twitter: @thatcks

* * *

Atom feeds are available; see the bottom of most pages.

This is a DWiki.
(Help)

Categories: links, linux, programming, python, snark, solaris, spam, sysadmin, tech, unix, web

Search:
Written on 19 July 2006.
(Previous | Next)

Page tools: View Source, Add Comment.
Search:
Login: Password:
Atom Syndication: Recent Comments.

Last modified: Wed Jul 19 01:52:06 2006
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.