aboutsummaryrefslogtreecommitdiffstats
path: root/src/vcl/vcl_test.conf
blob: f6b786bbdcc093c4d43787681a7f8a2da8a6f6e9 (plain)
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
# Test VPPCOM config file
vcl {
  heapsize 1G
  heapsize 1
  vpp-api-q-length 32
  vpp-api-q-length 65536
  api-prefix daw  # this is a comment
  uid 1020 this is also a comment.
  gid 1020
# This is yet another comment!
  segment-baseva 0x300000000
  segment-size 0x10000000
  segment-size 268435456
  add-segment-size 0x1000000
  add-segment-size 134217728
  preallocated-fifo-pairs 16
  rx-fifo-size 3145728
  rx-fifo-size 0x300000
  tx-fifo-size 3145728
  tx-fifo-size 0x300000
  event-queue-size 1024
  event-queue-size 0x400
  listen-queue-size 32
  listen-queue-size 0x20
  app-timeout 54.3
  session-timeout 66.6
  accept-timeout 0.1
  app-proxy-transport-tcp
  app-proxy-transport-udp
  app-scope-local
  app-scope-global
  namespace-id 0123456789012345678901234567890123456789012345678901234567890123456789
  namespace-id Oh_Bother!_Said_Winnie-The-Pooh
  namespace-secret 42
}
old } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
package main

import (
	"fmt"
	"time"

)

func (s *VethsSuite) TestVclEchoQuic() {
	s.T().Skip("quic test skipping..")
	s.testVclEcho("quic")
}

func (s *VethsSuite) TestVclEchoUdp() {
	s.T().Skip("udp echo currently broken in vpp, skipping..")
	s.testVclEcho("udp")
}

func (s *VethsSuite) TestVclEchoTcp() {
	s.testVclEcho("tcp")
}

func (s *VethsSuite) testVclEcho(proto string) {
	serverVolume := "echo-srv-vol"
	s.NewVolume(serverVolume)

	clientVolume := "echo-cln-vol"
	s.NewVolume(clientVolume)

	srvInstance := "vpp-vcl-test-srv"
	serverVppContainer, err := s.NewContainer(srvInstance)
	s.assertNil(err)
	serverVppContainer.addVolume(serverVolume, "/tmp/Configure2Veths")
	s.assertNil(serverVppContainer.run())

	clnInstance := "vpp-vcl-test-cln"
	clientVppContainer, err := s.NewContainer(clnInstance)
	s.assertNil(err)
	clientVppContainer.addVolume(clientVolume, "/tmp/Configure2Veths")
	s.assertNil(clientVppContainer.run())

	echoSrv := "echo-srv"
	serverEchoContainer, err := s.NewContainer(echoSrv)
	s.assertNil(err)
	serverEchoContainer.addVolume(serverVolume, "/tmp/" + echoSrv)
	s.assertNil(serverEchoContainer.run())

	echoCln := "echo-cln"
	clientEchoContainer, err := s.NewContainer(echoCln)
	s.assertNil(err)
	clientEchoContainer.addVolume(clientVolume, "/tmp/" + echoCln)
	s.assertNil(clientEchoContainer.run())

	_, err = hstExec("Configure2Veths srv", srvInstance)
	s.assertNil(err)

	_, err = hstExec("Configure2Veths cln", clnInstance)
	s.assertNil(err)

	// run server app
	_, err = hstExec("RunEchoServer "+proto, echoSrv)
	s.assertNil(err)

	o, err := hstExec("RunEchoClient "+proto, echoCln)
	s.assertNil(err)

	fmt.Println(o)
}

func (s *VethsSuite) TestVclRetryAttach() {
	s.T().Skip()
	s.testRetryAttach("tcp")
}

