1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
#!/usr/bin/ruby
# netsed Unit::Tests
# (c) 2010 Julien Viard de Galbert <julien@silicone.homelinux.org>
#
# ---------------------------------------------------------------------------
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
#
# You may also redistribute it or any part of it under the Ruby license to
# better integrate to your ruby scripts.
# The ruby license is available at http://www.ruby-lang.org/en/LICENSE.txt
# ---------------------------------------------------------------------------
#
# this file implements checks for netsed rules in class TC_RuleTest
require 'test/unit'
require './test_helper'
# Test Case for netsed rules
class TC_RuleTest < Test::Unit::TestCase
# def setup
# end
# def teardown
# end
# General rule checker method used by actual tests
# - _datasent_ are send by a server,
# - _dataexpect_ are the corresponding expected data on the client side,
# - _rules_ is a set of rules passed to netsed.
def TCP_RuleCheck(datasent, dataexpect, rules)
serv = TCPServeSingleDataSender.new(SERVER, RPORT, datasent)
netsed = NetsedRun.new('tcp', LPORT, SERVER, RPORT, rules)
datarecv = TCPSingleDataRecv(SERVER, LPORT, 100)
serv.join
netsed.kill
assert_equal(dataexpect, datarecv)
end
# Check a basic rule.
def test_basic_rule
TCP_RuleCheck('test andrew is there' ,"test mike\0\0 is there", ['s/andrew/mike%00%00'])
end
# Check single char replacement.
#
# Note: This one fail without commit 387a9d46387e2488efac08931b0aab57c7594aa2,
# it returns "b b ba bab baba" !!
def test_smallpattern_rule
TCP_RuleCheck('a a aa aaa aaaa' ,"b b bb bbb bbbb", ['s/a/b'])
end
# Check with 2 rules.
def test_chain_2_rule
TCP_RuleCheck('test andrew is there' ,'test mike is here', ['s/andrew/mike', 's/there/here'])
end
# Check traditionally delimited rules
def test_traddelim_rule
TCP_RuleCheck('a a aa aaa aaaa' ,"b b bb bbb bbbb", ['s/a/b/'])
end
# General rule checker method in chat mode
# - _datasent_ is an array of data to sent 0:client 1:server,
# - _dataexpect_ are the corresponding expected data on the other side,
# - _rules_ is a set of rules passed to netsed.
def TCP_RuleChatCheck(datasent, dataexpect, rules)
netsed = NetsedRun.new('tcp', LPORT, SERVER, RPORT, rules)
datarecv = []
serv = TCPServeSingleConnection.new(SERVER, RPORT) { |s|
datarecv[0] = s.recv( 100 )
s.write(datasent[1])
}
streamSock = TCPSocket.new(SERVER, LPORT)
streamSock.write( datasent[0] )
datarecv[1] = streamSock.recv( 100 )
streamSock.close
serv.join
netsed.kill
assert_equal_objects(dataexpect, datarecv)
end
# Check direction rules
# tests based on tcp chat: test_case_04_Chat
def test_direction_rule
TCP_RuleChatCheck(
['client: bla bla Rilke Proust', 'server: ok Proust ok Rilke'],
['client: bla bla Proust Proust', 'server: ok Rilke ok Rilke'],
['s/Rilke/Proust/o', 's/Proust/Rilke/i'])
end
# Check direction+ttl rules
# tests based on tcp chat: test_case_04_Chat
def test_direction_ttl_rule
TCP_RuleChatCheck(
['client: bla bla Rilke Rilke', 'server: ok Proust ok Proust'],
['client: bla bla Proust Rilke', 'server: ok Rilke ok Proust'],
['s/Rilke/Proust/o1', 's/Proust/Rilke/i1'])
end
end
# vim:sw=2:sta:et:
|