Skip to content

Commit

Permalink
Add E2E focus and traffic generator cmd as argument
Browse files Browse the repository at this point in the history
Possibility to set the traffic generator command
Add ginkgo focus argument to run specific tests (IngressTraffic, Scaling, MultiTrenches,
Target).
example: make e2e E2E_FOCUS="IngressTraffic"
  • Loading branch information
LionelJouin committed Aug 18, 2021
1 parent 555bf7c commit e570a21
Show file tree
Hide file tree
Showing 8 changed files with 31 additions and 17 deletions.
5 changes: 4 additions & 1 deletion Makefile
Expand Up @@ -7,6 +7,9 @@ VERSION_NSP ?= $(VERSION)
VERSION_CTRAFFIC ?= $(VERSION)
VERSION_FRONTEND ?= $(VERSION)

E2E_FOCUS ?= ""
TRAFFIC_GENERATOR_CMD ?= "docker exec -i {trench}"

REGISTRY ?= localhost:5000/meridio

.PHONY: all
Expand Down Expand Up @@ -77,7 +80,7 @@ lint:

.PHONY: e2e
e2e:
ginkgo --failFast ./test/e2e/...
ginkgo --failFast --focus=$(E2E_FOCUS) ./test/e2e/... -- -traffic-generator-cmd=$(TRAFFIC_GENERATOR_CMD)

.PHONY: test
test:
Expand Down
3 changes: 3 additions & 0 deletions go.sum
Expand Up @@ -277,6 +277,7 @@ github.com/edwarnicke/grpcfd v0.1.0/go.mod h1:rHihB9YvNMixz8rS+ZbwosI2kj65VLkeyY
github.com/edwarnicke/serialize v0.0.0-20200705214914-ebc43080eecf/go.mod h1:XvbCO/QGsl3X8RzjBMoRpkm54FIAZH5ChK2j+aox7pw=
github.com/edwarnicke/serialize v1.0.7 h1:geX8vmyu8Ij2S5fFIXjy9gBDkKxXnrMIzMoDvV0Ddac=
github.com/edwarnicke/serialize v1.0.7/go.mod h1:y79KgU2P7ALH/4j37uTSIdNavHFNttqN7pzO6Y8B2aw=
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
Expand Down Expand Up @@ -521,6 +522,7 @@ github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmK
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.10 h1:6q5mVkdH/vYmqngx7kZQTjJ5HRsx+ImorDIEQ+beJgc=
github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
Expand Down Expand Up @@ -605,6 +607,7 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
github.com/mna/pigeon v0.0.0-20180808201053-bb0192cfc2ae/go.mod h1:Iym28+kJVnC1hfQvv5MUtI6AiFFzvQjHcvI4RFTG/04=
github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM=
github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM=
Expand Down
7 changes: 7 additions & 0 deletions test/e2e/e2e_suite_test.go
Expand Up @@ -17,12 +17,19 @@ limitations under the License.
package e2e_test

import (
"flag"
"testing"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)

var trafficGeneratorCMD string

func init() {
flag.StringVar(&trafficGeneratorCMD, "traffic-generator-cmd", "docker exec -i {trench}", "Command to use to connect to the traffic generator. All occurences of '{trench}' will be replaced with the trench name.")
}

