From patchwork Tue Jul 12 06:35:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gurucharan Shetty X-Patchwork-Id: 647507 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id 3rpncH5Wxwz9s5w for ; Wed, 13 Jul 2016 02:34:39 +1000 (AEST) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 1B6D4108D6; Tue, 12 Jul 2016 09:34:26 -0700 (PDT) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx1e3.cudamail.com (mx1.cudamail.com [69.90.118.67]) by archives.nicira.com (Postfix) with ESMTPS id 7FFF7108C3 for ; Tue, 12 Jul 2016 09:34:24 -0700 (PDT) Received: from bar5.cudamail.com (localhost [127.0.0.1]) by mx1e3.cudamail.com (Postfix) with ESMTPS id D95504206E0 for ; Tue, 12 Jul 2016 10:34:23 -0600 (MDT) X-ASG-Debug-ID: 1468341263-09eadd3a4a01a30001-byXFYA Received: from mx3-pf1.cudamail.com ([192.168.14.2]) by bar5.cudamail.com with ESMTP id Tch8LyDq1ncW1hOF (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 12 Jul 2016 10:34:23 -0600 (MDT) X-Barracuda-Envelope-From: guru.ovn@gmail.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.2 Received: from unknown (HELO mail-pa0-f68.google.com) (209.85.220.68) by mx3-pf1.cudamail.com with ESMTPS (AES128-SHA encrypted); 12 Jul 2016 16:34:23 -0000 Received-SPF: pass (mx3-pf1.cudamail.com: SPF record at _netblocks.google.com designates 209.85.220.68 as permitted sender) X-Barracuda-Apparent-Source-IP: 209.85.220.68 X-Barracuda-RBL-IP: 209.85.220.68 Received: by mail-pa0-f68.google.com with SMTP id dx3so1334361pab.2 for ; Tue, 12 Jul 2016 09:34:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=SGEJ5flC8t+MhM5+boFAuA8mjfAYKSxAgnsiPEzWdhs=; b=kyqA+bf+Bjm2wpeLy3zZcu+AcAYMAce4OlNWTWdc28PFH2ORgeqi4jaG8X5Fdrer1/ ej1rs6Vanz0fF1l0/4E3FSN9lJqS2Asj5yVnuBJPclholGlXYS/nmukimA/HuhprS9vK tBE4O7v40zViBTA0ZwRxox84g9bg3XhuXdM/O1U4nyRa0LeLvTw9Tax4cYQqNMl6uai1 zAf7mtCFDMgr2k20YPOT2yBAHR7bU+4w+j8PDTK+5ZS6L24+PJlOrxr44D3L4JuDrAs1 TNCJlunP8pHNB5Sn1QsF1WoakR+hbuQWrlbyLxPMf1kq2oNsJqLDQtpyEcUxneTRwcdh HbQA== X-Gm-Message-State: ALyK8tKC4b2w4+PQLH87wVBwNgOyTC1+KUOefXzOUQXJEUEhJdaqIs8gbjU5AkgcLfHe8A== X-Received: by 10.66.89.66 with SMTP id bm2mr5415030pab.154.1468341262318; Tue, 12 Jul 2016 09:34:22 -0700 (PDT) Received: from ovn1.eng.vmware.com ([208.91.1.34]) by smtp.gmail.com with ESMTPSA id s3sm5728593pfb.87.2016.07.12.09.34.20 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 12 Jul 2016 09:34:21 -0700 (PDT) X-CudaMail-Envelope-Sender: guru.ovn@gmail.com From: Gurucharan Shetty To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-V1-711028743 X-CudaMail-DTE: 071216 X-CudaMail-Originating-IP: 209.85.220.68 Date: Mon, 11 Jul 2016 23:35:29 -0700 X-ASG-Orig-Subj: [##CM-V1-711028743##][PATCH 4/4] system-ovn.at: Add a OVN load-balancing unit test. Message-Id: <1468305329-28456-4-git-send-email-guru@ovn.org> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1468305329-28456-1-git-send-email-guru@ovn.org> References: <1468305329-28456-1-git-send-email-guru@ovn.org> X-Barracuda-Connect: UNKNOWN[192.168.14.2] X-Barracuda-Start-Time: 1468341263 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 Subject: [ovs-dev] [PATCH 4/4] system-ovn.at: Add a OVN load-balancing unit test. X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" Signed-off-by: Gurucharan Shetty Acked-by: Joe Stringer --- Please note that there are a couple of unit tests around fragmentation (unrelated to OVN) that can cause kernel crashes when you run OVN kernel tests. So, if you intend to run these, run it via: make check-kmod TESTSUITEFLAGS="-k ovn" --- tests/system-ovn.at | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/tests/system-ovn.at b/tests/system-ovn.at index b58a5b7..d22d79b 100644 --- a/tests/system-ovn.at +++ b/tests/system-ovn.at @@ -139,3 +139,111 @@ OVS_APP_EXIT_AND_WAIT([ovn-northd]) as OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port patch-.*/d"]) AT_CLEANUP + + +AT_SETUP([ovn -- load-balancing]) +AT_KEYWORDS([ovnlb]) +ovn_start + +OVS_TRAFFIC_VSWITCHD_START() +ADD_BR([br-int]) + +# Set external-ids in br-int needed for ovn-controller +ovs-vsctl \ + -- set Open_vSwitch . external-ids:system-id=hv1 \ + -- set Open_vSwitch . external-ids:ovn-remote=unix:$ovs_base/ovn-sb/ovn-sb.sock \ + -- set Open_vSwitch . external-ids:ovn-encap-type=geneve \ + -- set Open_vSwitch . external-ids:ovn-encap-ip=169.0.0.1 \ + -- set bridge br-int fail-mode=secure other-config:disable-in-band=true + +# Start ovn-controller +start_daemon ovn-controller + +# Logical network: +# 2 logical switches "foo" (192.168.1.0/24) and "bar" (172.16.1.0/24) +# connected to a router R1. +# foo has foo1 to act as a client. +# bar has bar1, bar2, bar3 to act as servers. +# +# Loadbalancer VIPs in 30.0.0.0/24 network. + +ovn-nbctl create Logical_Router name=R1 +ovn-nbctl ls-add foo +ovn-nbctl ls-add bar + +# Connect foo to R1 +ovn-nbctl lrp-add R1 foo 00:00:01:01:02:03 192.168.1.1/24 +ovn-nbctl lsp-add foo rp-foo -- set Logical_Switch_Port rp-foo \ + type=router options:router-port=foo addresses=\"00:00:01:01:02:03\" + +# Connect bar to R1 +ovn-nbctl lrp-add R1 bar 00:00:01:01:02:04 172.16.1.1/24 +ovn-nbctl lsp-add bar rp-bar -- set Logical_Switch_Port rp-bar \ + type=router options:router-port=bar addresses=\"00:00:01:01:02:04\" + +# Create logical port 'foo1' in switch 'foo'. +ADD_NAMESPACES(foo1) +ADD_VETH(foo1, foo1, br-int, "192.168.1.2/24", "f0:00:00:01:02:03", \ + "192.168.1.1") +ovn-nbctl lsp-add foo foo1 \ +-- lsp-set-addresses foo1 "f0:00:00:01:02:03 192.168.1.2" + +# Create logical ports 'bar1', 'bar2', 'bar3' in switch 'bar'. +ADD_NAMESPACES(bar1) +ADD_VETH(bar1, bar1, br-int, "172.16.1.2/24", "f0:00:0f:01:02:03", \ + "172.16.1.1") +ovn-nbctl lsp-add bar bar1 \ +-- lsp-set-addresses bar1 "f0:00:0f:01:02:03 172.16.1.2" + +ADD_NAMESPACES(bar2) +ADD_VETH(bar2, bar2, br-int, "172.16.1.3/24", "f0:00:0f:01:02:04", \ + "172.16.1.1") +ovn-nbctl lsp-add bar bar2 \ +-- lsp-set-addresses bar2 "f0:00:0f:01:02:04 172.16.1.3" + +ADD_NAMESPACES(bar3) +ADD_VETH(bar3, bar3, br-int, "172.16.1.4/24", "f0:00:0f:01:02:05", \ + "172.16.1.1") +ovn-nbctl lsp-add bar bar3 \ +-- lsp-set-addresses bar3 "f0:00:0f:01:02:05 172.16.1.4" + +# Config OVN load-balancer. +uuid=`ovn-nbctl create load_balancer vips:30.0.0.1="172.16.1.2,172.16.1.3,172.16.1.4"` +ovn-nbctl set logical_switch foo load_balancer=$uuid + +# Wait for ovn-controller to catch up. +sleep 2 + +# Start webservers in 'bar1', 'bar2' and 'bar3'. +NETNS_DAEMONIZE([bar1], [[$PYTHON $srcdir/test-l7.py]], [http1.pid]) +NETNS_DAEMONIZE([bar2], [[$PYTHON $srcdir/test-l7.py]], [http2.pid]) +NETNS_DAEMONIZE([bar3], [[$PYTHON $srcdir/test-l7.py]], [http3.pid]) + +dnl Should work with the virtual IP address through NAT +for i in 1 2 3 4 5 6 7 8 9 10 11 12; do + echo Request $i + NS_CHECK_EXEC([foo1], [wget 30.0.0.1 -t 5 -T 1 --retry-connrefused -v -o wget$i.log]) +done + +dnl Each server should have at least one connection. +AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(30.0.0.1)], [0], [dnl +tcp,orig=(src=192.168.1.2,dst=30.0.0.1,sport=,dport=),reply=(src=172.16.1.2,dst=192.168.1.2,sport=,dport=),protoinfo=(state=) +tcp,orig=(src=192.168.1.2,dst=30.0.0.1,sport=,dport=),reply=(src=172.16.1.3,dst=192.168.1.2,sport=,dport=),protoinfo=(state=) +tcp,orig=(src=192.168.1.2,dst=30.0.0.1,sport=,dport=),reply=(src=172.16.1.4,dst=192.168.1.2,sport=,dport=),protoinfo=(state=) +]) + + +OVS_APP_EXIT_AND_WAIT([ovn-controller]) + +as ovn-sb +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) + +as ovn-nb +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) + +as northd +OVS_APP_EXIT_AND_WAIT([ovn-northd]) + +as +OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port patch-.*/d"]) +AT_CLEANUP