diff --git a/Lib/test/test_ossaudiodev.py b/Lib/test/test_ossaudiodev.py
new file mode 100644
index 0000000..1aa0f92
--- /dev/null
+++ b/Lib/test/test_ossaudiodev.py
@@ -0,0 +1,89 @@
+from test.test_support import verbose, findfile, TestFailed, TestSkipped
+
+import errno
+import fcntl
+import ossaudiodev
+import os
+import sys
+import select
+import sunaudio
+import time
+import audioop
+
+SND_FORMAT_MULAW_8 = 1
+
+def play_sound_file(path):
+    fp = open(path, 'r')
+    size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
+    data = fp.read()
+    fp.close()
+
+    if enc != SND_FORMAT_MULAW_8:
+        print "Expect .au file with 8-bit mu-law samples"
+        return
+
+    try:
+        a = ossaudiodev.open('w')
+    except ossaudiodev.error, msg:
+        if msg[0] in (errno.EACCES, errno.ENODEV, errno.EBUSY):
+            raise TestSkipped, msg
+        raise TestFailed, msg
+
+    # convert the data to 16-bit signed
+    data = audioop.ulaw2lin(data, 2)
+
+    # set the data format
+    if sys.byteorder == 'little':
+        fmt = ossaudiodev.AFMT_S16_LE
+    else:
+        fmt = ossaudiodev.AFMT_S16_BE
+
+    # at least check that these methods can be invoked
+    a.bufsize()
+    a.obufcount()
+    a.obuffree()
+    a.getptr()
+    a.fileno()
+
+    # set parameters based on .au file headers
+    a.setparameters(rate, 16, nchannels, fmt)
+    a.write(data)
+    a.flush()
+    a.close()
+
+def test_errors():
+    a = ossaudiodev.open("w")
+    size = 8
+    fmt = ossaudiodev.AFMT_U8
+    rate = 8000
+    nchannels = 1
+    try:
+        a.setparameters(-1, size, nchannels, fmt)
+    except ValueError, msg:
+        print msg
+    try:
+        a.setparameters(rate, -2, nchannels, fmt)
+    except ValueError, msg:
+        print msg
+    try:
+        a.setparameters(rate, size, 3, fmt)
+    except ValueError, msg:
+        print msg
+    try:
+        a.setparameters(rate, size, nchannels, 177)
+    except ValueError, msg:
+        print msg
+    try:
+        a.setparameters(rate, size, nchannels, ossaudiodev.AFMT_U16_LE)
+    except ValueError, msg:
+        print msg
+    try:
+        a.setparameters(rate, 16, nchannels, fmt)
+    except ValueError, msg:
+        print msg
+
+def test():
+    play_sound_file(findfile('audiotest.au'))
+    test_errors()
+
+test()