func TestE2e(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "E2e Suite")
Expand Down
4 changes: 2 additions & 2 deletions test/e2e/ingress_traffic_test.go
Expand Up @@ -27,15 +27,15 @@ var _ = Describe("IngressTraffic", func() {
Context("With one trench (trench-a) deployed in namespace red containing 2 VIP addresses (20.0.0.1:5000, [2000::1]:5000) and 4 target pods running ctraffic", func() {
It("(the traffic) should have been received correctly in IPv4", func() {
By("Checking if all targets have receive traffic with no traffic interruption (no lost connection)")
lastingConn, lostConn, err := utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err := utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(4))
})

It("(the traffic) should have been received correctly in IPv6", func() {
By("Checking if all targets have receive traffic with no traffic interruption (no lost connection)")
lastingConn, lostConn, err := utils.SendTraffic("trench-a", "red", "[2000::1]:5000", 400, 100)
lastingConn, lostConn, err := utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "[2000::1]:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(4))
Expand Down
8 changes: 4 additions & 4 deletions test/e2e/multi_trenches_test.go
Expand Up @@ -61,11 +61,11 @@ var _ = Describe("MultiTrenches", func() {
var trenchBLastingConn map[string]int
var trenchBLostConn map[string]int
go func() {
trenchALastingConn, trenchALostConn, trenchAErr = utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
trenchALastingConn, trenchALostConn, trenchAErr = utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
trenchADone <- true
}()
go func() {
trenchBLastingConn, trenchBLostConn, trenchBErr = utils.SendTraffic("trench-b", "red", "20.0.0.1:5000", 400, 100)
trenchBLastingConn, trenchBLostConn, trenchBErr = utils.SendTraffic(trafficGeneratorCMD, "trench-b", "red", "20.0.0.1:5000", 400, 100)
trenchBDone <- true
}()
<-trenchADone
Expand All @@ -88,12 +88,12 @@ var _ = Describe("MultiTrenches", func() {
_, err = utils.PodExec(targetPod, "ctraffic", []string{"./target-client", "request", "-ns", "load-balancer", "-t", "trench-b"})
Expect(err).NotTo(HaveOccurred())

lastingConn, lostConn, err := utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err := utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(3))

lastingConn, lostConn, err = utils.SendTraffic("trench-b", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err = utils.SendTraffic(trafficGeneratorCMD, "trench-b", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(5))
Expand Down
4 changes: 2 additions & 2 deletions test/e2e/scaling_test.go
Expand Up @@ -60,7 +60,7 @@ var _ = Describe("Scaling", func() {
_, err := clientset.AppsV1().Deployments("red").UpdateScale(context.Background(), "target-a", scale, metav1.UpdateOptions{})
Expect(err).NotTo(HaveOccurred())
time.Sleep(3 * time.Second)
lastingConn, lostConn, err := utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err := utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(3))
Expand All @@ -70,7 +70,7 @@ var _ = Describe("Scaling", func() {
_, err = clientset.AppsV1().Deployments("red").UpdateScale(context.Background(), "target-a", scale, metav1.UpdateOptions{})
Expect(err).NotTo(HaveOccurred())
time.Sleep(3 * time.Second) // todo: wait for the new target to be ready
lastingConn, lostConn, err = utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err = utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(4))
Expand Down
8 changes: 4 additions & 4 deletions test/e2e/target_test.go
Expand Up @@ -54,15 +54,15 @@ var _ = Describe("Target", func() {
By("Closing the stream in a target")
_, err := utils.PodExec(targetPod, "ctraffic", []string{"./target-client", "close", "-ns", "load-balancer", "-t", "trench-a"})
Expect(err).NotTo(HaveOccurred())
lastingConn, lostConn, err := utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err := utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(3))

By("Reopening the stream in the target")
_, err = utils.PodExec(targetPod, "ctraffic", []string{"./target-client", "request", "-ns", "load-balancer", "-t", "trench-a"})
Expect(err).NotTo(HaveOccurred())
lastingConn, lostConn, err = utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err = utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(4))
Expand All @@ -72,7 +72,7 @@ var _ = Describe("Target", func() {
By("Closing the stream in a target")
_, err := utils.PodExec(targetPod, "ctraffic", []string{"./target-client", "disconnect", "-ns", "load-balancer", "-t", "trench-a"})
Expect(err).NotTo(HaveOccurred())
lastingConn, lostConn, err := utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err := utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(3))
Expand All @@ -85,7 +85,7 @@ var _ = Describe("Target", func() {
Expect(err).NotTo(HaveOccurred())
_, err = utils.PodExec(targetPod, "ctraffic", []string{"./target-client", "request", "-ns", "load-balancer", "-t", "trench-a"})
Expect(err).NotTo(HaveOccurred())
lastingConn, lostConn, err = utils.SendTraffic("trench-a", "red", "20.0.0.1:5000", 400, 100)
lastingConn, lostConn, err = utils.SendTraffic(trafficGeneratorCMD, "trench-a", "red", "20.0.0.1:5000", 400, 100)
Expect(err).NotTo(HaveOccurred())
Expect(len(lostConn)).To(Equal(0))
Expect(len(lastingConn)).To(Equal(4))
Expand Down
9 changes: 5 additions & 4 deletions test/e2e/utils/trafficgenerator.go
Expand Up @@ -21,13 +21,14 @@ import (
"encoding/json"
"fmt"
"os/exec"
"strings"
)

type lostConnection map[string]int
type lastingConnection map[string]int

func SendTraffic(trench string, namespace string, vip string, nconn int, rate int) (lastingConnection, lostConnection, error) {
hostcmd := trafficGeneratorHostCommand(trench)
func SendTraffic(trafficGeneratorCMD string, trench string, namespace string, vip string, nconn int, rate int) (lastingConnection, lostConnection, error) {
hostcmd := trafficGeneratorHostCommand(trafficGeneratorCMD, trench)
ctrafficcmd := ctrafficClientCommand(vip, nconn, rate)
cmd := exec.Command("/bin/sh", "-c", fmt.Sprintf("%s %s", hostcmd, ctrafficcmd))
var stdout bytes.Buffer
Expand All @@ -42,8 +43,8 @@ func SendTraffic(trench string, namespace string, vip string, nconn int, rate in
return lastingConn, lostConn, nil
}

func trafficGeneratorHostCommand(trench string) string {
return fmt.Sprintf("docker exec -i %s", trench)
func trafficGeneratorHostCommand(trafficGeneratorCMD string, trench string) string {
return strings.ReplaceAll(trafficGeneratorCMD, "{trench}", trench)
}

func ctrafficClientCommand(vip string, nconn int, rate int) string {
Expand Down

0 comments on commit e570a21

Please sign in to comment.