func (s *VethsSuite) testRetryAttach(proto string) {
	serverVolume := "echo-srv-vol"
	s.NewVolume(serverVolume)

	clientVolume := "echo-cln-vol"
	s.NewVolume(clientVolume)

	srvInstance := "vpp-vcl-test-srv"
	serverVppContainer, err := s.NewContainer(srvInstance)
	s.assertNil(err)
	serverVppContainer.addVolume(serverVolume, "/tmp/Configure2Veths")
	s.assertNil(serverVppContainer.run())

	clnInstance := "vpp-vcl-test-cln"
	clientVppContainer, err := s.NewContainer(clnInstance)
	s.assertNil(err)
	clientVppContainer.addVolume(clientVolume, "/tmp/Configure2Veths")
	s.assertNil(clientVppContainer.run())

	echoSrv := "echo-srv"
	serverEchoContainer, err := s.NewContainer(echoSrv)
	s.assertNil(err)
	serverEchoContainer.addVolume(serverVolume, "/tmp/" + echoSrv)
	s.assertNil(serverEchoContainer.run())

	echoCln := "echo-cln"
	clientEchoContainer, err := s.NewContainer(echoCln)
	s.assertNil(err)
	clientEchoContainer.addVolume(clientVolume, "/tmp/" + echoCln)
	s.assertNil(clientEchoContainer.run())

	_, err = hstExec("Configure2Veths srv-with-preset-hw-addr", srvInstance)
	s.assertNil(err)

	_, err = hstExec("Configure2Veths cln", clnInstance)
	s.assertNil(err)

	_, err = hstExec("RunVclEchoServer "+proto, echoSrv)
	s.assertNil(err)

	fmt.Println("This whole test case can take around 3 minutes to run. Please be patient.")
	fmt.Println("... Running first echo client test, before disconnect.")
	_, err = hstExec("RunVclEchoClient "+proto, echoCln)
	s.assertNil(err)
	fmt.Println("... First test ended. Stopping VPP server now.")

	// Stop server-vpp-instance, start it again and then run vcl-test-client once more
	stopVppCommand := "/bin/bash -c 'ps -C vpp_main -o pid= | xargs kill -9'"
	_, err = dockerExec(stopVppCommand, srvInstance)
	s.assertNil(err)
	time.Sleep(5 * time.Second) // Give parent process time to reap the killed child process
	stopVppCommand = "/bin/bash -c 'ps -C hs-test -o pid= | xargs kill -9'"
	_, err = dockerExec(stopVppCommand, srvInstance)
	s.assertNil(err)
	_, err = hstExec("Configure2Veths srv-with-preset-hw-addr", srvInstance)
	s.assertNil(err)

	fmt.Println("... VPP server is starting again, so waiting for a bit.")
	time.Sleep(30 * time.Second) // Wait a moment for the re-attachment to happen

	fmt.Println("... Running second echo client test, after disconnect and re-attachment.")
	_, err = hstExec("RunVclEchoClient "+proto, echoCln)
	s.assertNil(err)
	fmt.Println("Done.")
}

func (s *VethsSuite) TestTcpWithLoss() {
	serverContainer, err := s.NewContainer("server")
	s.assertNil(err, "creating container failed")
	err = serverContainer.run()
	s.assertNil(err)

	serverVpp := NewVppInstance(serverContainer)
	s.assertNotNil(serverVpp)
	serverVpp.setCliSocket("/var/run/vpp/cli.sock")
	serverVpp.set2VethsServer()
	err = serverVpp.start()
	s.assertNil(err, "starting VPP failed")

	_, err = serverVpp.vppctl("test echo server uri tcp://10.10.10.1/20022")
	s.assertNil(err, "starting echo server failed")

	clientContainer, err := s.NewContainer("client")
	s.assertNil(err, "creating container failed")
	err = clientContainer.run()
	s.assertNil(err, "starting container failed")

	clientVpp := NewVppInstance(clientContainer)
	s.assertNotNil(clientVpp)
	clientVpp.setCliSocket("/var/run/vpp/cli.sock")
	clientVpp.set2VethsClient()
	err = clientVpp.start()
	s.assertNil(err, "starting VPP failed")

	// Ensure that VPP doesn't abort itself with NSIM enabled
	// Warning: Removing this ping will make the test fail!
	_, err = serverVpp.vppctl("ping 10.10.10.2")
	s.assertNil(err, "ping failed")

	// Add loss of packets with Network Delay Simulator
	_, err = clientVpp.vppctl("set nsim poll-main-thread delay 0.01 ms bandwidth 40 gbit packet-size 1400 packets-per-drop 1000")
	s.assertNil(err, "configuring NSIM failed")
	_, err = clientVpp.vppctl("nsim output-feature enable-disable host-vppcln")
	s.assertNil(err, "enabling NSIM failed")

	// Do echo test from client-vpp container
	output, err := clientVpp.vppctl("test echo client uri tcp://10.10.10.1/20022 mbytes 50")
	s.assertNil(err)
	s.assertEqual(true, len(output) != 0)
	s.assertNotContains(output, "failed: timeout")
	fmt.Println(output)
}