From 4afbfa91c0fe1165fdcc9d196ae6e15d26f159a6 Mon Sep 17 00:00:00 2001 From: nick Date: Wed, 27 Aug 2014 09:06:44 +0100 Subject: [PATCH] tests: Add a create-many-IPs-in-parallel test, as this is a common operation --- test/t_route.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/t_route.rb b/test/t_route.rb index a9ab25c..acab915 100644 --- a/test/t_route.rb +++ b/test/t_route.rb @@ -40,6 +40,28 @@ class TestAddr < Test::Unit::TestCase end end + test "massively parallel IP address addition" do + @ifname = create_test_interface + + ips = (10..20).map {|y| (1..254).map {|z| "10.100.#{y}.#{z}" } }.flatten.compact + + threads = ips.map {|ip| + Thread.new { + Linux::Netlink::Route::Socket.new.addr.add( + :index => @ifname, + :local => ip, + :prefixlen => 8 + ) + } + } + + threads.map(&:join) + created = @ip.addr.list(:index => @ifname, :family => Socket::AF_INET). + map {|ifaddr| ifaddr.address.to_s } + + ips.each {|ip| assert created.include?( ip ), "#{ip} was not created" } + end + def create_test_interface(ifname = "test_#{$$}") begin @ip.link.add(