require File.dirname(__FILE__) + '/../test_helper' require File.dirname(__FILE__) + '/../../server/nntp' require 'test/unit' require 'log4r' class NNTPTest < Test::Unit::TestCase def setup create_fixtures 'posts', 'users', 'forums', 'topics' Thread.abort_on_exception = true logger = Log4r::Logger.new('nntpd') logger.outputters = Log4r::Outputter.stdout @server = Thread.new do NNTPSession.new(TCPServer.new('localhost', 9999).accept, logger).serve end @client = TCPSocket.new('localhost', 9999) assert_status 200, getline end def teardown putline 'QUIT' assert_status 205, getline end def getline @client.gets("\r\n").chomp end def getlongresp s = @client.gets("\r\n.\r\n").sub(/\r\n\.\r\n$/, '') end def putline(s) @client.write(s.chomp + "\r\n") end def test_server # INVALID COMMAND putline '(invalid command)' assert_status 500, getline # LIST putline 'LIST' # TODO while getline != '.' end # LIST OVERVIEW.FMT putline 'LIST OVERVIEW.FMT' s = getlongresp assert_equal "Subject:\r\nFrom:\r\nDate:\r\nMessage-Id:\r\nReferences:\r\nBytes:\r\nLines:", s # GROUP # # existing group name putline 'GROUP mikrocontroller.msp430' assert_status 211, getline # invalid group name putline 'GROUP invalid' assert_status 411, getline # AUTHINFO # # password without user name putline 'AUTHINFO PASS foobar' assert_status 482, getline # wrong password putline 'AUTHINFO USER a' assert_status 381, getline putline 'AUTHINFO PASS wrong' assert_status 502, getline # correct user & password putline 'AUTHINFO USER a' assert_status 381, getline putline 'AUTHINFO PASS a' assert_status 281, getline putline 'NEWNEWS' assert_status 502, getline putline 'SLAVE' assert_status 202, getline putline 'MODE READER' assert_status 200, getline putline 'IHAVE' assert_status 435, getline end def assert_status status, line assert_equal status, line.split[0].to_i end end